java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...
關于top命令 經常問load average 參考:load average 定義(網易面試)
問題現象:
1,top命令查詢服務器負載達到2.0-5之間,tomcat的cpu使用率達到104%
load average:
linux系統中的Load對當前CPU工作量的度量。簡單的說是進程隊列的長度。
Load Average 就是一段時間 (1 分鐘、5分鐘、15分鐘) 內平均 Load 。
問題分析過程:
1),磁盤使用率未超出正常范圍
df -l
2),內存使用率未超出正常范圍還有空閑
free
free -m?查看linux系統內存使用量和交換區使用量,如圖所示。
3),服務器流量未現明顯峰值
4)jvm內存狀態未現異常非GC原因
至于具體的jstat jmap jstack 的使用情況
綜合初步預估是tomcat有線程一直在運行占用cpu資源
問題引出:如何確定tomcat的100%的cpu使用率到底問題在哪?
問題定位方案:
使用java提供的是jstack線程分析命令對進程里面的線程狀態進行分析,先導出線程快照再分析具體是那個線程及對應的類
執行步驟:
第一步:ps -ef|grep tomcat 查詢出java/tomcat進程PID(eg:8209)
第二步:ps -aux 查詢出該進程是哪個用戶啟動的(即使ROOT用戶可能也導出線程快照失敗)
第三步:su ?tomcat 切換到進程啟動用戶
第四步:jstack -l 8209 > /usr/local/work/tomcat/8209.stack 導出PID對應的線程信息到文件
第五步:對導出的線程文件下載本地做分析(可以文本打開)
第六步:top -H -p 8209 命令查看對應進程是哪個線程占用CPU過高(eg:8308)
第七步:printf "%x\n" 8308 轉換十進制為十六進制 此處為:2074
第八步:在導出的堆棧文件中搜索線程ID等于nid=0x2074的線程,此處即列出了該線程對應的類
第九步:根據線程信息找到對應的類定位問題成功,找到原因:日志隊列線程一直處于RUNNABLE狀態,一直在while循環判定隊列是否為空
總結
以上是生活随笔為你收集整理的java cpu io高_服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下载带中文名的文件夹,如何在L
- 下一篇: c语言编写劫持dll,c语言-----劫