CPU飆高原因及解決方案

2021-10-04 22:59:44 字數 833 閱讀 4659

一、cpu飆高原因:

1.大量中斷

中斷分為軟中斷(軟中斷是一種需要核心為正在執行的進行去做一些事情的請求)和硬中斷(外部引起的)

2.系統負載高

負載高表示有很多程式等待排程執行,它會導致上下文切換頻繁

3.上下文切換頻繁

二、排查 

1.top命令檢視占用cpu的pid

2.top -h -p pid  查詢pid下面的執行緒id,顯示執行緒的cpu的占用時間,占用比例,發現有很多個執行緒都會cpu占用很高,只能每              個排查

3.jstack檢視執行緒資訊,命令: jstack pid >> aaaa.txt 輸出到文字中再搜尋,也可以直接管道搜尋 jstack pid | grep "執行緒id" 這個執行緒id是16進製表示,需要轉一下,可以用這個命令轉 printf "%x\n" tid 也可以自己計算器轉一下。

三、經常出現cpu飆高場景

1.大量併發的i/o操作    

一般 i/o 操作不會消耗太多的 cpu ,因為主要的時間消耗會在 i/o 操作的裝置上。比如從磁碟讀檔案時,主要的時間在              磁 盤內部的操作上,而消耗的 cpu 時間只佔 i/o 操作響應時間的一少部分。但在大量的併發的 i/o 時才可能會使得 sys            cpu 有所增加

2.多執行緒搶占系統資源

對於多個執行緒搶占某乙個系統呼叫的資源,會導致大量的執行緒等待->喚醒->搶占,未搶到->等待...。導致不斷的切換執行緒                 耗 費cpu。

3.頻繁gc

四、解決

不同情況引起的cpu飆高要需要不同的方式進行解決,需定位什麼原因造成的。

CPU 資源消耗原因和解決方案

1 物件建立 物件的建立會分配記憶體 調整屬性 甚至還有讀取檔案等操作,比較消耗 cpu 資源。盡量用輕量的物件代替重量的物件,可以對效能有所優化。比如 calayer 比 uiview 要輕量許多,那麼不需要響應觸控事件的控制項,用 calayer 顯示會更加合適。如果物件不涉及 ui 操作,則盡...

伺服器cpu飆高 挖礦木馬解決方案記錄

起因 前幾天,開發伺服器的jenkins服務一直會出現偶然性的失敗,編譯 的執行緒經常性被kill掉,需要啟動好幾次才有機會成功。給開發帶來諸多不便。受不了啦,於是在乙個午飯時間,決定要徹底搞清楚這個問題。解決問題 首先使用top命令,檢視cpu占用。不看不知道啊,看了嚇一跳!cpu占用一直在98 ...

記憶體溢位原因及解決方案

記憶體溢位是指應用系統中存在無法 的記憶體或使用的記憶體過多,最終使得程式執行要用到的記憶體大於虛擬機器能提供的最大記憶體。引起記憶體溢位的原因有很多種,常見的有以下幾種 1.記憶體中載入的資料量過於龐大,如一次從資料庫取出過多資料 2.集合類中有對物件的引用,使用完後未清空,使得jvm不能 3.中...