查看CPU使用
在 Linux 系統(tǒng)下,使用 top 命令查看 CPU 使用情況。
%Cpu(s): 0.3 us, 0.1 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
us(user):表示 CPU 在用戶運(yùn)行的時(shí)間百分比,通常用戶 CPU 高表示有應(yīng)用程序比較繁忙。典型的用戶程序有:數(shù)據(jù)庫(kù)、Web 服務(wù)器等。
sy(sys):表示 CPU 在內(nèi)核態(tài)運(yùn)行的時(shí)間百分比(不包括中斷),通常內(nèi)核態(tài) CPU 越低越好,否則表示系統(tǒng)存在某些瓶頸。
ni(nice):表示用 nice 修正進(jìn)程優(yōu)先級(jí)的用戶進(jìn)程執(zhí)行的 CPU 時(shí)間。nice 是一個(gè)進(jìn)程優(yōu)先級(jí)的修正值,如果進(jìn)程通過(guò)它修改了優(yōu)先級(jí),則會(huì)單獨(dú)統(tǒng)計(jì) CPU 開(kāi)銷。
id(idle):表示 CPU 處于空閑態(tài)的時(shí)間占比,此時(shí),CPU 會(huì)執(zhí)行一個(gè)特定的虛擬進(jìn)程,名為 System Idle Process。
wa(iowait):表示 CPU 在等待 I/O 操作完成所花費(fèi)的時(shí)間,通常該指標(biāo)越低越好,否則表示 I/O 存在瓶頸,可以用 iostat 等命令做進(jìn)一步分析。
hi(hardirq):表示 CPU 處理硬中斷所花費(fèi)的時(shí)間。硬中斷是由外設(shè)硬件(如鍵盤控制器、硬件傳感器等)發(fā)出的,需要有中斷控制器參與,特點(diǎn)是快速執(zhí)行。
si(softirq):表示 CPU 處理軟中斷所花費(fèi)的時(shí)間。軟中斷是由軟件程序(如網(wǎng)絡(luò)收發(fā)、定時(shí)調(diào)度等)發(fā)出的中斷信號(hào),特點(diǎn)是延遲執(zhí)行。
st(steal):表示 CPU 被其他虛擬機(jī)占用的時(shí)間,僅出現(xiàn)在多虛擬機(jī)場(chǎng)景。如果該指標(biāo)過(guò)高,可以檢查下宿主機(jī)或其他虛擬機(jī)是否異常。
排查用戶 CPU 使用率高
用戶 CPU 使用率反映了應(yīng)用程序的繁忙程度,通常與我們自己寫的代碼息息相關(guān)。
操作步驟:
1)、通過(guò) top 命令找到 CPU 消耗最多的進(jìn)程號(hào);
2)、通過(guò) top -Hp 進(jìn)程號(hào)命令找到 CPU 消耗最多的線程號(hào)(列名仍然為 PID);
3)、通過(guò)printf “%xn” 線程號(hào)命令輸出該線程號(hào)對(duì)應(yīng)的 16 進(jìn)制數(shù)字;
4)、PID進(jìn)程在內(nèi)核調(diào)用情況。如果是Java應(yīng)用可通過(guò) jstack 進(jìn)程號(hào) | grep 16進(jìn)制線程號(hào) -A 10 命令找到 CPU 消耗最多的線程方法堆棧。
是非 Java 應(yīng)用可使用 perf
perf top -p 7574
如果提示perf: command not found,使用yum install perf安裝。
perf是Linux 2.6+內(nèi)核中的一個(gè)工具,在內(nèi)核源碼包中的位置 tools/perf。
perf利用Linux的trace特性,可以用于實(shí)時(shí)跟蹤,統(tǒng)計(jì)event計(jì)數(shù)(perf stat);或者使用采樣(perf record),報(bào)告(perf report|script|annotate)的使用方式進(jìn)行診斷。