1. 程式人生 > >分析JAVA應用CPU佔用過高的問題

分析JAVA應用CPU佔用過高的問題

使用jstack分析java程式cpu佔用率過高的有關問題
使用jstack分析java程式cpu佔用率過高的問題
1,使用jps查找出java程序的pid,如3707
2,使用top -p 14292 -H觀察該程序中所有執行緒的CPU佔用。
1. [[email protected] ~]# top -p 14292 -H
2. top - 22:14:13 up 33 days, 7:29, 4 users, load average: 25.68, 32.11, 33.76
3. Tasks: 113 total, 2 running, 111 sleeping, 0 stopped, 0 zombie
4. Cpu(s): 68.3%us, 6.3%sy, 0.0%ni, 20.2%id, 0.1%wa, 0.2%hi, 4.9%si, 0.0%st
5. Mem: 65965312k total, 65451232k used, 514080k free, 82164k buffers
6. Swap: 975864k total, 972052k used, 3812k free, 9714400k cached
7.
8. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
9. 15844 root 15 0 6889m 5.7g 4864 S 20.6 9.1 814:13.29 java
10. 15848 root 15 0 6889m 5.7g 4864 S 13.0 9.1 460:25.17 java
11. 15611 root 15 0 6889m 5.7g 4864 S 12.7 9.1 468:17.77 java
12. 15613 root 15 0 6889m 5.7g 4864 S 11.7 9.1 479:40.45 java
13. 15743 root 15 0 6889m 5.7g 4864 S 11.7 9.1 443:04.80 java
14. 15612 root 15 0 6889m 5.7g 4864 S 11.0 9.1 453:43.68 java
15. 15965 root 15 0 6889m 5.7g 4864 S 10.3 9.1 371:00.33 java
16. 15490 root 15 0 6889m 5.7g 4864 S 7.7 9.1 255:32.74 java
17. 15587 root 15 0 6889m 5.7g 4864 S 7.3 9.1 282:27.58 java
18. 15590 root 15 0 6889m 5.7g 4864 S 7.3 9.1 205:48.37 java
19. 15491 root 15 0 6889m 5.7g 4864 R 6.3 9.1 279:09.08 java
20. 15689 root 15 0 6889m 5.7g 4864 S 5.7 9.1 251:42.36 java
21. 16935 root 15 0 6889m 5.7g 4864 S 5.7 9.1 190:34.37 java
22. 15665 root 15 0 6889m 5.7g 4864 S 5.3 9.1 250:07.34 java
23. 16920 root 15 0 6889m 5.7g 4864 S 5.3 9.1 241:34.50 java
24. 15671 root 15 0 6889m 5.7g 4864 S 5.0 9.1 239:49.97 java
25. 15492 root 15 0 6889m 5.7g 4864 S 4.7 9.1 210:23.09 java
26. 14322 root 16 0 6889m 5.7g 4864 S 4.3 9.1 107:39.61 java
27. 14316 root 16 0 6889m 5.7g 4864 S 4.0 9.1 107:18.43 java
28. 14317 root 16 0 6889m 5.7g 4864 S 4.0 9.1 107:29.13 java
29. 15591 root 15 0 6889m 5.7g 4864 S 4.0 9.1 114:34.90 java
30. 14313 root 16 0 6889m 5.7g 4864 S 3.7 9.1 107:12.70 java
31. 14314 root 15 0 6889m 5.7g 4864 S 3.7 9.1 107:28.05 java
32. 14319 root 16 0 6889m 5.7g 4864 S 3.7 9.1 107:27.43 java
33. 14321 root 15 0 6889m 5.7g 4864 S 3.3 9.1 108:01.12 java
34. 15589 root 15 0 6889m 5.7g 4864 R 3.0 9.1 109:01.91 java
35. 15615 root 15 0 6889m 5.7g 4864 S 3.0 9.1 114:55.29 java
36. 16808 root 15 0 6889m 5.7g 4864 S 2.7 9.1 279:05.03 java
37. 14315 root 15 0 6889m 5.7g 4864 S 2.0 9.1 107:45.00 java
38. 14320 root 15 0 6889m 5.7g 4864 S 2.0 9.1 107:48.30 java
39. 15489 root 15 0 6889m 5.7g 4864 S 1.7 9.1 57:38.46 java
40. 15670 root 15 0 6889m 5.7g 4864 S 1.3 9.1 5:55.43 java
41. 14318 root 15 0 6889m 5.7g 4864 S 0.7 9.1 107:45.88 java
42. 14826 root 15 0 6889m 5.7g 4864 S 0.7 9.1 25:07.64 java

