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) ........................這樣就可以定位出出問題的類了