Linux环境通过java虚拟机定位程序问题位置的方法

来源:互联网 发布:欧洲卡车模拟 知乎 编辑:程序博客网 时间:2024/05/17 20:30

1.  # ps -ef | grep tomcat

结果类似如下格式:

[@sjs_113_75 vmstudy]# ps -ef | grep tomcatroot      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  Command14时24分43秒     81988         -  916.00   27.00    0.00  943.00    21  java14时24分43秒         -     81988    0.00    0.00    0.00    0.00    21  |__java14时24分43秒         -     81997    0.00    0.00    0.00    0.00     2  |__java14时24分43秒         -     81998    4.00    1.00    0.00    5.00    17  |__java14时24分43秒         -     81999    4.00    0.00    0.00    4.00     4  |__java14时24分43秒         -     82000    4.00    0.00    0.00    4.00     2  |__java14时24分43秒         -     82001    4.00    0.00    0.00    4.00     1  |__java14时24分43秒         -     82002    5.00    0.00    0.00    5.00    11  |__java14时24分43秒         -     82003    5.00    0.00    0.00    5.00    23  |__java14时24分43秒         -     82004    5.00    0.00    0.00    5.00    18  |__java14时24分43秒         -     82005    3.00    0.00    0.00    3.00     5  |__java14时24分43秒         -     82006    4.00    0.00    0.00    4.00    27  |__java14时24分43秒         -     82007    5.00    0.00    0.00    5.00    26  |__java14时24分43秒         -     82008    4.00    0.00    0.00    4.00     3  |__java14时24分43秒         -     82009    4.00    1.00    0.00    5.00    13  |__java14时24分43秒         -     82010    4.00    1.00    0.00    5.00     9  |__java14时24分43秒         -     82011    4.00    0.00    0.00    4.00    12  |__java14时24分43秒         -     82012    4.00    1.00    0.00    5.00     7  |__java14时24分43秒         -     82013    4.00    0.00    0.00    4.00    30  |__java14时24分43秒         -     82014    4.00    0.00    0.00    4.00    19  |__java14时24分43秒         -     82015    4.00    0.00    0.00    4.00    21  |__java14时24分43秒         -     82016    4.00    0.00    0.00    4.00     0  |__java14时24分43秒         -     82017    5.00    1.00    0.00    6.00     6  |__java14时24分43秒         -     82018    4.00    0.00    0.00    4.00     8  |__java14时24分43秒         -     82019    4.00    0.00    0.00    4.00    15  |__java14时24分43秒         -     82020    4.00    0.00    0.00    4.00    29  |__java14时24分43秒         -     82021    5.00    0.00    0.00    5.00     5  |__java14时24分43秒         -     82022    1.00    0.00    0.00    1.00    12  |__java14时24分43秒         -     82023    0.00    0.00    0.00    0.00     7  |__java14时24分43秒         -     82024    0.00    0.00    0.00    0.00    18  |__java14时24分43秒         -     82025    0.00    0.00    0.00    0.00    18  |__java14时24分43秒         -     82026    0.00    0.00    0.00    0.00     0  |__java14时24分43秒         -     82027    0.00    0.00    0.00    0.00    26  |__java14时24分43秒         -     82028    0.00    0.00    0.00    0.00     9  |__java14时24分43秒         -     82029    0.00    0.00    0.00    0.00    18  |__java14时24分43秒         -     82030    0.00    0.00    0.00    0.00    11  |__java14时24分43秒         -     82031    0.00    0.00    0.00    0.00    18  |__java14时24分43秒         -     82062    0.00    0.00    0.00    0.00    18  |__java14时24分43秒         -     82083    0.00    0.00    0.00    0.00     7  |__java14时24分43秒         -     82084    0.00    0.00    0.00    0.00     6  |__java14时24分43秒         -     82085    0.00    0.00    0.00    0.00    16  |__java14时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  |__java14时24分43秒         -     82105   75.00    2.00    0.00   77.00    20  |__java14时24分43秒         -     82106   82.00    2.00    0.00   84.00    10  |__java14时24分43秒         -     82107   84.00    1.00    0.00   85.00     5  |__java14时24分43秒         -     82108   77.00    3.00    0.00   80.00     2  |__java14时24分43秒         -     82109   80.00    3.00    0.00   83.00    16  |__java14时24分43秒         -     82110   83.00    3.00    0.00   86.00     3  |__java14时24分43秒         -     82111   84.00    4.00    0.00   88.00     9  |__java14时24分43秒         -     82112   82.00    2.00    0.00   84.00     1  |__java14时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)........................
这样就可以定位出出问题的类了

0 0
原创粉丝点击