日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦

排查步驟
1 先查看有無錯誤日志(回滾)、上下游調(diào)用是否正常(通知、降級、熔斷)
2 若是單臺飆升則重啟機器或置換
3 若全部都飆升則說明程序里有線程一直長時間占用CPU則先摘流一臺保留現(xiàn)場用來后續(xù)分析問題,其它重啟快速恢復服務
4 top 查看機器進程占用 CPU 最高進程號 (此時可以通過 jinfo pid 了解服務信息), top -Hp pid 找到 CPU 占比最大的線程
5 將線程號轉(zhuǎn)換為十六進制 $printf “%x\n” 4858 12fa (線程棧里是十六進制)
6 jstack pid | grep -A 10 [線程 16 進制] 明確 CPU 負載如此高的線程到底在干什么 比如是 GC 線程(GC 異常頻繁)
7 找尋為何 GC 如此頻繁原因:jstat -gc、gcutil、class 查看堆空間、大對象情況
8 jmap -dump 生成快照文件分析(zip 壓縮、摘除流量再執(zhí)行)
9 發(fā)現(xiàn) JceSecurity 對象占據(jù)了 90%的堆空間
10 通過可視化工具繼續(xù)查看此對象各屬性,發(fā)現(xiàn)其中有個 Map 屬性 Map<Provider, Object> verificationResults 量級巨多
11 verificationResults 的 v 類型是 BouncyCastleProvider 從代碼里找這個類的應用處
12 發(fā)現(xiàn)是在一個方法里每次調(diào)用都會生成一個對象塞入 Map,將這個對象變成 static,每次調(diào)用不要創(chuàng)建對象而是復用這個類對象
以上是很常見的 CPU 飆高的場景,表面是 CPU 不足,其實是因為 FullGC 長期運行大量占用 CPU 的結(jié)果
歷史經(jīng)驗
1 YongGC 線程導致
業(yè)務代碼導致的內(nèi)存泄露 or 溢出修復
創(chuàng)建大量對象但一直被引用(數(shù)據(jù)庫獲取大量數(shù)據(jù)追加到 List、方法調(diào)用每次都 new 對象放入對象級別 Map 屬性)
【cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦】 創(chuàng)建大對象(超大 String 對象,邏輯內(nèi)不斷改寫 直接放入老年代)
資源用完未主動回收(Socket、Stream)

cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦



cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦



cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦


每次運行加解密都會 new 一個 BouncyCastleProvider 對象,放倒 Cipher.getInstance()方法中

cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦



cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦


每次運行到加解密都會向這個 map put 一個對象,而這個 map 屬于類的維度,所以不會被 GC 回收 。這就導致了大量的 new 的對象不被回收
2 業(yè)務線程導致
業(yè)務代碼有死鎖或死循環(huán)導致 CPU 長期占用(除非時間片到了否則不會主動讓出 CPU)

cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦



cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦


另外如果程序中有序列化反序列化、正則表達式匹配邏輯,也有因數(shù)據(jù)處理耗時過大導致 CPU 飆高的風險

cpu過高怎么處理的步驟 電腦cpu內(nèi)存占用過高怎么辦


    推薦閱讀