記錄一個cpu彪高的BUG處理--jvm調優

simpleMo發表於2023-03-01

業務場景:遊戲行業,N個伺服器,要進行大批次的合服處理,玩家資料會上升,從新整理和伺服器的分配情況和邏輯處理,正常開發後,當天白天正常,然後晚上高峰期開始玩家頻繁反饋無法登入~~~

處理邏輯:

優先確認服務是否當機,如果是,就重啟,分析linux系統日誌,根據當機的原因進行處理即可;

再確認伺服器情況,cpu、記憶體、硬碟、網路等等;

記憶體使用情況還算正常,還有30-40的餘量空間,cpu很明顯的異常:

 

 

再查詢程式下執行緒的具體情況:

 

 

 

 再吧5675轉16進位制: 162b ,再查詢堆疊資訊

jstack 5656|grep -i -B 10 -A 50 162b

 

 

 可以確認,系統在瘋狂GC~~~再查詢gc的詳情

jstat -gcutil 5596 1000 5;
jstat -gc -h3 5596 250 10;

 

 

 

 到此,確認是gc導致的bug~~~

首先把堆疊匯出後,重啟,先恢復系統

jstack -l 5596 > jstack.data;
jmap -histo  5596 > jmap.data;

那麼如何解決呢?

1:最佳化程式碼

2:最佳化伺服器

1的話工作量比較大,而且開頭說道了記憶體其實是夠夠的~所以選2,jvm調優

根據jdk版本,選擇調整:1.7是PermSize,大於的是MetaspaceSize

-Xmx3072m -Xms2048m -XX:PermSize=256M -XX:MaxPermSize=512M 

-Xmx3072m -Xms2048m -XX:CompressedClassSpaceSize=256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m

後續觀察了幾天,cpu都正常。

相關文章