鍍金池/ 問答/Linux/ linux cpu高負載,top中沒有高占用cpu的進程。

linux cpu高負載,top中沒有高占用cpu的進程。

cpu為16核的,load average負載穩(wěn)定在12左右.
用top查看沒有任何高占用cpu的進程存在。
請問如何查找問題所在?
截圖為連續(xù)的3個截圖 可以看到最占用cpu的就是php-fpm和nginx 這兩個,但作為web服務器 占用1%并不算高。top中也使用了P來排序,始終找不到對應的進程。也重啟過,沒有解決問題,top截圖是在root用下操作的。是否存在進程隱藏,服務器被黑的可能呢?圖片描述
圖片描述

感謝您的回答:
系統(tǒng)信息:Linux web02 2.6.18-407.el5xen #1 SMP Wed Nov 11 08:54:02 EST 2015 x86_64 x86_64 x86_64 GNU/Linux,目前我正在想辦法安裝perf,我這邊yum壞掉了,我正在想辦法。
先貼上vmstat的信息吧??雌饋韎o是不高的。圖片描述

貼上iotop和iostat的信息 感覺io的影響不大,我這是centos5.6所以perf找不到合適的版本來用了。目前看還是cpu莫名的高 16核 75%us還是太高了圖片描述圖片描述

對的,作為web服務器我把web服務關掉了,負載也沒有變化始終這么高,系統(tǒng)確實比較老,5.5的centos mirror都不支持了,主要是手頭上還有幾個和這個系統(tǒng)一樣的,分別的別的web服務器,數(shù)據(jù)庫服務器,4-5臺吧。。 系統(tǒng),配置都差不多,唯獨這臺cpu始終占用高。。top中看不到進程,實在不知道從哪下手查找問題。 從網(wǎng)絡流量看? 從防火墻?還是別的方面。

回答
編輯回答
乞許

load average還包含了不可中斷睡眠的進程,用iostat看看是不是在執(zhí)行磁盤IO。

2017年2月5日 19:15
編輯回答
赱丅呿

ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
我搜到了這樣一個命令,然后在結果中看到了看了占用cpu的進程,是系統(tǒng)的占用,
root 30849 1 30858 03:16:37 99.7 [kacpi_notify]
root 30849 1 30859 03:16:35 99.7 [kacpi_notify]
root 30849 1 30860 03:16:36 99.7 [kacpi_notify]
root 30849 1 30861 03:16:37 99.7 [kacpi_notify]
root 30849 1 30863 03:16:37 99.7 [kacpi_notify]
root 30849 1 30864 03:16:38 99.7 [kacpi_notify]
root 30849 1 30865 03:16:36 99.7 [kacpi_notify]
root 30849 1 30866 03:16:38 99.7 [kacpi_notify]
在iotop中是可以看到這個進程的,但是io中沒有cpu占用,top中看不到 [kacpi_notify] acpi進程的通知進程 acpi是電源的接口,應該是機器太老的原因 ,用了十幾年的機器了。

2018年6月16日 06:34
編輯回答
薄荷糖

主要是user用戶態(tài)占用,可以用perf top看一下熱點函數(shù),根據(jù)熱點函數(shù)可以進一步推斷可能屬于哪個進程或程序。
perf工具當前主流的發(fā)行版都會有,但如果版本較老可能就沒有了。題主最好貼一下系統(tǒng)的版本信息。
類似下面這種:

hidtak@hidtak:~$ uname -a
Linux hidtak 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Intel的VTune是另外一種方法(試用版即可),老版本也可以用。


2018.5.31更新:
題主的內(nèi)核版本太老了,perf至少3.0內(nèi)核以上才支持。

這種問題分析起來比較麻煩,因為可能是底層的代碼BUG或機制缺陷;低版本內(nèi)核缺乏一些分析工具和手段,就更麻煩了。

我覺得只能采用比較笨的排除法了,因為題主提到過重啟后也會復現(xiàn)。(是立即復現(xiàn)?還是做了什么操作后?還是有了業(yè)務請求后?)。
那么系統(tǒng)啟動過程中會拉起一系列的服務和應用。一個個關閉排除就好了。


另外從原理上講2.6內(nèi)核版本統(tǒng)計CPU(核)占用率就是讀取/proc/stat文件,統(tǒng)計進程的占用率是讀取/proc/<pid>/stat文件。

那么我能想到的可能有幾種情況:

1)TOP的BUG,沒顯示全?或者排序方式不對?默認是按照CPU排序?。?br>這個容易確認,只需要看/proc下所有pid是否都在TOP中顯示了。注意TOP是分頁的;可以用top批處理選項,輸出到一個文件中。

2)內(nèi)核或底層代碼BUG。
可以通過Google相關案例看看,說不定可以找到類似BUG案例。

3)內(nèi)核被黑客攻擊了,并且注入了惡意代碼,導致/proc/內(nèi)沒有對應PID的節(jié)點生成,TOP讀取不到進程信息。
黑客一般不會單單占用一下CPU,通常會向外發(fā)送信息,否則對他也沒啥實際意義,所以可以通過監(jiān)控一下網(wǎng)絡活動看看是否有些痕跡,例如可以通過抓包看看是否有異常的網(wǎng)絡地址,異常的數(shù)據(jù)收發(fā)行為。
當然也有可能就是一個單純消耗CPU的病毒。
無論是病毒或木馬,重啟之后也存在,說明它在磁盤上有執(zhí)行文件,并且設置了自動啟動,在啟動配置里面肯定有體現(xiàn),可以通過排除法也可以找到它。

以上供參考。

2017年10月6日 22:35