自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 系統(tǒng) CPU 負(fù)載瘋漲?一線大廠排查方案與優(yōu)化圖譜

系統(tǒng) Linux
本文將通過(guò)實(shí)際案例,介紹如何早期識(shí)別CPU性能問(wèn)題,理解關(guān)鍵指標(biāo),定位問(wèn)題根源,并提出長(zhǎng)期解決方案,幫助建立既能應(yīng)對(duì)即時(shí)危機(jī)又能預(yù)防未來(lái)問(wèn)題的策略體系。

在Linux生產(chǎn)環(huán)境中,CPU使用率突然升高或系統(tǒng)負(fù)載激增會(huì)導(dǎo)致服務(wù)性能下降、響應(yīng)變慢甚至應(yīng)用崩潰。這些問(wèn)題常出現(xiàn)在高并發(fā)場(chǎng)景(如電商大促),通常由代碼缺陷、資源分配不當(dāng)或外部依賴瓶頸引起。缺乏有效診斷手段時(shí),運(yùn)維團(tuán)隊(duì)往往只能通過(guò)重啟系統(tǒng)來(lái)應(yīng)急處理,但這并不能根治問(wèn)題。

本文將通過(guò)實(shí)際案例,介紹如何早期識(shí)別CPU性能問(wèn)題,理解關(guān)鍵指標(biāo),定位問(wèn)題根源,并提出長(zhǎng)期解決方案,幫助建立既能應(yīng)對(duì)即時(shí)危機(jī)又能預(yù)防未來(lái)問(wèn)題的策略體系。

一、CPU負(fù)載的查詢分析

在Linux系統(tǒng)中,有一些常用的命令可以幫助我們查看進(jìn)程的狀態(tài)。在這篇文章里,我們將重點(diǎn)介紹兩個(gè)非常實(shí)用的工具——vmstat和top,并學(xué)習(xí)如何使用它們來(lái)更好地了解系統(tǒng)的運(yùn)行情況。

vmstat
top
ps -aux
ps -ef

1. vmstat

vmstat(虛擬內(nèi)存統(tǒng)計(jì)) 是一個(gè)非常有用的工具,它可以幫助我們從整體上了解操作系統(tǒng)的運(yùn)行狀況,包括虛擬內(nèi)存、進(jìn)程以及CPU等關(guān)鍵指標(biāo)。通過(guò)使用 vmstat 命令,我們可以輕松地獲取這些信息,從而更好地監(jiān)控和管理我們的系統(tǒng)。

下面是一些常用的 vmstat 命令示例:

vmstat [-n] [delay [count]]
  • [-n]:只在開始時(shí)顯示一次各字段名稱。
  • [delay]:刷新時(shí)間間隔。如果不指定,只顯示一條結(jié)果。
  • [count]:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無(wú)窮。

(1) 使用示例

執(zhí)行如下命令,使用vmstat每1秒統(tǒng)計(jì)一次各進(jìn)程的CPU使用情況,連續(xù)統(tǒng)計(jì)4次。

vmstat -n 1 4

返回示例類似如下。

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      0  69832  32628 930612    0    0  1028    54  812 1534  5  2 92  1  0
 0  0      0  69832  32636 930680    0    0     8    60 1391 2613  3  3 94  0  0
 0  0      0  69832  32636 930676    0    0     0     0 1388 2584  1  1 98  0  0
 0  0      0  69832  32636 930676    0    0     0     0 1343 2535  2  1 98  0  0

(2) 顯示結(jié)果主要字段說(shuō)明:

  • r:等待CPU處理的任務(wù)數(shù)。數(shù)值越大,系統(tǒng)越慢。
  • us:用戶程序占用的CPU時(shí)間比例。若長(zhǎng)期超過(guò)50%,建議優(yōu)化代碼或算法。
  • sy:內(nèi)核使用CPU時(shí)間的比例。
  • wa:CPU等待I/O操作完成的時(shí)間比例。值高表示磁盤讀寫慢或頻繁隨機(jī)訪問(wèn)。
  • id:CPU空閑時(shí)間比例。若為0且sy是us兩倍,表明CPU不足。

2. top

在Linux系統(tǒng)中,top命令是一個(gè)非常實(shí)用的小幫手,它能夠?qū)崟r(shí)地向我們展示每個(gè)進(jìn)程是如何使用系統(tǒng)資源的。

top [-n] [-d]
  • [-n]:刷新次數(shù)。如果不指定刷新次數(shù),但指定了刷新時(shí)間間隔,這時(shí)刷新次數(shù)為無(wú)窮。
  • [-d] :刷新時(shí)間間隔。

(1) 使用示例

你可以試試下面的命令來(lái)查看系統(tǒng)里各個(gè)進(jìn)程用了多少資源。這個(gè)命令每2秒會(huì)刷新一次所有進(jìn)程的信息,刷新5次后就會(huì)自動(dòng)停下。

top -n 5 -d 2

