當前位置:
首頁 > 最新 > CPU高負載排查小技巧,細心的優化可能為公司節省一個億!

CPU高負載排查小技巧,細心的優化可能為公司節省一個億!

女主宣言

服務優化是一個細心、漫長的過程,一個很小的優化不僅可以為用戶帶來更穩定更快速的互聯網體驗,也許還會為公司降低百萬以上的成本。熟練掌握服務端排錯技巧,已經是「匠心工程師」的標配技能。這篇CPU排錯小技巧,希望能夠幫助到大家。

PS:豐富的一線技術、多元化的表現形式,盡在「HULK一線技術雜談」,點關注哦!

前言

為了能夠支撐大並發並且合理的利用機器資源,一台伺服器部署了n個tomocat的java微服務、或者是同時開啟了多個埠的fastcgi,這些其實都是很正常的操作。但是往往會出現某一個實例的某個方法的執行,導致cpu負載非常高從而引發報警。當然,很多同學的第一想法就是「擴容」,於是便找到OPS的兄弟「給我擴xx台機器」,浪費了資源先不說,但是這樣往往解決不了實質性的問題,畢竟不是可以無限擴容機器的。那麼我們怎麼排查此類問題做好優化工作呢?今天就給大家舉例說明,希望同學們get這個小技能後多多使用,不斷磨練自己的程序,說不定你的耐心優化,就會為公司節省1個億的小目標!

步驟

步驟一:找到最耗CPU的進程

工具:top

方法

執行top -c ,顯示進程運行信息列表;

鍵入P (大寫p),進程按照CPU使用率排序;

如上圖,最耗CPU的進程PID為18154

步驟二:找到最耗CPU的線程

工具:top

方法:

top -Hp 18154 ,顯示一個進程的線程運行信息列表

鍵入P (大寫p),線程按照CPU使用率排序

如上圖,進程18154內,最耗CPU的線程PID為15259

步驟三將線程PID轉化為16進位

工具:printf

方法

如上圖,15259對應的16進位是0x3b9b,當然,這一步可以用計算器

之所以要轉化為16進位,是因為堆棧里,線程id都是用16進位表示的。

步驟四查看堆棧,找到線程在幹嘛

工具:pstack/jstack/grep

方法:jstack -F 15259 | grep 『0x3b9b』

列印進程堆棧

通過線程id,過濾得到線程堆棧

如上圖,找到了耗CPU高的線程對應的線程名稱「main」方法,以及看到了該線程正在執行代碼的堆棧。

步驟五列印的結果看起來不是很明顯,那我們就直接jstack寫到文件

工具:jstack

方法:jstack -l 15259 > 15259.stack

列印進程堆棧

通過線程id找到15259.stack,然後通過0x3b9b搜索

總結

服務優化是一個細心、漫長的過程,一個很小的優化不僅可以為用戶帶來更穩定更快速的互聯網體驗,也許還會為公司降低百萬以上的成本。熟練掌握服務端排錯技巧,已經是「匠心工程師」的標配技能。這篇CPU排錯小技巧,希望能夠幫助到大家,多用多用,體會一下系統調優的樂趣。最後附上一張圖,每個系統排錯、優化的命令等待著你去發掘。

HULK一線技術雜談

由360雲平台團隊打造的技術分享公眾號,內容涉及雲計算、資料庫、大數據、監控、泛前端、自動化測試等眾多技術領域,通過夯實的技術積累和豐富的一線實戰經驗,為你帶來最有料的技術分享


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 HULK一線技術雜談 的精彩文章:

TAG:HULK一線技術雜談 |