鍍金池/ 問答/Linux/ linux cpu高負(fù)載,top中沒有高占用cpu的進(jìn)程。

linux cpu高負(fù)載,top中沒有高占用cpu的進(jìn)程。

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

感謝您的回答:
系統(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還是太高了圖片描述圖片描述

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

回答
編輯回答
乞許

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

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

ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
我搜到了這樣一個(gè)命令,然后在結(jié)果中看到了看了占用cpu的進(jìn)程,是系統(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中是可以看到這個(gè)進(jìn)程的,但是io中沒有cpu占用,top中看不到 [kacpi_notify] acpi進(jìn)程的通知進(jìn)程 acpi是電源的接口,應(yīng)該是機(jī)器太老的原因 ,用了十幾年的機(jī)器了。

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

主要是user用戶態(tài)占用,可以用perf top看一下熱點(diǎn)函數(shù),根據(jù)熱點(diǎn)函數(shù)可以進(jìn)一步推斷可能屬于哪個(gè)進(jìn)程或程序。
perf工具當(dāng)前主流的發(fā)行版都會(huì)有,但如果版本較老可能就沒有了。題主最好貼一下系統(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)核以上才支持。

這種問題分析起來比較麻煩,因?yàn)榭赡苁堑讓拥拇aBUG或機(jī)制缺陷;低版本內(nèi)核缺乏一些分析工具和手段,就更麻煩了。

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


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

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

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

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

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

以上供參考。

2017年10月6日 22:35