Arthas-CPU持續100%優化

 

背景

公司測試環境服務器中發現CPU持續在100%,導致程序不能正常響應。測試服務器硬件配置爲2核16G單機雲服務器。安裝了當前公司所有的產品和Mysql數據庫。

分析問題

使用Top命令查看

從上圖可以看出是由一個java應用和mysql服務佔用了幾乎大部分CPU資源。

通過監控一段時間的mysql,發現數據庫的查詢請求壓力非常大。

從上圖來看,數據庫的高峯請求在1200/S左右,5分鐘平均下來也在600/S。

基於現在的業務數據量來判斷不太合理。

然後打開Arthas的控制面板查看

從上圖來看佔用的CPU資源確實不少。

然後佔用CPU資源多的前幾個線程調用堆棧打印出來,對比代碼逐步分析。

定位問題

分析代碼後逐步判定是代碼邏輯不合理,大量採用了Scheduled啓動線程,並且並未合理的控制數據範圍,導致頻繁查詢數據,處理數據,造成Java程序和數據庫壓力都很大。

優化思路

1、按照線程佔用CPU情況排序後,逐個分析代碼;

2、優化代碼邏輯,減少查詢數據範圍,優化Sql語句,可以用緩存的使用Redis緩存;