系統(tǒng)顯示類似如下。

top - 12:40:17 up  1:18,  3 users,  load average: 0.00, 0.06, 0.08
Tasks: 170 total,   1 running, 169 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.0 us,  0.5 sy,  0.0 ni, 98.5 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   1685.0 total,     71.2 free,    666.0 used,    947.9 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.    854.0 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                            
   2078 root      20   0  140536  17052   5120 S   1.3   1.0   1:21.08 AliYunDunMonito                    
   1144 root      20   0 1276316  10180   8544 S   1.0   0.6   0:28.96 argusagent

(2) 顯示結(jié)果主要字段說(shuō)明

在查看CPU使用率和負(fù)載情況時(shí),您可以重點(diǎn)關(guān)注輸出結(jié)果中的第一行和第三行信息。

  • 第一行:這里會(huì)顯示如 top - 12:40:17 up  1:18,  3 users,  load average: 0.00, 0.06, 0.08 這樣的信息。它依次告訴了我們當(dāng)前的系統(tǒng)時(shí)間、系統(tǒng)自啟動(dòng)以來(lái)已經(jīng)運(yùn)行了多久、現(xiàn)在有多少用戶登錄到了系統(tǒng)中,以及過(guò)去1分鐘、5分鐘和15分鐘內(nèi)的平均系統(tǒng)負(fù)載情況。
  • 第三行:這一行則概覽了整個(gè)系統(tǒng)的CPU資源使用概況。緊隨其后列出的是各個(gè)進(jìn)程具體的資源消耗詳情,幫助您了解哪些程序正在占用較多的計(jì)算資源。

使用 top 命令時(shí),可以通過(guò)幾個(gè)交互命令更有效地管理系統(tǒng):

  • 按P鍵按CPU使用率從高到低排序進(jìn)程,便于發(fā)現(xiàn)占用大量計(jì)算資源的程序。
  • 按 M鍵根據(jù)內(nèi)存使用量對(duì)進(jìn)程進(jìn)行排序。對(duì)于多核處理器,輸入 1 可查看每個(gè)核心的負(fù)載情況。
  • 若要了解特定進(jìn)程運(yùn)行的具體程序,可以使用 ll /proc/PID/exe 查看其可執(zhí)行文件路徑。
root@didiplus:~# ll /proc/806/exe 
lrwxrwxrwx 1 root root 0 Apr  3 16:27 /proc/806/exe -> /usr/local/bin/1panel*

要停止占用大量CPU資源的進(jìn)程,請(qǐng)按以下步驟操作:

  • 輕敲鍵盤上的小寫字母 k。
  • 輸入要結(jié)束進(jìn)程的PID(進(jìn)程標(biāo)識(shí)號(hào)),然后按Enter鍵。如果您不確定PID,可以選擇列表中的第一個(gè)。例如,要停止PID為23的進(jìn)程,輸入23后按Enter。

操作成功后,界面上會(huì)顯示類似Send pid 23 signal [15/sigterm]的提示信息。這時(shí),只需輕輕按一下Enter鍵確認(rèn)就可以了。

二、常見(jiàn)CPU資源過(guò)高案例分析

案例一:CPU使用率較低但負(fù)載較高

(1) 問(wèn)題現(xiàn)象

Linux系統(tǒng)上暫時(shí)沒(méi)有運(yùn)行任何業(yè)務(wù)程序。通過(guò)使用top命令查看時(shí),我們注意到CPU的使用率其實(shí)并不高,但奇怪的是,CPU的負(fù)載(load average)卻顯得異常高,就像下面的截圖所展示的一樣。

(2) 問(wèn)題原因

這個(gè)問(wèn)題可能是由于過(guò)多的僵尸(zombie)進(jìn)程引起的。Load average是用來(lái)衡量CPU負(fù)載的一個(gè)指標(biāo),它的值越高,意味著等待執(zhí)行的任務(wù)隊(duì)列越長(zhǎng),也就是說(shuō),有更多的任務(wù)正在排隊(duì)等待處理。

(3) 解決方案

可以通過(guò) ps -axjf 命令來(lái)檢查系統(tǒng)中是否存在處于 D+ 狀態(tài)的進(jìn)程。如果發(fā)現(xiàn)有進(jìn)程處于這種狀態(tài),它們暫時(shí)既不能被手動(dòng)終止,也無(wú)法自行退出。解決這個(gè)問(wèn)題的辦法通常是恢復(fù)這些進(jìn)程所依賴的資源,或者在必要時(shí)重啟系統(tǒng)。

案例二:kswapd0進(jìn)程占用CPU較高

(1) 問(wèn)題現(xiàn)象

服務(wù)器運(yùn)行得特別慢,用top命令查了下,發(fā)現(xiàn)kswapd0這個(gè)進(jìn)程占用了99%的CPU。

(2) 問(wèn)題原因

