一次伺服器CPU佔用率高的定位分析

來源:互聯網
上載者:User

標籤:

背景
通過效能監控發現上線伺服器cpu某核佔用率已經達到了100%,而且是由我們的某個核心服務導致的。幸虧由於我們的服務進程由多個相同worker(線程)調度承擔的,所以除了CPU佔用率高之外,並沒有對服務造成影響。隨著上次我們找到那個吃IO的罪犯,這次我們要追捕的是潛伏在團體中的特務,更加驚險刺激喲!

系統內容

top命令很容易定位到是誰佔用CPU最高。

以我們的這個業務進程(imDevServer)舉例,為什麼說這貨是個潛伏者呢?因為這是個多線程的進程,我們要知道實際上佔用cpu的最小單位是線程,所以肯定是眾線程中的某一個或幾個佔用CPU過高導致的。top -H -p pid命令查看進程內各個線程佔用的CPU百分比。

如所示我們可以看出id為8863的線程cpu佔用率最高。好,我們現在只要能找到他偷走的cpu就好了,雖然這小子嘴巴嚴,但是我們有一套完善的審問流程,不怕他不招。首先出馬的是strace -T -r -c -p pid命令

它的作用是查看系統調用和花費的時間,epoll_wait雖然佔用的調用時間多,但是他本身是個正常的阻塞調用。我們接著讓pstack pid出馬

可以看到每個線程的呼叫堆疊,找到已經找出的佔用CPU最高的那個線程,然後看他的呼叫堆疊,很容易看出在哪一步邏輯上導致了busy loop,再使用trace -p tid看看線程的調用過程接著定位到代碼,修複bug,找回被偷走的cpu。

一次伺服器CPU佔用率高的定位分析

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.