Ⅰ 查看java哪個線程佔用CPU資源
以下方法在linux下執行通過:
1.先定位佔用cpu高的進程
top
2.使用以下命令
ps p 14766 -L -o pcpu,pid,tid,time,tname,stat,psr | sort -n -k1 -r
其中14766是剛才1中cpu佔用率高的進程pid
3.2.4 32525 32537 01:58:41 ? Sl 6
0.8 32525 1771 00:43:12 ? Sl 0
0.8 32525 1769 00:39:46 ? Sl 0
0.7 32525 12324 00:33:36 ? Sl 0
0.5 32525 1772 00:27:50 ? Sl 0
0.5 32525 1768 00:25:45 ? Sl 0
0.4 32525 30760 00:19:13 ? Sl 0
0.4 32525 1773 00:22:36 ? Sl 0
0.4 32525 1770 00:20:25 ? Sl 0
0.3 32525 32385 00:00:10 ? Sl 0
0.1 32525 31668 00:00:03 ? Sl 0
0.1 32525 31667 00:00:03 ? Sl 0
0.1 32525 1790 00:07:10 ? Sl 1
其中第3個結果就是此進程中有問題的線程nid
4.通過jstack命令mp出堆棧
"AppController_ThreadPool_L2_Pool Thread" daemon prio=10 tid=0x0000000051c2b000 nid=0x7bb3 in Object.wait() [0x000000005e3c5000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at org.company.threadpool.ThreadPoolImpl$PoolThread.run(ThreadPoolImpl.java:142)
- locked <0x00002aaca30341a8> (a org.company.threadpool.ThreadPoolImpl$PoolThread)
其中的nid就是線程的編碼,只不過是經過了16進制的轉換。
即十進制的31776對應的十六進制)0x7bb3,定位到線程後一切好辦。
Ⅱ linux查看java線程,怎麼回收無用的線程
1. 先進行一次thread mp (jstack -m <pid> 或者 kill -3 <pid> , 或者使用jconsole, jvisualvm等) (jstack 命令有一些選項不是每個平台都支持的, jconsole jvisualvm都是有界面的, 如果你要運行一般需要配置agent或者重定向display到某台機器).
2. 然後過了一段時間再做一次, 如果發現同一個thread NID 還是停在同一個地方, 基本上可以懷疑是否掛住了(一般只需要查看你業務相關的stack信息就行了).
3. 還有一種就是你的日誌很詳細, 也可以看到一些的情況(列印到某個地方就卡住了, 呵呵).
Ⅲ java windows怎麼查看線程佔用cpu
1、首先mp出該進程的所有線程及狀態使用命令jstackPID命令列印出CPU佔用過高進程的線程棧.jstack-l5683>5683.stack將進程id為5683的線程棧輸出到了文件2、使用top命令找到耗cpu的線程使用top-H-pPID命令查看對應進程是哪個線程占
Ⅳ java 多線程怎麼查看當前線程id
publicclass線程id
{
publicstaticvoidmain(String[]args)
{
System.out.println(" ==========多線程怎麼查看當前線程id========== ");
init();
}//初始化!
privatestaticvoidinit()
{
for(inti=0;i<2;i++)
{
newThread(newTestRunnable()).start();
}
}
}
{
//簡單測試直接用了靜態,偷懶了!
privatestaticinti=10;
publicvoidrun()
{
show();
}
synchronizedvoidshow()
{
while(i>=1)
System.out.println("當前執行的線程Id是:"+Thread.currentThread().getName()+"---->"+i--+" ");
}
}
Ⅳ Java如何監視線程的狀態
線程池的地方在新增或者刪除線程的時候加一個debug信息。
如果在命令行下面啟動的話用ctrl + break就可以看到當前哪些線程在運行了。。。
Ⅵ 查看JAVA進程中哪個線程CPU消耗最高
一,在centos linux 上查看進程佔用cpu過高
top
shift+h
查看哪個進程程消耗最高
二,查看JAVA進程中哪個線程消耗最高
2.1 導出java運行的線程信息
jstack 進程id(jps查看)
jstack 進程id > ps.txt
jstack -l 進程id (窗口列印)
//另外還有一種方式
如果啟動方式如下:
nohup java -classpath conf/:my.jar com.tank.manClass>./log.out 2>&1 &
則執行:kill -3 PID,進程信息會輸出到/log.out
2.2 查找最消耗cpu的java線程
jps
找到java進程PID
命令:ps -mppid-o THREAD,tid,time 或者 ps -Lfppid
通過%CPU和 TIME,判斷佔用的線程TID
找到TID,轉換成16進制,然後在上面(jstack 進程id > ps.txt)導出的文件中搜索,就可以定位到具體的線程,類。
Ⅶ 查看JAVA進程中哪個線程CPU消耗最高
2.1 導出java運行的線程信息
jstack 進程id(jps查看)
jstack 進程id > ps.txt
jstack -l 進程id (窗口列印)
//另外還有一種方式
如果啟動方式如下:
nohup java -classpath conf/:my.jar com.tank.manClass>./log.out 2>&1 &
則執行:kill -3 PID,進程信息會輸出到/log.out
2.2 查找最消耗cpu的java線程
jps
找到java進程PID
命令:ps -mppid-o THREAD,tid,time 或者 ps -Lfppid
通過%CPU和 TIME,判斷佔用的線程TID
找到TID,轉換成16進制,然後在上面(jstack 進程id > ps.txt)導出的文件中搜索,就可以定位到具體的線程,類。
Ⅷ java 線程總數如何查看
調用java.lang.Thread中的靜態方法:
getAllStackTraces() 返回所有活動線程的堆棧跟蹤的一個映射。
Ⅸ 如何查看一個java進程有多少個線程在工作
理論上來說,如果你全用threadgroup來跑線程的話,有個叫enumerate的方法可以得到【該threadgroup下】所有active的(也就是你說的在工作的)線程以及子線程,但程序裡面不一定是把線程放threadgroup裡面的,有可能有人自己new一個出來run或者別的,所以不能完全依靠這個辦法。我目前想到的辦法,貌似得弄個全局的counter,開個守護線程,讓這個線程去數監控所有線程的狀態,依照線程是否Active去加減這個counter。
還有個懶點的,你看windows的taskmanager(假設你在win平台上的話),裡面有一個column叫做thread
count的,我沒試過到底准不準,不過這個最省事了,右鍵點出來一看就知道了。