3,找出CPU消耗較多的執行緒id,如15844,將15844轉換為16進位制0x3de4,注意是小寫哦
4,使用jstack 14292|grep -A 10 0x3de4來查詢出具體的執行緒狀態。

1. [[email protected] ~]# jstack 14292|grep -A 10 0x3de4  
2. "pool-52-thread-1" prio=10 tid=0x000000005a08e000 nid=0x3de4 waiting on condition [0x00002ae63d917000]  
3.    java.lang.Thread.State: WAITING (parking)  
4.         at sun.misc.Unsafe.park(Native Method)  
5.         - parking to wait for  <0x00000006f9a0a110> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)  
6.         at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)  
7.         at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)  
8.         at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)  
9.         at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)  
10.         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)  
11.         at java.lang.Thread.run(Thread.java:662)  

相關推薦

分析JAVA應用CPU佔用的問題

使用jstack分析java程式cpu佔用率過高的有關問題 使用jstack分析java程式cpu佔用率過高的問題 1,使用jps查找出java程序的pid,如3707 2,使用top -p 14292 -H觀察該程序中所有執行緒的CPU佔用。

java執行CPU佔用追蹤

流程執行命令: 1.top  查到pid 28555 2.ps aux|grep 28555 確定到是tomcat的程序 3.顯示執行緒列表 ps -mp 28555 -o THREAD,tid,time   查到tid 28802 4. printf "%x\n" 2880

linux檢視java程序cpu佔用

 linux下查詢java程序佔用CPU過高原因1. 查詢程序top檢視程序佔用資源情況明顯看出java的兩個程序22714,12406佔用過高cpu. 2.查詢執行緒使用top -H -p <pid>檢視執行緒佔用情況 3.查詢java的堆疊資訊將執行緒id轉換成十

面試問題---JAVA程式CPU佔用怎麼定位

今天一個電話面試問了這個問題。回來查了下答案,自己也順帶操作一遍,做個記錄。之前只知道jstack工具可以檢視執行緒狀態這些。比如死鎖這些,主要是之前不知道top -H -p pid這個命令的使用,這命令可以看到程序下面執行緒資訊,拿到執行緒ID,然後再結合jstack命令使用就可以解決這個問題了。下面記錄一

Java應用CPU佔用100%原因分析

在linux環境下部署的應用,有時候出於各種原因,出現cpu佔用100%的情況。這時候,就需要快速分析定位cpu佔用的原因。 通常,通過linux系統的top命令,可以看出具體哪個程序佔用了過多的cpu資源。但如果發現是java程序,那麼就需要進一步分析是java程序中的具體哪個執行

Java應用CPU佔用100%原因分析(轉載)

在linux環境下部署的應用,有時候出於各種原因,出現cpu佔用100%的情況。這時候,就需要快速分析定位cpu佔用的原因。 通常,通過linux系統的top命令,可以看出具體哪個程序佔用了過多的cpu資源。但如果發現是java程序,那麼就需要進一步分析是java程序中的具

java程序 cpu load分析過程

