1. 程式人生 > >如何定位cpu佔用率高的java執行緒

如何定位cpu佔用率高的java執行緒

  • 檢視cup的使用情況,在Linux下可以使用 top 或者 htop命令
top -u ${使用者} -c 
top -u devops -c 
  • 在命令列提示符執行top命令,輸入大寫P,則結果按CPU佔用降序排序。輸入大寫M,結果按記憶體佔用降序排序。大寫T按執行時間排序。(注:大寫P可以在capslock狀態輸入p,或者按Shift+p)。
  • 具體的可以參考:
http://www.169it.com/it-linux/article-linux%E4%B8%8Btop%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3-virt-res-shr-%E6%8E
%92%E5%BA%8F-6549555377111610135

這裡寫圖片描述

  • 檢視jvm的程序ID,可以通過jps或者ps
jps -lvm
ps -ef | grep Test

這裡寫圖片描述

  • 找出該程序內最耗費CPU的執行緒
top -Hp 2444
  • 也可以根據大寫P來調整排序

這裡寫圖片描述

  • 將執行緒ID轉化為16進位制
printf "%x\n"  執行緒ID
eg. printf "%x\n" 2459

這裡寫圖片描述

  • 通過jstack輸出程序(2444)的堆疊資訊,然後根據16進位制的執行緒ID過濾結果
jstack 2444 | grep 99b
  • 也可以先將堆疊資訊輸出通過grep命令過濾定位
jstack 2444 >stack.txt
  • 這樣就定位到了具體引起cup高的程式碼位置了(下圖:Test.java類的第7行)

這裡寫圖片描述

  • 命令參考
grep "99b" stack.txt -A 25
grep -C 5 foo file 顯示file檔案裡匹配foo字串那行以及上下5行
grep -B 5 foo file 顯示foo及前5行
grep -A 5 foo file 顯示foo及後5

這裡寫圖片描述

  • 對執行緒狀態進行分析。執行緒狀態如下所示:
1)  死鎖,Deadlock(重點關注)
2)  執行中,Runnable  
3)  等待資源,Waiting on
condition(重點關注,等待什麼資源)
4) 等待獲取監視器,Waiting on monitor entry(重點關注) 5) 暫停,Suspended 6) 物件等待中,Object.wait() 或 TIMED_WAITING 7) 阻塞,Blocked(重點關注) 8) 停止,Parked

這裡寫圖片描述

相關推薦

如何定位cpu用率java執行

檢視cup的使用情況,在Linux下可以使用 top 或者 htop命令 top -u ${使用者} -c top -u devops -c 在命令列提示符執行top命令,輸入大寫P,

如何定位cpu用率java線程

java如何定位cpu占用率高的java線程工具:1jstack:jstack用於打印出給定的java進程ID或core file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64",Windows的jstack使用方式只支持以下的這種方式。pidstat :pidstat主要

【轉】Linux下java程序CPU用率分析方法

文章轉載的地址: https://blog.linuxeye.cn/343.html   在工作當中,肯定會遇到由程式碼所導致的高CPU耗用以及記憶體溢位的情況。這種情況發生時,我們怎麼去找出原因並解決。 一般解決方法是通過top命令找出消耗資源高的執行緒id,利用strace命令檢視該執行緒

Mac UserEventAgent 程序CPU用率的解決辦法

有兩個辦法: 1.刪除這個檔案 /System/Library/UserEventPlugins/AppleHIDMouseAgent.plugin/Contents/MacOS/AppleH ID

java獲取JVM的CPU用率、記憶體用率執行數及伺服器的網口吞吐率、磁碟讀寫速率

怎麼說呢,本人菜鳥一枚,費了幾天時間,終於做了一個用java獲取JVM的CPU佔用率、記憶體佔用率、執行緒數及伺服器的網口吞吐率、磁碟讀寫速率的實現。 其中windows環境下獲取jvm 的cpu佔用率這裡是參考網上別人的東西(在此感謝提供參考的網友),其他的都是基於自己的想法做出來的。該工具類

linux問題排查 - cpu用率的程序和執行

1.簡介           一個程式,完成它預設的功能,並不能說明它是一個優良的程式。好的程式,應該是對資源的合理利用,亦或是 用更少的資源(使用合理的演算法),實現更多有效的產出。 &

Linux 定位程序中CPU佔用執行

