寵物展會(huì)2025年時(shí)間表
1739
2025-03-31
CPU 是影響 linux 性能的主要因素之一,本節(jié)將介紹幾個(gè)可以用來(lái)查看 CPU 性能的命令。
linux CPU 性能分析:vmstat 命令
vmstat 命令可以顯示關(guān)于系統(tǒng)各種資源之間相關(guān)性能的簡(jiǎn)要信息,在 《Linux vmstat 命令》一節(jié)中,我們已經(jīng)對(duì)此命令的基本格式和用法做了詳細(xì)的介紹,因此不再贅述,這里主要用它來(lái)看 CPU 的一個(gè)負(fù)載情況。
下面是 vmstat 命令在當(dāng)前測(cè)試系統(tǒng)中的輸出結(jié)果:
[root@localhost ~]# vmstat 2 3 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 8 247512 39660 394168 0 0 31 8 86 269 0 1 98 1 0 0 0 8 247480 39660 394172 0 0 0 0 96 147 4 0 96 0 0 0 0 8 247484 39660 394172 0 0 0 66 95 141 2 2 96 0 0
通過(guò)分析 vmstat 命令的執(zhí)行結(jié)果,可以獲得一些與當(dāng)前 Linux 運(yùn)行性能相關(guān)的信息。比如說(shuō):
r 列表示運(yùn)行和等待 CPU 時(shí)間片的進(jìn)程數(shù),如果這個(gè)值長(zhǎng)期大于系統(tǒng) CPU 的個(gè)數(shù),就說(shuō)明 CPU 不足,需要增加 CPU。
swpd 列表示切換到內(nèi)存交換區(qū)的內(nèi)存數(shù)量(以 kB 為單位)。如果 swpd 的值不為 0,或者比較大,而且 si、so 的值長(zhǎng)期為 0,那么這種情況下一般不用擔(dān)心,不用影響系統(tǒng)性能。
cache 列表示緩存的內(nèi)存數(shù)量,一般作為文件系統(tǒng)緩存,頻繁訪問(wèn)的文件都會(huì)被緩存。如果緩存值較大,就說(shuō)明緩存的文件數(shù)較多,如果此時(shí) I/O 中 bi 比較小,就表明文件系統(tǒng)效率比較好。
一般情況下,si(數(shù)據(jù)由硬盤(pán)調(diào)入內(nèi)存)、so(數(shù)據(jù)由內(nèi)存調(diào)入硬盤(pán)) 的值都為 0,如果 si、so 的值長(zhǎng)期不為 0,則表示系統(tǒng)內(nèi)存不足,需要增加系統(tǒng)內(nèi)存。
如果 bi+bo 的參考值為 1000 甚至超過(guò) 1000,而且 wa 值較大,則表示系統(tǒng)磁盤(pán) I/O 有問(wèn)題,應(yīng)該考慮提高磁盤(pán)的讀寫(xiě)性能。
輸出結(jié)果中,CPU 項(xiàng)顯示了 CPU 的使用狀態(tài),其中當(dāng) us 列的值較高時(shí),說(shuō)明用戶進(jìn)程消耗的 CPU 時(shí)間多,如果其長(zhǎng)期大于 50%,就需要考慮優(yōu)化程序或算法;sy 列的值較高時(shí),說(shuō)明內(nèi)核消耗的 CPU 資源較多。通常情況下,us+sy 的參考值為 80%,如果其值大于 80%,則表明可能存在 CPU 資源不足的情況。
總的來(lái)說(shuō),vmstat 命令的輸出結(jié)果中,我們應(yīng)該重點(diǎn)注意 procs 項(xiàng)中 r 列的值,以及 CPU 項(xiàng)中 us 列、sy 列和 id 列的值。
Linux CPU 性能分析:sar 命令
除了 vmstat 命令,sar 命令也可以用來(lái)檢查 CPU 性能,它可以對(duì)系統(tǒng)的每個(gè)方面進(jìn)行單獨(dú)的統(tǒng)計(jì)。
注意,雖然使用 sar 命令會(huì)增加系統(tǒng)開(kāi)銷,不過(guò)這些開(kāi)銷是可以評(píng)估的,不會(huì)對(duì)系統(tǒng)性能的統(tǒng)計(jì)結(jié)果產(chǎn)生很大影響。和 vmstat 命令一樣,sar 命令的基本格式和用法已經(jīng)在 《Linux sar 命令》一節(jié)中做了詳細(xì)的介紹,接下來(lái)直接學(xué)習(xí)如何使用 sar 命令查看 CPU 性能。
下面是 sar 命令對(duì)當(dāng)前測(cè)試系統(tǒng)的 CPU 統(tǒng)計(jì)輸出結(jié)果:
[root@localhost ~]# sar -u 3 5 Linux 2.6.32-431.el6.x86_64 (localhost) 10/28/2019 _x86_64_ (8 CPU) 04:02:46 AM CPU %user %nice %system %iowait %steal %idle 04:02:49 AM all 1.69 0.00 2.03 0.00 0.00 96.27 04:02:52 AM all 1.68 0.00 0.67 0.34 0.00 97.31 04:02:55 AM all 2.36 0.00 1.69 0.00 0.00 95.95 04:02:58 AM all 0.00 0.00 1.68 0.00 0.00 98.32 04:03:01 AM all 0.33 0.00 0.67 0.00 0.00 99.00 Average: all 1.21 0.00 1.35 0.07 0.00 97.37
此輸出結(jié)果統(tǒng)計(jì)的是系統(tǒng)中包含的 8 顆 CPU 的整體運(yùn)行狀況,每項(xiàng)的輸出都非常直觀,其中最后一行(Average)是匯總行,是對(duì)上面統(tǒng)計(jì)信息的一個(gè)平均值。
需要指出的是,sar 輸出結(jié)果中第一行包含了 sar 命令本身的統(tǒng)計(jì)消耗,因此 %user 列的值會(huì)偏高一點(diǎn),但這并不會(huì)對(duì)統(tǒng)計(jì)結(jié)果產(chǎn)生很大影響。
另外,在一個(gè)多 CPU 的系統(tǒng)中,如果程序使用了單線程,就會(huì)出現(xiàn)“CPU 整體利用率不高,但系統(tǒng)應(yīng)用響應(yīng)慢”的現(xiàn)象,造成此現(xiàn)象的原因在于,單線程只使用一個(gè) CPU,該 CPU 占用率為 100%,無(wú)法處理其他請(qǐng)求,但除此之外的其他 CPU 卻處于閑置狀態(tài),進(jìn)而整體 CPU 使用率并不高。
針對(duì)這個(gè)問(wèn)題,可以使用 sar 命令單獨(dú)查看系統(tǒng)中每個(gè) CPU 的運(yùn)行狀態(tài),例如:
[root@localhost ~]# sar -P 0 3 5 Linux 2.6.32-431.el6.x86_64 (localhost) 10/28/2019 _x86_64_ (8 CPU) 04:44:57 AM CPU %user %nice %system %iowait %steal %idle 04:45:00 AM 0 8.93 0.00 1.37 0.00 0.00 89.69 04:45:03 AM 0 6.83 0.00 1.02 0.00 0.00 92.15 04:45:06 AM 0 0.67 0.00 0.33 0.33 0.00 98.66 04:45:09 AM 0 0.67 0.00 0.33 0.00 0.00 99.00 04:45:12 AM 0 2.38 0.00 0.34 0.00 0.00 97.28 Average: 0 3.86 0.00 0.68 0.07 0.00 95.39
注意,sar 命令對(duì)系統(tǒng)中 CPU 的計(jì)數(shù)是從數(shù)字 0 開(kāi)始的,因此上面執(zhí)行的命令表示對(duì)系統(tǒng)中第一顆 CPU 的運(yùn)行狀態(tài)進(jìn)行統(tǒng)計(jì)。如果想單獨(dú)統(tǒng)計(jì)系統(tǒng)中第 5 顆 CPU 的運(yùn)行狀態(tài),可以執(zhí)行 sar -P 4 3 5 命令。
Linux CPU 性能分析:iostat 命令
iostat 命令主要用于統(tǒng)計(jì)磁盤(pán) I/O 狀態(tài),但也能用來(lái)查看 CPU 的使用情況,只不過(guò)使用此命令僅能顯示系統(tǒng)所有 CPU 的平均狀態(tài),無(wú)法向 sar 命令那樣做具體分析。
使用 iostat 命令查看 CPU 運(yùn)行狀態(tài),需要使用該命令提供的 -c 選項(xiàng),該選項(xiàng)的作用是僅顯示系統(tǒng) CPU 的運(yùn)行情況。例如:
[root@localhost ~]# iostat -c Linux 2.6.32-431.el6.x86_64 (localhost) 10/28/2019 _x86_64_ (8 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 0.07 0.00 0.12 0.09 0.00 99.71
可以看到,此輸出結(jié)果中包含的項(xiàng)和 sar 命令的輸出項(xiàng)完全相同。
有關(guān) iostat 命令的基本用法,由于不是本節(jié)重點(diǎn),因?yàn)椴辉僭敿?xì)介紹。
Linux CPU 性能分析:uptime 命令
uptime 命令是監(jiān)控系統(tǒng)性能最常用的一個(gè)命令,主要用來(lái)統(tǒng)計(jì)系統(tǒng)當(dāng)前的運(yùn)行狀況。例如:
[root@localhost ~]# uptime 05:38:26 up 1:47, 2 users, load average: 0.12, 0.08, 0.08
該命令的輸出結(jié)果中,各個(gè)數(shù)據(jù)所代表的含義依次是:系統(tǒng)當(dāng)前時(shí)間、系統(tǒng)運(yùn)行時(shí)長(zhǎng)、當(dāng)前登陸系統(tǒng)的用戶數(shù)量、系統(tǒng)分別在 1 分鐘、5 分鐘和 15 分鐘內(nèi)的平均負(fù)載。
這里需要注意的是,load average 這 3 個(gè)輸出值一般不能大于系統(tǒng) CPU 的個(gè)數(shù)。例如,本測(cè)試系統(tǒng)有 8 個(gè) CPU,如果 load average 中這 3 個(gè)值長(zhǎng)期大于 8,就說(shuō)明 CPU 很繁忙,負(fù)載很高,系統(tǒng)性能可能會(huì)受到影響;如果偶爾大于 8 則不用擔(dān)心,系統(tǒng)性能一般不會(huì)受到影響;如果這 3 個(gè)值小于 CPU 的個(gè)數(shù)(如本例所示),則表示 CPU 是非常空閑的。
總的來(lái)說(shuō),本節(jié)介紹了 4 個(gè)可查看 CPU 性能的命令,但這些命令也僅能查看 CPU 是否繁忙、負(fù)載是否過(guò)大,無(wú)法知道造成這種現(xiàn)象的根本原因。因此,在明確判斷出系統(tǒng) CPU 出現(xiàn)問(wèn)題之后,還要結(jié)合 top、ps 等命令,進(jìn)一步檢查出是哪些進(jìn)程造成的。
另外要知道的是,引發(fā) CPU 資源緊張的原因有多個(gè),可能是應(yīng)用程序不合理造成的,也可能是硬件資源匱乏引起的。因此,要學(xué)會(huì)具體問(wèn)題具體分析,或者優(yōu)化應(yīng)用程序,或者增加系統(tǒng) CPU 資源。
Linux 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。