一盗扇、進(jìn)程狀態(tài)的管理
當(dāng)進(jìn)程運(yùn)行為進(jìn)程后智玻,我們可以使用Linux的命令對進(jìn)程發(fā)送關(guān)閉信號。
1仗颈、使用kill -l 列出當(dāng)前系統(tǒng)所支持的命令
[root@oldboy:~]# kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR
31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3
38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7
58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
2、最常用的進(jìn)程管理命令:kill -1 PID椎例、kill -9 PID
數(shù)字編號 | 字符表示 | 含義 |
---|---|---|
1 | SIGHUP | 重新加載配置文件 |
9 | SIGKILL | 強(qiáng)制終止(殺死)進(jìn)程 |
15 | SIGTERM | 終止進(jìn)程挨决,默認(rèn)kill的使用 |
1)使用kill 參數(shù) 命令終止PID的進(jìn)程
1.啟動(dòng)vsftpd
[root@oldboy:~]# systemctl start vsftpd
2.靜態(tài)查看vsftpd的狀態(tài)
[root@oldboy:~]# ps aux |grep vsftpd
root 7759 0.0 0.0 53176 580 ? Ss 14:53 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 7761 0.0 0.0 112708 976 pts/0 R+ 14:54 0:00 grep --color=auto vsftpd
3.發(fā)送重載命令,重新加載订歪,其父進(jìn)程的PID號不發(fā)生改變
[root@oldboy:~]# kill -1 7759
[root@oldboy:~]# ps aux |grep vsftpd
root 7759 0.0 0.0 53176 760 ? Ss 14:53 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 7763 0.0 0.0 112708 976 pts/0 R+ 14:54 0:00 grep --color=auto vsftpd
4.發(fā)送終止信號脖祈,vsftpd的服務(wù)停止(kill=kill -15)
[root@oldboy:~]# kill 7759
[root@oldboy:~]# ps aux |grep vsftpd
root 7766 0.0 0.0 112708 976 pts/0 R+ 14:59 0:00 grep --color=auto vsftpd
5.當(dāng)無法停止時(shí),可使用強(qiáng)制的命令將其終止
[root@oldboy:~]# kill -9 7759
3刷晋、killall盖高、pkill 終止指定名字的進(jìn)程
1.我們首先啟動(dòng)nginx服務(wù)并查看當(dāng)前狀態(tài)
[root@oldboy:~]# systemctl start nginx
[root@oldboy:~]# ps aux |grep nginx
root 7817 0.0 0.0 46340 972 ? Ss 15:05 0:00 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
nginx 7818 0.0 0.0 46748 1936 ? S 15:05 0:00 nginx: worker process
root 7820 0.0 0.0 112708 972 pts/1 R+ 15:06 0:00 grep --color=auto nginx
2.通過服務(wù)器的名稱將其殺掉
[root@oldboy:~]# pkill nginx
[root@oldboy:~]# ps aux |grep nginx
root 7832 0.0 0.0 112708 976 pts/0 R+ 15:10 0:00 grep --color=auto nginx
3.通過killall終止nginx服務(wù)
[root@oldboy:~]# killall nginx
[root@oldboy:~]# ps aux |grep nginx
root 7832 0.0 0.0 112708 976 pts/0 R+ 15:10 0:00 grep --color=auto nginx
1)使用pkill 踢出遠(yuǎn)程登陸的本機(jī)的用戶,終止 /pts/1上的所有進(jìn)程并結(jié)束bash
1.打開2個(gè)bash shell的窗口
[root@oldboy:~]# tty
/dev/pts/0
[root@oldboy:~]# tty
/dev/pts/1
2.利用pkill 將遠(yuǎn)程登陸的bashshell窗口 /pts/1踢下線
[root@oldboy:~]# pkill -9 -t pts/1
[root@oldboy:~]#
Connection closed by foreign host.
Disconnected from remote host(oldboy-65 - cui) at 15:29:07.
Type `help' to learn how to use Xshell prompt.
[c:\~]$
二眼虱、進(jìn)程后臺管理
1喻奥、什么是后臺進(jìn)程
通常進(jìn)程都會(huì)在終端前臺運(yùn)行,一旦關(guān)閉終端捏悬,進(jìn)程也會(huì)隨之結(jié)束撞蚕,這樣比較浪費(fèi)資源。那么我們希望將進(jìn)程放入終端后臺过牙,關(guān)閉終端后甥厦,進(jìn)行進(jìn)程繼續(xù)運(yùn)行纺铭。減少資源的浪費(fèi)。
2刀疙、將進(jìn)程放入后臺的命令:$符舶赔、jobs、bg谦秧、fg竟纳、最常用的screen
1)使用jobs、bg疚鲤、fg
1.運(yùn)行2個(gè)程序蚁袭,一個(gè)在后臺執(zhí)行,一個(gè)在后臺執(zhí)行
[root@oldboy:~]# sleep 3000 & 程序運(yùn)行在后臺執(zhí)行
[1] 7940
[root@oldboy:~]# sleep 4000 將前臺程序掛起在后臺
^Z
[3]+ Stopped sleep 4000
2.靜態(tài)查看sleep的狀態(tài)
[root@oldboy:~]# ps aux |grep sleep
root 7940 0.0 0.0 107952 360 pts/1 S 15:39 0:00 sleep 3000
root 7942 0.0 0.0 107952 356 pts/1 T 15:41 0:00 sleep 4000
3.利用jobs查看后臺作業(yè)情況
[root@oldboy:~]# jobs
[1]- Running sleep 3000 &
[3]+ Stopped sleep 4000
4.利用bg 和 fg 進(jìn)行前后臺調(diào)動(dòng)
[root@oldboy:~]# bg %3 讓作業(yè) 3 在后臺運(yùn)行
[3]+ sleep 4000 &
[root@oldboy:~]# fg %1 將作業(yè) 1 調(diào)回前臺
sleep 3000
5.終止作業(yè)1石咬,利用PID
[root@oldboy:~]# kill 7940
2)利用screen 進(jìn)行后臺管理
1.安裝screen
[root@oldboy ~]# yum install screen -y
2.開啟一個(gè)screen窗口,指定名稱
[root@oldboy ~]# screen -S wget_mysql
3.在screen窗口中執(zhí)行任務(wù)即可
[root@oldboy ~]#
4.ctrl+a+d平滑的退出screen,但不會(huì)終止screen中的任務(wù)揩悄。注意: 如果使用exit或者Ctrl+d 才算真的關(guān)閉screen窗口
5.查看當(dāng)前正在運(yùn)行的screen有哪些
[root@oldboy ~]# screen -list
There is a screen on:
22058.wget_mysql (Detached)
1 Socket in /var/run/screen/S-root.
6.進(jìn)入正在運(yùn)行的screen
[root@oldboy ~]# screen -r wget_mysql
[root@oldboy ~]# screen -r 22058
7.終止當(dāng)前后臺運(yùn)行的進(jìn)程,將后臺運(yùn)行的程序調(diào)回前臺鬼悠,Ctrl+c 終止然后exit退出删性;或者Ctrl+c后Ctrl+d退出。
三焕窝、進(jìn)程的優(yōu)先級
優(yōu)先級是指在CPU處理進(jìn)程調(diào)度時(shí)蹬挺,優(yōu)先處理優(yōu)先級較高的進(jìn)程。
1它掂、配置優(yōu)先級 命令 nice
在啟動(dòng)進(jìn)程時(shí)巴帮,為不同的進(jìn)程使用不同的調(diào)度策略。
nice 值越高: 表示優(yōu)先級越低虐秋,例如+19榕茧,該進(jìn)程容易將CPU 使用量讓給其他進(jìn)程。
nice 值越低: 表示優(yōu)先級越高客给,例如-20用押,該進(jìn)程更不傾向于讓出CPU。
NI =0 PR=20
NI =-20 PR=0
NI = 10 PR=30
NI = 19 PR =39
1)使用top或者ps命令進(jìn)行查看進(jìn)程的優(yōu)先級
1靶剑、使用top可以查看nice優(yōu)先級蜻拨。 NI: 實(shí)際nice級別,默認(rèn)是0桩引。 PR: 顯示nice值缎讼,-20映射到0,+19映射到39
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
7912 root 20 0 0 0 0 S 0.3 0.0 0:08.41 kworker/0:3
1 root 20 0 125732 4264 2600 S 0.0 0.2 0:05.59 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:00.29 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
2坑匠、使用ps查看進(jìn)程優(yōu)先級
[root@oldboy:~]# ps axo command,nice
COMMAND NI
/usr/lib/systemd/systemd -- 0
[kthreadd] 0
[ksoftirqd/0] 0
[kworker/0:0H] -20
[migration/0] -
[rcu_bh] 0
[rcu_sched] 0
[lru-add-drain] -20
[watchdog/0] -
[kdevtmpfs] 0
[netns] -20
2) nice指定程序的優(yōu)先級血崭。語法格式 nice -n + 優(yōu)先級數(shù)字 + 進(jìn)程名稱
1.設(shè)定vim的優(yōu)先級為 -5
[root@oldboy:~]# nice -n -5 vim &
[1] 8031
2.查看進(jìn)程 vim 的優(yōu)先級
[root@oldboy:~]# ps axo command,nice|grep "vim"
vim -5
grep --color=auto vim
3)renice 命令修改一個(gè)正在運(yùn)行的進(jìn)程優(yōu)先級。語法格式 renice -n + 優(yōu)先級數(shù)字 + 進(jìn)程pid
1.查看sshd進(jìn)程當(dāng)前的優(yōu)先級狀態(tài)
[root@oldboy:~]# ps axo pid,command,nice|grep sshd
7358 /usr/sbin/sshd -D 0
7620 sshd: root@pts/0 0
7914 sshd: root@pts/1 0
8054 grep --color=auto sshd 0
2.調(diào)整sshd主進(jìn)程的優(yōu)先級
[root@oldboy:~]# renice -n -20 7358
7358 (process ID) old priority 0, new priority -20
3.調(diào)整之后查看并退出終端
[root@oldboy:~]# ps axo pid,command,nice|grep sshd
7358 /usr/sbin/sshd -D -20
7620 sshd: root@pts/0 0
7914 sshd: root@pts/1 0
8057 grep --color=auto sshd 0
[root@oldboy:~]# exit
4.當(dāng)再次登陸sshd服務(wù),會(huì)由主進(jìn)程fork子進(jìn)程(那么子進(jìn)程會(huì)繼承主進(jìn)程的優(yōu)先級)
[root@oldboy:~]# ps axo pid,command,nice|grep sshd
7358 /usr/sbin/sshd -D -20
7914 sshd: root@pts/1 0
8065 sshd: root@pts/0 -20
8091 grep --color=auto sshd -20
當(dāng)服務(wù)器響應(yīng)較慢時(shí)功氨,通過對登錄的sshd協(xié)議調(diào)度nice優(yōu)先級的設(shè)置,可讓讓我們在系統(tǒng)出現(xiàn)服務(wù)故障時(shí)手幢,第一時(shí)間優(yōu)先登錄系統(tǒng)檢查系統(tǒng)的故障捷凄。
4)服務(wù)器的假死
所謂假死,就是我們可ping通服務(wù)器围来,但是ssh登錄不上去跺涤,任何其他操作也沒有反應(yīng),非常的緩慢监透。包括上面部署的nginx的頁面也沒有反應(yīng)桶错。
2、平均負(fù)載
平均負(fù)載是指單位時(shí)間內(nèi)胀蛮,系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù)院刁,也就是平均活躍進(jìn)程數(shù), 平均負(fù)載與 CPU 使用率并沒有直接關(guān)系粪狼。
[root@oldboy:~]# uptime
19:01:41 up 4:13, 3 users, load average: 0.00, 0.01, 0.05
1)如何判斷平均負(fù)載
最理想的狀態(tài)是每個(gè) CPU 上都剛好運(yùn)行著一個(gè)進(jìn)程退腥,這樣每個(gè) CPU 都得到了充分利用。所以在評判平均負(fù)載時(shí)再榄,首先你要知道系統(tǒng)有幾個(gè) CPU狡刘,這可以通過 top 命令獲取,或grep 'model name' /proc/cpuinfo
2)平均負(fù)載的三個(gè)指標(biāo)
1.如果 1 分鐘困鸥、5 分鐘嗅蔬、15 分鐘的三個(gè)值基本相同,或者相差不大疾就,那就說明系統(tǒng)負(fù)載很平穩(wěn)澜术。
2.但如果 1 分鐘的值遠(yuǎn)小于 15 分鐘的值,就說明系統(tǒng)最近 1 分鐘的負(fù)載在減少猬腰,而過去 15 分鐘內(nèi)卻有很大的負(fù)載瘪板。
3.反過來,如果 1 分鐘的值遠(yuǎn)大于 15 分鐘的值漆诽,就說明最近 1 分鐘的負(fù)載在增加侮攀,這種增加有可能只是臨時(shí)性的,也有可能還會(huì)持續(xù)上升厢拭,所以就需要持續(xù)觀察兰英。
示例
假設(shè)我們在有2個(gè) CPU 系統(tǒng)上看到平均負(fù)載為 2.73,6.90供鸠,12.98
- 那么說明在過去1 分鐘內(nèi)畦贸,系統(tǒng)有 136% 的超載 (2.73/2=136%)
- 而在過去 5 分鐘內(nèi),有 345% 的超載 (6.90/2=345%)
- 而在過去15 分鐘內(nèi),有 649% 的超載薄坏,(12.98/2=649%)
但從整體趨勢來看趋厉,系統(tǒng)的負(fù)載是在逐步的降低。
3)那么在實(shí)際生產(chǎn)環(huán)境中胶坠,平均負(fù)載多高時(shí)君账,需要重點(diǎn)關(guān)注
當(dāng)平均負(fù)載高于 CPU 數(shù)量 70% 的時(shí)候,就應(yīng)該分析排查負(fù)載高的問題了沈善。一旦負(fù)載過高乡数,就可能導(dǎo)致進(jìn)程響應(yīng)變慢,進(jìn)而影響服務(wù)的正常功能闻牡。
但 70% 這個(gè)數(shù)字并不是絕對的净赴,把系統(tǒng)的平均負(fù)載監(jiān)控起來,然后根據(jù)更多的歷史數(shù)據(jù)罩润,判斷負(fù)載的變化趨勢玖翅。當(dāng)發(fā)現(xiàn)負(fù)載有明顯升高趨勢時(shí),比如說負(fù)載翻倍了割以,再去做分析和調(diào)查烧栋。
4)平均負(fù)載與 CPU 使用率的關(guān)系
我們還是要回到平均負(fù)載的含義上來,平均負(fù)載是指單位時(shí)間內(nèi)拳球,處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù)审姓。所以,它不僅包括了正在使用 CPU 的進(jìn)程祝峻,還包括等待 CPU 和等待 I/O 的進(jìn)程魔吐。
1、而 CPU 使用率莱找,是單位時(shí)間內(nèi) CPU 繁忙情況的統(tǒng)計(jì)酬姆,跟平均負(fù)載并不一定完全對應(yīng)。比如:
2奥溺、CPU 密集型進(jìn)程辞色,使用大量 CPU 會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)這兩者是一致的浮定;
3相满、I/O 密集型進(jìn)程,等待 I/O 也會(huì)導(dǎo)致平均負(fù)載升高桦卒,但 CPU 使用率不一定很高立美;
4、大量等待 CPU 的進(jìn)程調(diào)度也會(huì)導(dǎo)致平均負(fù)載升高方灾,此時(shí)的 CPU 使用率也會(huì)比較高建蹄。
5)平均負(fù)載案例分析實(shí)戰(zhàn)
下面碌更,我們以三個(gè)示例分別來看這三種情況,并用 stress洞慎、mpstat痛单、pidstat 等工具,找出平均負(fù)載升高的根源劲腿。
1.stress 是 Linux 系統(tǒng)壓力測試工具旭绒,這里我們用作異常進(jìn)程模擬平均負(fù)載升高的場景。
2.mpstat 是多核 CPU 性能分析工具谆棱,用來實(shí)時(shí)查看每個(gè) CPU 的性能指標(biāo),以及所有 CPU 的平均指標(biāo)圆仔。
3.pidstat 是一個(gè)常用的進(jìn)程性能分析工具垃瞧,用來實(shí)時(shí)查看進(jìn)程的 CPU、內(nèi)存坪郭、I/O 以及上下文切換等性能指標(biāo)个从。
如果出現(xiàn)無法使用mpstat、pidstat命令查看%wait指標(biāo)建議更新下軟件包
wget http://pagesperso-orange.fr/sebastien.godard/sysstat-11.7.3-1.x86_64.rpm
rpm -Uvh sysstat-11.7.3-1.x86_64.rpm
場景一:CPU 密集型進(jìn)程
1.首先歪沃,我們在第一個(gè)終端運(yùn)行 stress 命令嗦锐,模擬一個(gè) CPU 使用率 100% 的場景:
[root@oldboy:~]# stress --cpu 1 --timeout 600
2.接著,在第二個(gè)終端運(yùn)行 uptime 查看平均負(fù)載的變化情況
使用watch -d 參數(shù)表示高亮顯示變化的區(qū)域(注意負(fù)載會(huì)持續(xù)升高)
[root@oldboy:~]# watch -d uptime
17:27:44 up 2 days, 3:11, 3 users, load average: 1.10, 0.30, 0.17
3.最后沪曙,在第三個(gè)終端運(yùn)行 mpstat 查看 CPU 使用率的變化情況
-P ALL 表示監(jiān)控所有 CPU奕污,后面數(shù)字 5 表示間隔 5 秒后輸出一組數(shù)據(jù)
[root@oldboy:~]# mpstat -P ALL 5
Linux 3.10.0-957.1.3.el7.x86_64 (m01) 2019年04月29日 _x86_64_ (1 CPU)
17時(shí)32分03秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
17時(shí)32分08秒 all 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17時(shí)32分08秒 0 99.80 0.00 0.20 0.00 0.00 0.00 0.00 0.00 0.00 0.00
單核CPU所以只有一個(gè)all和0
4.從終端二中可以看到,1 分鐘的平均負(fù)載會(huì)慢慢增加到 1.00液走,而從終端三中還可以看到碳默,正好有一個(gè) CPU 的使用率為 100%,但它的 iowait 只有 0缘眶。這說明嘱根,平均負(fù)載的升高正是由于 CPU 使用率為 100% 。那么巷懈,到底是哪個(gè)進(jìn)程導(dǎo)致了 CPU 使用率為 100% 呢该抒?可以使用 pidstat 來查詢
間隔 5 秒后輸出一組數(shù)據(jù)
[root@oldboy:~]# pidstat -u 5 1
Linux 3.10.0-957.1.3.el7.x86_64 (m01) 2019年04月29日 _x86_64_(1 CPU)
17時(shí)33分21秒 UID PID %usr %system %guest %CPU CPU Command
17時(shí)33分26秒 0 110019 98.80 0.00 0.00 98.80 0 stress
從這里可以明顯看到,stress 進(jìn)程的 CPU 使用率為 100%顶燕。
場景二:I/O 密集型進(jìn)程
1.首先還是運(yùn)行 stress 命令凑保,但這次模擬 I/O 壓力,即不停地執(zhí)行 sync
[root@oldboy:~]# stress --io 1 --timeout 600s
2.然后在第二個(gè)終端運(yùn)行 uptime 查看平均負(fù)載的變化情況:
[root@oldboy:~]# watch -d uptime
18:43:51 up 2 days, 4:27, 3 users, load average: 1.12, 0.65, 0.00
3.最后第三個(gè)終端運(yùn)行 mpstat 查看 CPU 使用率的變化情況:
# 顯示所有 CPU 的指標(biāo)涌攻,并在間隔 5 秒輸出一組數(shù)據(jù)
[root@oldboy:~]# mpstat -P ALL 5
Linux 3.10.0-693.2.2.el7.x86_64 (bgx.com) 2019年05月07日 _x86_64_ (1 CPU)
14時(shí)20分07秒 CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
14時(shí)20分12秒 all 0.20 0.00 82.45 17.35 0.00 0.00 0.00 0.00 0.00 0.00
14時(shí)20分12秒 0 0.20 0.00 82.45 17.35 0.00 0.00 0.00 0.00 0.00 0.00
#會(huì)發(fā)現(xiàn)cpu的與內(nèi)核打交道的sys占用非常高
4.那么到底是哪個(gè)進(jìn)程愉适,導(dǎo)致 iowait 這么高呢?我們還是用 pidstat 來查詢
# 間隔 5 秒后輸出一組數(shù)據(jù)癣漆,-u 表示 CPU 指標(biāo)
[root@oldboy:~]# pidstat -u 5 1
Linux 3.10.0-957.1.3.el7.x86_64 (m01) 2019年04月29日 _x86_64_(1 CPU)
18時(shí)29分37秒 UID PID %usr %system %guest %wait %CPU CPU Command
18時(shí)29分42秒 0 127259 32.60 0.20 0.00 67.20 32.80 0 stress
18時(shí)29分42秒 0 127261 4.60 28.20 0.00 67.20 32.80 0 stress
18時(shí)29分42秒 0 127262 4.20 28.60 0.00 67.20 32.80 0 stress
#可以發(fā)現(xiàn)维咸,還是 stress 進(jìn)程導(dǎo)致的。
場景三:大量進(jìn)程的場景
當(dāng)系統(tǒng)中運(yùn)行進(jìn)程超出 CPU 運(yùn)行能力時(shí),就會(huì)出現(xiàn)等待 CPU 的進(jìn)程癌蓖。
1.首先瞬哼,我們還是使用 stress,但這次模擬的是 4 個(gè)進(jìn)程
[root@oldboy:~]# stress -c 4 --timeout 600
2.由于系統(tǒng)只有 1 個(gè) CPU租副,明顯比 4 個(gè)進(jìn)程要少得多坐慰,因而,系統(tǒng)的 CPU 處于嚴(yán)重過載狀態(tài)
[root@oldboy:~]# watch -d uptime
19:11:07 up 2 days, 4:45, 3 users, load average: 4.65, 2.65, 4.65
3.然后用僧,再運(yùn)行 pidstat 來看一下進(jìn)程的情況:
# 間隔 5 秒后輸出一組數(shù)據(jù)
[root@oldboy:~]# pidstat -u 5 1
平均時(shí)間: UID PID %usr %system %guest %wait %CPU CPU Command
平均時(shí)間: 0 130290 24.55 0.00 0.00 75.25 24.55 - stress
平均時(shí)間: 0 130291 24.95 0.00 0.00 75.25 24.95 - stress
平均時(shí)間: 0 130292 24.95 0.00 0.00 75.25 24.95 - stress
平均時(shí)間: 0 130293 24.75 0.00 0.00 74.65 24.75 - stress
可以看出结胀,4 個(gè)進(jìn)程在爭搶 1 個(gè) CPU,每個(gè)進(jìn)程等待 CPU 的時(shí)間(也就是代碼塊中的 %wait 列)高達(dá) 75%责循。這些超出 CPU 計(jì)算能力的進(jìn)程糟港,最終導(dǎo)致 CPU 過載。