一、Top+pstack+gdb的組合拳 閒言少述,先直接上操作例項,再做原理講解。 1.1 用top命令找到最佔CPU的程序 top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 22688 root 20 0 1842

線上Java程式導致伺服器CPU用率的問題排除過程

1、故障現象 客服同事反饋平臺系統執行緩慢,網頁卡頓嚴重,多次重啟系統後問題依然存在,使用top命令檢視伺服器情況,發現CPU佔用率過高。 2、CPU佔用過高問題定位 2.1、定位問題程序 使用top命令檢視資源佔用情況,發現pid為14063的程序佔用了大量的CPU

window 查詢 java 程序中佔用cpu比較執行

概述 公司內部的一個產品 (java 開發的) 執行在 window 虛擬機器上,執行一段時間後CPU飆升,然後想檢視是哪個執行緒佔用。 折騰了一下午,終於定位到該執行緒。 下面我們通過兩種方式定位到佔用cpu比較高的執行緒。 * 1. 使用Proces

Java程式導致伺服器CPU用率的問題

1、故障現象 客服同事反饋平臺系統執行緩慢,網頁卡頓嚴重,多次重啟系統後問題依然存在,使用

Java獲取CPU用率

原文連結:https://www.jianshu.com/p/015cc4805e29 最近做一個Java效能統計的問題,需要統計當前程序佔用CPU的情況,最開始使用Java MxBean來獲取 OperatingSystemMXBean osMxBean = ManagementFactory

Sublime Text 3 CPU用率 && WebStorm記憶體佔用過

  用Sublime Text 3或WebStorm進行前端開發時,遇到了同樣的問題:當專案檔案比較多或檔案比較大時,CPU佔用率或記憶體佔用持續比較高,後來經查閱發現是index files導致的,可以理解為:Sublime Text 3或WebStorm需要不斷重新整理檔案索引,不斷將專案檔案從硬碟中讀到

併發程式設計系列:4種常用Java執行鎖的特點,效能比較、使用場景

高併發程式設計系列:4種常用Java執行緒鎖的特點,效能比較、使用場景 http://youzhixueyuan.com/4-kinds-of-java-thread-locks.html   在Java併發程式設計中,經常遇到多個執行緒訪問同一個 共享資源 ,這時候作為開發者

記一次CPU用率和load的排查

  前不久公司進行了一次大促,晚上值班。大促是從晚上8點多開始的,一開始流量慢慢的進來,觀察了應用的各項指標,一切都是正常的,因為這是雙11過後的第一次大促,想著使用者的購買慾應該不會太強,所以我們的運維同事9點多就回家了在家裡面遠端支援,留下交易組和其它後端的技術值班,樓主就是交易組的。誰知10點整的時候我

intellij idea cpu用率太大太滿 執行速度太慢 使了五個解決方法最終成功

突然發現,intellij idea 特別卡,在程式碼間移動的時候,居然重新整理都跟不上,然後開啟工作管理員一看,CPU佔用率100%。。。intellij idea自己一個程式的佔用率就高達80~90,這還只是單純的開啟,沒有做其他任何操作。然後,就是解決唄。 方法一:升級idea。 去官

Java 獲取 CPU 用率

轉自:https://www.jianshu.com/p/015cc4805e29 最近做一個Java效能統計的問題,需要統計當前程序佔用CPU的情況,最開始使用Java MxBean來獲取: OperatingSystemMXBean osMxBean = ManagementFactor

java執行併發程式設計

權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/LiuRenyou/article/details/72805889 java執行緒詳解及高併發程式設計庖丁解牛 執行緒概述: 祖宗: 說起java高併發程式設計

Java問題定位Java執行堆疊分析

"main" prio=1 tid=0x0805c988 nid=0xd28 runnable [0xfff65000..0xfff659c8] at java.lang.String.indexOf(String.java:1352) at java.io.PrintStream.write

java執行併發執行安全問題

在搶購之類的業務處理時,會出現超發之類的執行緒安全問題。我個人想到的解決方法如下:採用資料庫鎖,悲觀鎖有效率低下問題,所以我推薦樂觀鎖,雖然會增大CPU開銷,很多服務和軟體都支援樂觀鎖,如Redis的w

程式碼執行CPU用率100%的解決方法

原因:        建立連線後啟動新的執行緒,如果執行緒中有簡單粗暴的不含阻塞的while(1)迴圈,會持續佔用CPU,導致CPU佔用率極高。 解決: 在while(1)的大迴圈中插入一句sleep