怎样分析java进程占cpu_java进程占用cpu过高分析是哪些线程
拿hbase基準測試列子來分析哪些線程使用比較高的cpu,環境是linux,基準測試命令:
hbase org.apache.hadoop.hbase.PerformanceEvaluation ?--rows=500000 --nomapred --presplit=5 --writeToWAL=true randomWrite 5
首先查看占用cpu最高的進程和線程id,執行命令:
[ocnosql@server01 logs]$ ps Hh -eo pid,tid,pcpu | sort -nk3 |tail
12404 12429 0.6
13230 13291 0.6
14117 14178 1.7
14117 14172 1.9
14117 14294 4.6
14117 14295 4.6
14117 14296 4.6
14117 14293 4.7
14117 14297 4.7
14117 14173 8.0
獲取線程14297十六進制,后面會在jstack里面用到
[ocnosql@server01 logs]$ printf "%x\n" 14297
37d9
然后根據jstack查看cpu使用為4.7%的線程id14297,進程id14117,獲取jstack信息:
[ocnosql@server01 logs]$ jstack 14117 > jstack.log
然后vi jstack.log,查找線程id為37d9的線程
"TestClient-4" #40 prio=5 os_prio=0 tid=0x00007fefc0539000 nid=0x37d9 runnable [0x00007fefa73f9000]
java.lang.Thread.State: RUNNABLE
at org.apache.hadoop.hbase.util.Bytes$LexicographicalComparerHolder$UnsafeComparer.compareTo(Bytes.java:1276)
at org.apache.hadoop.hbase.util.Bytes.compareTo(Bytes.java:1187)
at org.apache.hadoop.hbase.util.Bytes$ByteArrayComparator.compare(Bytes.java:153)
at org.apache.hadoop.hbase.util.Bytes$ByteArrayComparator.compare(Bytes.java:142)
at java.util.concurrent.ConcurrentSkipListMap.cpr(ConcurrentSkipListMap.java:655)
at java.util.concurrent.ConcurrentSkipListMap.findNear(ConcurrentSkipListMap.java:1247)
at java.util.concurrent.ConcurrentSkipListMap.getNear(ConcurrentSkipListMap.java:1268)
at java.util.concurrent.ConcurrentSkipListMap.floorEntry(ConcurrentSkipListMap.java:2153)
at org.apache.hadoop.hbase.client.MetaCache.getCachedLocation(MetaCache.java:74)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.getCachedLocation(ConnectionManager.java:1313)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegionInMeta(ConnectionManager.java:1157)
at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.locateRegion(ConnectionManager.java:1109)
at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:369)
at org.apache.hadoop.hbase.client.AsyncProcess.submit(AsyncProcess.java:320)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.backgroundFlushCommits(BufferedMutatorImpl.java:198)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.doMutate(BufferedMutatorImpl.java:141)
at org.apache.hadoop.hbase.client.BufferedMutatorImpl.mutate(BufferedMutatorImpl.java:98)
- locked <0x00000000c6ccc800> (a org.apache.hadoop.hbase.client.BufferedMutatorImpl)
at org.apache.hadoop.hbase.PerformanceEvaluation$RandomWriteTest.testRow(PerformanceEvaluation.java:1384)
at org.apache.hadoop.hbase.PerformanceEvaluation$Test.testTimed(PerformanceEvaluation.java:1071)
at org.apache.hadoop.hbase.PerformanceEvaluation$Test.test(PerformanceEvaluation.java:1053)
at org.apache.hadoop.hbase.PerformanceEvaluation.runOneClient(PerformanceEvaluation.java:1612)
at org.apache.hadoop.hbase.PerformanceEvaluation$1.call(PerformanceEvaluation.java:410)
at org.apache.hadoop.hbase.PerformanceEvaluation$1.call(PerformanceEvaluation.java:405)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
可以看到此線程正在執行put操作,是基準測試中的一個client,符合我們的預期。
總結
以上是生活随笔為你收集整理的怎样分析java进程占cpu_java进程占用cpu过高分析是哪些线程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关闭mysql密码策略_MYSQL57密
- 下一篇: html5 无障碍,[Vue 3] 教程