這個(gè)問(wèn)題可能是因?yàn)橄到y(tǒng)正在不停地進(jìn)行換頁(yè)操作,占用了大量的CPU資源。kswapd0是負(fù)責(zé)管理虛擬內(nèi)存中換頁(yè)的進(jìn)程。當(dāng)服務(wù)器內(nèi)存不夠用時(shí),kswapd0就會(huì)開始換頁(yè),而這個(gè)過(guò)程會(huì)消耗很多CPU資源。

(3) 解決方案

你可以通過(guò)調(diào)整vm.swappiness這個(gè)設(shè)置來(lái)改變系統(tǒng)使用交換空間的方式,這樣可以幫助減少kswapd0進(jìn)程占用太多CPU資源的問(wèn)題。

查看swappiness參數(shù):

cat /proc/sys/vm/swappiness

當(dāng)系統(tǒng)里的物理內(nèi)存使用超過(guò)60%(也就是空閑內(nèi)存低于40%)時(shí),就會(huì)開始用swap空間。

swappiness這個(gè)參數(shù)值設(shè)置得越低,Linux就越少用swap分區(qū),盡量多用物理內(nèi)存;而swappiness值越高,系統(tǒng)就越傾向于把數(shù)據(jù)放到swap空間里。

根據(jù)業(yè)務(wù)需求,你需要調(diào)整swappiness參數(shù)。具體操作是打開內(nèi)核參數(shù)配置文件sysctl.conf進(jìn)行修改。

vi /etc/sysctl.conf

根據(jù)業(yè)務(wù)需求,調(diào)整swappiness參數(shù)的值。具體操作是在sysctl.conf文件里找到vm.swappiness這一行,并將其設(shè)置為10(即寫成vm.swappiness = 10)。修改完成后,記得重新加載sysctl配置,這樣新設(shè)置才能生效。

sysctl -p

案例三:CPU使用率過(guò)高100%問(wèn)題排查

(1) 問(wèn)題現(xiàn)象

如果你發(fā)現(xiàn)CPU使用率飆到100%,但用top或htop這些工具又查不到具體是哪個(gè)進(jìn)程在占用CPU,這情況就比較麻煩了。

(2) 問(wèn)題原因

該問(wèn)題可能是病毒導(dǎo)致。

(3) 解決方案

看看你的Linux系統(tǒng)里的命令在過(guò)去30天內(nèi)有沒(méi)有被改動(dòng)過(guò)?那就用下面這條命令吧。

stat /usr/bin/top

系統(tǒng)顯示類似如下,系統(tǒng)命令有被修改。查看更改時(shí)間是否和監(jiān)控中CPU使用率出現(xiàn)100%的時(shí)間點(diǎn)吻合。

分別執(zhí)行如下命令,查看ps或top命令是否被修改過(guò)。

rpm -Vf /bin/ps
rpm -Vf /usr/bin/top

在一切正常的情況下,系統(tǒng)不會(huì)返回任何修改信息。如果遇到異常情況,系統(tǒng)會(huì)顯示類似以下的信息,這通常意味著ps和top命令可能已經(jīng)被修改了。

請(qǐng)您運(yùn)行以下命令,以檢查當(dāng)前實(shí)例是否連接到了任何異常的域名。

iftop -i [$Device] -n -P

[$Device]請(qǐng)?zhí)鎿Q為當(dāng)前系統(tǒng)使用的網(wǎng)卡,如eth0。

如果系統(tǒng)顯示了類似的信息,并且你之前沒(méi)有連接過(guò)crypto-pool.fr,那么這個(gè)域名可能是有問(wèn)題的。

責(zé)任編輯:趙寧寧 來(lái)源: 攻城獅成長(zhǎng)日記
相關(guān)推薦

2019-01-21 11:17:13

CPU優(yōu)化定位

2019-10-29 16:42:36

第一線

2014-08-28 13:58:15

錘子測(cè)評(píng)

2020-07-13 09:05:47

2012-06-19 10:14:11

數(shù)據(jù)中心工作負(fù)載遷移

2018-11-26 08:49:42

CPU排查負(fù)載

2024-07-18 16:52:54

SD-WAN信通院

2019-05-05 09:49:17

Leader主管技術(shù)

2019-07-16 06:43:18

LinuxCPU占用率

2014-05-09 14:33:35

2019-03-26 08:31:37

技術(shù)主管團(tuán)隊(duì)

2022-10-26 09:03:08

致態(tài)

2011-02-17 10:14:44

LinuxCPU負(fù)載

2013-04-14 17:11:43

華為解決方案網(wǎng)絡(luò)規(guī)劃

2022-04-19 08:14:59

技術(shù)人加班領(lǐng)域

2016-11-08 12:17:17

Linux經(jīng)驗(yàn)開源

2012-05-22 11:33:15

2017-10-11 14:57:29

內(nèi)存DIY攢機(jī)

2010-04-16 10:05:52

處理器IntelAMD

2023-12-11 15:44:09

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)