伺服器CPU居高不下 解決問題歷程

2022-07-04 14:12:10 字數 885 閱讀 5076

在乙個伺服器的集群上面,伺服器的cpu長時間居高不下,響應的時間也一直很慢,即使擴容了伺服器cpu的下降效果也不是很明顯。

對於cpu過高的原因,可以總結到以下原因:

對於上面的情況,難點不是優化**,難點在於定位到問題的所在,下面我們就用dump抓包的方式來定位到問題的所在。介紹這個內容之前,我們要先回顧下.net中垃圾**的基礎知識和乙個工具的準備。

垃圾**觸發條件

大物件垃圾**

clr將物件分為大物件和小物件,認為大於85000位元組或者更大的位元組是大物件,clr用不同的方式來對待大物件和小物件:

相關dll準備clr.dll和sos.dll,(都在對應.net版本安裝目錄下面,我的安裝目錄在c:\windows\microsoft.net\framework64\v4.0.30319)

乙個cpu執行的較高的時期的dump檔案(下面會說如何獲取)

準備測試**,此處為了演示方便,簡單了寫了乙個有潛在問題的**:

public  class common

return list;

}public static string getstring(list list)

',", l);

}if (str.length > 0)

return str;}}

我們知道在字串的拼接的時候,每乙個字串都是乙個物件,拼接後又產生了乙個新物件,所以在getstring這個方法中會有大量的gc操作,下面我們就呼叫下這個**,看下cpu的情況,為了模擬併發情況,我們開多個標籤,每個標籤每1s秒中重新整理一次。

在任務管理器中選擇應用程式池對應的w3wp.exe,右擊–>建立轉儲檔案。建立完成後,會提示出指定的路徑

根據上面的步驟,我們準備我們分析的檔案如下:

伺服器CPU飆公升問題解決過程

問題出現前的提要 1 專案需求 將大量資料通過kafka訊息佇列 到另外的專案中 2 專案打完版本後,3點開始cpu開始飆公升 報錯資訊 解決問題方式 1 重啟伺服器 關閉大量資料的 暫時解決問題。2 開始分析問題 1 檢查 檢視有沒有死鎖或者有沒有占用大量cpu的 檢查結果沒有發現 問題,排除問題...

SQL Server伺服器CPU爆高解決

昨天下午,測試反映trunk測試環境的資料庫cpu一直100 一開始以為是病毒,內網這段時間老是有個挖礦的病毒,查了一下被隔離了,但是資料庫還是慢,停掉sql server的服務cpu降下來,啟動ssql server的伺服器就cpu就到100 按照正常情況,sql server導致cpu爆高,一般...

解決Linux伺服器時差問題

先說時區的配置,主要是兩個檔案 etc localtime etc timezone timezone這個檔案是個文字,裡面只需要寫一行自己的時區就行,我們這裡就是上海 asia shanghai localtime這個檔案的型別不清楚,裡面就寫了些timezone data,它可以從系統自帶時區檔...