一次cpu占用高的定位分析

2021-09-02 20:07:46 字數 860 閱讀 7028

客戶機器cpu占用較高甚至出現cpu打滿的情況,造流程啟動執行緩慢,狀態更新卡死,嚴重影響使用者體驗。

首先觀察使用者機器資源情況,記憶體剩餘40g,jvm記憶體占用10%不到。

jps -ml

拿到pid之後

jstat -gccause pid

發現頻繁fgc,差不多一分種就有一次顯示的system.gc()呼叫。懷疑是這個原因,使用-xx:+disableexplicitgc引數禁用顯示記憶體**呼叫後,發現cpu高的情況並沒有改善。而且發現經常在jvm記憶體占用只有10%的時候就記憶體分配失敗而且fgc了,說明可能有短時內加裝大量大物件的可能。

繼續分析發現每次fgc只耗時0.2秒,而cpu是一直占用較高,這同樣說明cpu高並不是fgc導致的,但是沒有頭緒。既然不是jvm的fgc導致的,應該就是程式頻繁載入大量資料了,慢慢定位。先用

top -h -p pid

觀察占用cpu高的執行緒

這些執行緒在幹嘛?使用jstack命令把呼叫堆疊寫入檔案分析

jstack -l pid > a.txt

然後把執行緒pid轉換為16進製制後去堆疊檔案裡查詢,28117的16進製制是6dd5, 26789的16進製制是68ae。預設字母小寫。

發現幾個占用cpu高(100%)的執行緒都在執行乙個載入操作,把資料庫1萬多和10萬多條資料的的兩個表載入到記憶體之中。

光資料庫查詢就要4s左右,然後還要都加入記憶體。怪不得cpu高,卡,fgc了。原因算是找到了。

一次伺服器CPU佔用率高的定位分析

ps h e o pid,tid,pcpu,cmd sort pcpu grep freeswitch背景 通過效能監控發現上線伺服器cpu某核佔用率已經達到了100 而且是由我們的某個核心服務導致的。幸虧由於我們的服務程序由多個相同worker 執行緒 排程承擔的,所以除了cpu佔用率高之外,並沒...

一次伺服器CPU佔用率高的定位分析

背景 通過效能監控發現上線伺服器cpu某核佔用率已經達到了100 而且是由我們的某個核心服務導致的。幸虧由於我們的服務程序由多個相同worker 執行緒 排程承擔的,所以除了cpu佔用率高之外,並沒有對服務造成影響。隨著上次我們找到那個吃io的罪犯,這次我們要追捕的是潛伏在團體中的特務,更加驚險刺激...

java在linux下占用高cpu的一次錯誤排查

在前兩天突然間接到反饋說伺服器很卡解決後來做乙個記錄.以下為檢查stack與heap的部分截圖 雖然說老年代已經77 但是看起來還是正常的,並沒有到要爆掉的情況 但是觀察了幾分鐘後cpu一直持續占用不下 網上查了一些api後偶然間看到 top h p 可以檢視某程序下的所有執行緒 執行後可以看到,其...