1. 程式人生 > >查詢最耗時最費CPU的那個執行緒

查詢最耗時最費CPU的那個執行緒

1. ps -ef|grep java  
查程序ID
root      8514     1  0 Mar04 ?        01:37:59 /usr/java/bin/java -Djava.util.logging.config.file=/data1/weibo_coral/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -server -Xms1000m -Xmx1000m -Xmn512m -Xss256m -DServer=mblog -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy -XX:ParallelGCThreads=10 -XX:+PrintFlagsFinal -XX:+PrintCommandLineFlags -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime -Dconsole.port=999 -Xloggc:../gclogs/gc.log.20150304_194247 -agentlib:jdwp=transport=dt_socket,address=11789,server=y,suspend=n -Djava.endorsed.dirs=/data1/weibo_coral/endorsed -classpath /data1/weibo_coral/bin/bootstrap.jar:/data1/weibo_coral/bin/tomcat-juli.jar -Dcatalina.base=/data1/weibo_coral -Dcatalina.home=/data1/weibo_coral -Djava.io.tmpdir=/data1/weibo_coral/temp org.apache.catalina.startup.Bootstrap start
2. ps -mp 8514 -o THREAD,tid,time 

查出程序下執行緒資訊,可以查出%CPU高,TIME長的執行緒ID(tid)
root      0.0  19    - futex_    -      -  8583 00:00:00
root      0.0  19    - futex_    -      -  8591 00:00:24
root      0.0  19    - futex_    -      -  8592 00:02:38
root      0.2  19    - futex_    -      -  8593 00:28:46
3.printf "%x\n" 8593
tid(8593)轉化為十六進位制2191

4.jstack 8514|grep 2191

 

打印出堆疊資訊

"pool-2-thread-1" prio=10 tid=0x00007f0e5c012800 nid=0x2191 runnable [0x00007f0e5bffe000]

簡單的解釋下,jstack下這一串執行緒資訊內容:
800 nid=0x7d9b waiting on condition [0x0000000046f66000]
"DboServiceProcessor-4-thread-295" daemon prio=10 tid=0x00002aab047a9800 nid=0x7d9b waiting on condition [0x0000000046f66000]
  nid:對應的linux作業系統下的tid,就是前面轉化的16進位制數字