歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

Linux環境通過java虛擬機定位程序問題位置的方法

1. # ps -ef | grep tomcat

結果類似如下格式:

[@sjs_113_75 vmstudy]# ps -ef | grep tomcat
root      62776      1 99 11:34 pts/17   07:49:56 /usr/bin/java -Djava.util.logging.config.file=/search/odin/xx/tomcat7/conf/logging.properties -Djava.util.logging
找到出問題的進程pid, 如上為62776,

2. # pidstat -p 62776 1 100 -u -t (-p指定進行pid,-u表示對CPU使用率的監控, -t參數將系統性能的監控細化到線程級別)

輸出結果如下:

14時24分42秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command
14時24分43秒     81988         -  916.00   27.00    0.00  943.00    21  java
14時24分43秒         -     81988    0.00    0.00    0.00    0.00    21  |__java
14時24分43秒         -     81997    0.00    0.00    0.00    0.00     2  |__java
14時24分43秒         -     81998    4.00    1.00    0.00    5.00    17  |__java
14時24分43秒         -     81999    4.00    0.00    0.00    4.00     4  |__java
14時24分43秒         -     82000    4.00    0.00    0.00    4.00     2  |__java
14時24分43秒         -     82001    4.00    0.00    0.00    4.00     1  |__java
14時24分43秒         -     82002    5.00    0.00    0.00    5.00    11  |__java
14時24分43秒         -     82003    5.00    0.00    0.00    5.00    23  |__java
14時24分43秒         -     82004    5.00    0.00    0.00    5.00    18  |__java
14時24分43秒         -     82005    3.00    0.00    0.00    3.00     5  |__java
14時24分43秒         -     82006    4.00    0.00    0.00    4.00    27  |__java
14時24分43秒         -     82007    5.00    0.00    0.00    5.00    26  |__java
14時24分43秒         -     82008    4.00    0.00    0.00    4.00     3  |__java
14時24分43秒         -     82009    4.00    1.00    0.00    5.00    13  |__java
14時24分43秒         -     82010    4.00    1.00    0.00    5.00     9  |__java
14時24分43秒         -     82011    4.00    0.00    0.00    4.00    12  |__java
14時24分43秒         -     82012    4.00    1.00    0.00    5.00     7  |__java
14時24分43秒         -     82013    4.00    0.00    0.00    4.00    30  |__java
14時24分43秒         -     82014    4.00    0.00    0.00    4.00    19  |__java
14時24分43秒         -     82015    4.00    0.00    0.00    4.00    21  |__java
14時24分43秒         -     82016    4.00    0.00    0.00    4.00     0  |__java
14時24分43秒         -     82017    5.00    1.00    0.00    6.00     6  |__java
14時24分43秒         -     82018    4.00    0.00    0.00    4.00     8  |__java
14時24分43秒         -     82019    4.00    0.00    0.00    4.00    15  |__java
14時24分43秒         -     82020    4.00    0.00    0.00    4.00    29  |__java
14時24分43秒         -     82021    5.00    0.00    0.00    5.00     5  |__java
14時24分43秒         -     82022    1.00    0.00    0.00    1.00    12  |__java
14時24分43秒         -     82023    0.00    0.00    0.00    0.00     7  |__java
14時24分43秒         -     82024    0.00    0.00    0.00    0.00    18  |__java
14時24分43秒         -     82025    0.00    0.00    0.00    0.00    18  |__java
14時24分43秒         -     82026    0.00    0.00    0.00    0.00     0  |__java
14時24分43秒         -     82027    0.00    0.00    0.00    0.00    26  |__java
14時24分43秒         -     82028    0.00    0.00    0.00    0.00     9  |__java
14時24分43秒         -     82029    0.00    0.00    0.00    0.00    18  |__java
14時24分43秒         -     82030    0.00    0.00    0.00    0.00    11  |__java
14時24分43秒         -     82031    0.00    0.00    0.00    0.00    18  |__java
14時24分43秒         -     82062    0.00    0.00    0.00    0.00    18  |__java
14時24分43秒         -     82083    0.00    0.00    0.00    0.00     7  |__java
14時24分43秒         -     82084    0.00    0.00    0.00    0.00     6  |__java
14時24分43秒         -     82085    0.00    0.00    0.00    0.00    16  |__java
14時24分43秒         -     82103    0.00    0.00    0.00    0.00     6  |__java
<strong>14時24分43秒         -     82104   84.00    2.00    0.00   86.00    24  |__java
14時24分43秒         -     82105   75.00    2.00    0.00   77.00    20  |__java
14時24分43秒         -     82106   82.00    2.00    0.00   84.00    10  |__java
14時24分43秒         -     82107   84.00    1.00    0.00   85.00     5  |__java
14時24分43秒         -     82108   77.00    3.00    0.00   80.00     2  |__java
14時24分43秒         -     82109   80.00    3.00    0.00   83.00    16  |__java
14時24分43秒         -     82110   83.00    3.00    0.00   86.00     3  |__java
14時24分43秒         -     82111   84.00    4.00    0.00   88.00     9  |__java
14時24分43秒         -     82112   82.00    2.00    0.00   84.00     1  |__java
14時24分43秒         -     82113   84.00    3.00    0.00   87.00    25  |__java</strong>
如上,可以看出,該進程下線程很多,其中黑體部分,%usr,%CPU的占有率很高,說明這些線程占了大部分CPU的時間,當然這是我的代碼,因為是開啟了多個線程來跑同一個需求,所以每個線程占用的CPU時間差不多相同,可以看出是如上黑體部分的線程占用了大部分CPU時間

3. 使用命令導出指定Java進行的所有線程到文件中

# jstack -l 62776 > /temp/t.txt

該文件中會出現類似如下內容

"Thread-0" prio=10 tid=0xb75b300 nid=0x4b4 runnable [0x8f171000]
    java.lang.Thread.State: runnable
    at javatunning.ch6.toolscheck.HoldCPUMain$<strong>HoldCPUTask</strong>.run(HoldCPUMain.java:7)
........................
這樣就可以定位出出問題的類了

Copyright © Linux教程網 All Rights Reserved