java 死循环排查_java应用死循环排查方法或查找程序消耗资源的线程方法(面试)...
今天遇到一個面試,怎么在一堆線程中查找一個死循環(huán)?
如果遇到線上應用cpu飆升,并出現(xiàn)OutOfMemery怎么辦?
首先線上應用的jvm配置要養(yǎng)成良好的習慣,增加一下配置則可以在jvm發(fā)生 oom的時候自動dump日志了? -XX:+HeapDumpOnOutOfMemoryError?? -XX:HeapDumpPath=/export/log/dump/jvm-oom.log
如果遇到線上應用特別消耗cpu資源怎么去排查?
ps:首先普及一下linux中的java虛擬機線程實現(xiàn)方式:在Linux下面因為沒有真正的線程,是用進程模擬的,有一個是輔助線程,所以真正程序開的線程應該只有一個。
一、查看java進程
使用jps 或者ps -ef 查找到相應的java進程或者使用top查看機器占用cpu比例高的進程(進程號:13408)
二、使用top -H查看線程,進程號:13432
三、將線程號:13432轉換成十六進制:3478
四、查看dump文件或者使用jstack | grep
額外普及一下線程和進程的區(qū)別:
線程:是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體.
與進程的區(qū)別:
(1)地址空間:進程內(nèi)的一個執(zhí)行單元;進程至少有一個線程;它們共享進程的地址空間;而進程有自己獨立的地址空間;
(2)資源擁有:進程是資源分配和擁有的單位,同一個進程內(nèi)的線程共享進程的資源
(3)線程是處理器調(diào)度的基本單位,但進程不是.
4)二者均可并發(fā)執(zhí)行.
進程和線程都是由操作系統(tǒng)所體會的程序運行的基本單元,系統(tǒng)利用該基本單元實現(xiàn)系統(tǒng)對應用的并發(fā)性。進程和線程的區(qū)別在于:
簡而言之,一個程序至少有一個進程,一個進程至少有一個線程.
線程的劃分尺度小于進程,使得多線程程序的并發(fā)性高。
另外,進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運行效率。
線程在執(zhí)行過程中與進程還是有區(qū)別的。每個獨立的線程有一個程序運行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個應用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨立的應用,來實現(xiàn)進程的調(diào)度和管理以及資源分配。這就是進程和線程的重要區(qū)別。
進程是具有一定獨立功能的程序關于某個數(shù)據(jù)集合上的一次運行活動,進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.
線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.
一個線程可以創(chuàng)建和撤銷另一個線程;同一個進程中的多個線程之間可以并發(fā)執(zhí)行.
總結
以上是生活随笔為你收集整理的java 死循环排查_java应用死循环排查方法或查找程序消耗资源的线程方法(面试)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设施农用地备案流程图片(设施农用地备案流
- 下一篇: java串口发送16进制数据_MFC串口