1\  jps -v列出所有的java程序 , top找出cpu佔用過高的對應的java 程序pid 2\ 使用top -H -p PID 命令檢視對應程序裡的哪個執行緒佔用CPU過高,取該執行緒pid 3\ 將執行緒的pid 轉成16進位制 4\jstack [程序

windows伺服器java專案cpu佔用原因分析

前言 在windows平臺上要找出到底是哪個執行緒佔用的cpu還不那麼容易,linux用top就簡單多了最後的解決方法: 1.找到java程序對應的pid。 找pid的方法是:開啟工作管理員,然後點選 “檢視” 選單,然後點選 “選擇列”,把pid勾

linux主機cpu 佔用分析

1.用top命令檢視哪個程序佔用CPU高 gateway閘道器程序14094佔用CPU高達891%,這個數值是程序內各個執行緒佔用CPU的累加值。 PID USER PR NI VIRT RES SHR S %CPU %MEM T

效能優化-Android之ANR問題分析解決 traces.txt檔案分析 CPU佔用

(由於公司專案特殊情況,需要使用一些小廠的三防功能手機,不能使用我們平時用的這些民用手機) 前期測試的時候是用民用手機測試的,有六七種機型(小米,華為,中興,oppo),使用過程中均沒有出現ANR的情況,但是在公司採購的一款工程機上面用了一段時間後肯定就會出現ANR,出現了

java web伺服器cpu佔用的處理

平時專案中有時遇到cpu過高的情況,在此基於自己有限的經驗寫個分享,此處的伺服器都是基於linux平臺。 cpu的佔有執行緒型別總的來說分為兩種: us :使用者空間佔用CPU百分比 sy :核心空間佔用CPU百分比 一般來講CPU us高的解決方法: CPU us

假設生產環境出現CPU佔用,請談談你的分析思路和定位

0、top 1、檢視佔用cpu大的程序 jps -l 或者 ps -ef|grep java|grep -v grep&n

效能優化-CPU佔用問題排查

1. 效能優化是什麼? 1.1 效能優化就是發揮機器本來的效能 1.2 效能瓶頸在哪裡,木桶效應。   CPU佔用過高 1、現象重現 CPU佔用過高一般情況是程式碼中出現了迴圈呼叫,最容易出現的情況有幾種: a)遞迴呼叫,退出機制設計的不夠

MYSQL "ORDER BY rand()"的坑--容易導致機器負載、CPU佔用

在一次微信砍價活動營銷中,使用了4核16G10M頻寬的伺服器支撐業務,本來這個配置跑個PHP+MYSQL+nginx肯定輕輕鬆的事情,可是隨著活動的高潮,併發數一高,機器負載核CPU一下子就達到100% 始終找不到原因,只知道是mysql分配的記憶體不夠,一直給它加,但是重啟m

cpu佔用排查

top命令是Linux下常用的效能分析工具,能夠實時顯示系統中各個程序的資源佔用狀況,類似於Windows的工作管理員 內容解釋: PID:程序的ID USER:程序所有者 PR:程序的優先級別,越小越優先被執行 NInice:值 VIRT:程序佔用的虛擬記憶體 RES:程序佔用的實體記憶體 SHR:程

Win10 服務主機:本地系統 CPU佔用

這種情況,一般開機後,本地系統的CPU佔用就一直維持在30%左右,風扇一直轉很耗電。 可能是windows版本的問題,我在不同的機子上裝了四五個系統,都出現了這種情況。 解決方法如下: 1. 找到工作管理員中的“ 服務主機:本地系統”->“Windows Upda

MySQL案例:一次單核CPU佔用問題的處理

客戶現場反饋,top的檢查結果中,一個CPU的佔用一直是100%。實際上現場有4個CPU,而且這個伺服器是mysql專屬伺服器。 我的第一反應是io_thread一類的引數設定有問題,檢查以後發現read和write的thread設定都是4,這和CPU數一致,因此可以斷定這並不是單顆CPU佔用過高的問題。

vsCode剛開啟卡頓cpu佔用的原因

原因是:vscode剛開啟時預設搜尋路徑時陷入了死迴圈(也不能說死迴圈吧,就是大量搜尋導致的) 解決辦法:檔案->首選項->設定,然後搜尋“search.followSymlinks”改為false("search.followSymlinks": false,

C# WinForm CPU佔用

原因:程式中因為使用ThreadPool 多執行緒操作.Form.Invoke 用了很多,造成CPU佔用 90%以上,甚至程式假死..... 我一度去掉所有lock資料庫操作什麼的程式碼,都沒大的改善..... 解決方法: 每次呼叫完後. 讓她睡個300毫秒(System.Threading.Thre

解決win10系統CPU佔用【親測非常有效】

win10 系統的到來,讓使用者體驗到了更好的視覺效果和完善的服務,但是魚和熊掌不可兼得,這些良好的優點同時也帶給電腦更多的負荷,CPU各種100%燙的要命,風扇呼呼的吹。所以我們不得不對win10進行一丟丟的改造。 以下內容是我在網上尋找的資料,我稍作了整理