1.管理進(jìn)程狀態(tài)
當(dāng)程序運(yùn)行為進(jìn)程后,如果希望停止進(jìn)程涩搓,怎么辦呢? 那么此時(shí)我們可以使用linux的kill命令對進(jìn)程發(fā)送關(guān)閉信號污秆。當(dāng)然除了kill、還有killall缩膝,pkill
-
1.使用kill -l列出當(dāng)前系統(tǒng)所支持的信號
雖然linux支持信號很多混狠,但是我們僅列出我們最為常用的3個(gè)信號
數(shù)字編號 | 信號含義 | 信號翻譯 |
---|---|---|
1 | SIGHUP | 通常用來重新加載配置文件 |
9 | SIGKILL | 強(qiáng)制殺死進(jìn)程 |
15 | SIGTERM | 終止進(jìn)程将饺,默認(rèn)kill使用該信號 |
1.我們使用kill予弧、pkill命令殺死指定PID的進(jìn)程湖饱。
[root@localhost ~]# ps aux | grep nginx
root 6885 0.0 0.2 46440 980 ? Ss 08:31 0:00 nginx: master process nginx
nginx 6887 0.0 0.4 46852 2176 ? S 08:31 0:00 nginx: worker process
root 10490 0.0 0.2 112708 976 pts/0 R+ 17:08 0:00 grep --color nginx
[root@localhost ~]# kill 6885
[root@localhost ~]# ps aux | grep nginx
root 10520 0.0 0.2 112708 976 pts/0 S+ 17:08 0:00 grep --color nginx
2.Linux系統(tǒng)中的killall、pkill命令用于殺死指定名字的進(jìn)程器赞。我們可以使用kill命令殺死指定進(jìn)程PID的進(jìn)程,如果要找到我們需要?dú)⑺赖倪M(jìn)程,我們還需要在之前使用ps等命令再配合grep來查找進(jìn)程畔柔,而killall、pkill把這兩個(gè)過程合二為一秸仙,是一個(gè)很好用的命令。
---------使用pkill--------
[root@localhost ~]# ps aux | grep nginx
root 10536 0.0 0.2 46440 980 ? Ss 17:10 0:00 nginx: master process nginx
nginx 10538 0.0 0.4 46852 1936 ? S 17:10 0:00 nginx: worker process
root 10553 0.0 0.2 112708 972 pts/0 R+ 17:10 0:00 grep --color nginx
[root@localhost ~]# pkill nginx
[root@localhost ~]# ps aux | grep nginx
root 10584 0.0 0.2 112708 976 pts/0 S+ 17:10 0:00 grep --color nginx
---------使用killall--------
[root@localhost ~]# ps aux | grep nginx
root 10536 0.0 0.2 46440 980 ? Ss 17:10 0:00 nginx: master process nginx
nginx 10538 0.0 0.4 46852 1936 ? S 17:10 0:00 nginx: worker process
root 10553 0.0 0.2 112708 972 pts/0 R+ 17:10 0:00 grep --color nginx
[root@localhost ~]# killall nginx
[root@localhost ~]# ps aux | grep nginx
root 10584 0.0 0.2 112708 976 pts/0 S+ 17:10 0:00 grep --color nginx
2.管理后臺進(jìn)程
1.什么是后臺進(jìn)程
- 通常進(jìn)程都會在終端前臺運(yùn)行拟杉,一旦關(guān)閉終端,進(jìn)程也會隨著結(jié)束拿穴,那么此時(shí)我們就希望進(jìn)程能在后臺運(yùn)行狮腿,就是將在前臺運(yùn)行的進(jìn)程放入后臺運(yùn)行,這樣及時(shí)我們關(guān)閉了終端也不影響進(jìn)程的正常運(yùn)行。
2.我們?yōu)槭裁匆獙⑦M(jìn)程放入后臺運(yùn)行
- 比如:我們此前在國內(nèi)服務(wù)器往國外服務(wù)器傳輸大文件時(shí),由于網(wǎng)絡(luò)的問題需要傳輸很久,如果在傳輸?shù)倪^程中出現(xiàn)網(wǎng)絡(luò)抖動或者不小心關(guān)閉了終端則會導(dǎo)致傳輸失敗,如果能將傳輸?shù)倪M(jìn)程放入后臺苞也,是不是就能解決此類問題了。
3.使用什么工具將進(jìn)程放入后臺
- 早期的時(shí)候大家都選擇使用&符號將進(jìn)程放入后臺,然后在使用jobs、bg、fg等方式查看進(jìn)程狀態(tài),但太麻煩了草讶。也不直觀拍霜,所以我們推薦使用screen嘱丢。
4.screen的使用(強(qiáng)烈推薦,生產(chǎn)必用)
#1.開啟一個(gè)screen窗口,指定名稱
[root@localhost ~]# screen -S wget
[screen is terminating]
#2.在screen窗口中執(zhí)行任務(wù)即可
#4.ctrl+a+d 平滑的退出screen,但不會終止screen中的任務(wù)祠饺。
注意: 如果使用exit或者ctrl+d(先使用ctrl+c)才算真的關(guān)閉screen窗口
#5.查看當(dāng)前正在運(yùn)行的screen有哪些
[root@localhost ~]# screen -list
There is a screen on:
10667.wget (Detached)
1 Socket in /var/run/screen/S-root.
#6.進(jìn)入正在運(yùn)行的screen
[root@localhost ~]# screen -r
wget
3.進(jìn)程的優(yōu)先級[進(jìn)階]
1.什么優(yōu)先級
- 優(yōu)先級指的是優(yōu)先享受資源道偷,比如排隊(duì)買票時(shí)换途,軍人優(yōu)先忠蝗、老人優(yōu)先戒祠。等等
2.為什么要有系統(tǒng)優(yōu)先級
- 舉個(gè)例子: 海底撈火鍋正常情況下響應(yīng)就特別快,那么當(dāng)節(jié)假日來臨時(shí)人員突增則會導(dǎo)致處理請求特別慢速种,那么假設(shè)我是海底撈VIP客戶(最高優(yōu)先級)馏颂,無論門店多么繁忙,我都不用排隊(duì)棋傍,海底撈人員會直接服務(wù)于我救拉,滿足我的需求。至于沒有VIP的人員(較低優(yōu)先級)則進(jìn)入排隊(duì)等待狀態(tài)瘫拣。(PS: 至于等多久亿絮,那.....)
3.系統(tǒng)中如何給進(jìn)程配置優(yōu)先級?
- 在啟動進(jìn)程時(shí),為不同的進(jìn)程使用不同的調(diào)度策略麸拄。
nice 值越高: 表示優(yōu)先級越低派昧,例如+19,該進(jìn)程容易將CPU 使用量讓給其他進(jìn)程拢切。
nice 值越低: 表示優(yōu)先級越高蒂萎,例如-20,該進(jìn)程更不傾向于讓出CPU淮椰。
1.使用top或ps命令查看進(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
1083 root 20 0 298628 2808 1544 S 0.3 0.1 2:49.28 vmtoolsd
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+
#2.使用ps查看進(jìn)程優(yōu)先級
[root@localhosts ~]# ps axo command,nice |grep sshd|grep -v grep
/usr/sbin/sshd -D 0
sshd: root@pts/2 0
2.nice指定程序的優(yōu)先級黔牵。語法格式 nice -n 優(yōu)先級數(shù)字 進(jìn)程名稱
#1.開啟vim并且指定程序優(yōu)先級為-5
[root@m01 ~]# nice -n -5 vim &
[1] 98417
#2.查看該進(jìn)程的優(yōu)先級情況
[root@localhosts ~]# ps axo pid,command,nice |grep 98417
98417 vim -5
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@m01 ~]# ps axo pid,command,nice |grep 折疊shd
70840 sshd: root@pts/2 0
98002 /usr/sbin/sshd -D 0
#2.調(diào)整sshd主進(jìn)程的優(yōu)先級
[root@localhosts ~]# renice -n -20 98002
98002 (process ID) old priority 0, new priority -20
#3.調(diào)整之后記得退出終端
[root@localhosts ~]# ps axo pid,command,nice |grep 折疊shd
70840 sshd: root@pts/2 0
98002 /usr/sbin/sshd -D -20
[root@localhosts ~]# exit
#4.當(dāng)再次登陸sshd服務(wù)爷肝,會由主進(jìn)程fork子進(jìn)程(那么子進(jìn)程會繼承主進(jìn)程的優(yōu)先級)
[root@localhosts ~]# ps axo pid,command,nice |grep 折疊shd
98002 /usr/sbin/sshd -D -20
98122 sshd: root@pts/0 -20
4.系統(tǒng)平均負(fù)載[進(jìn)階]
每次發(fā)現(xiàn)系統(tǒng)變慢時(shí)猾浦,我們通常做的第一件事陆错,就是執(zhí)行 top 或者 uptime 命令,來了解系統(tǒng)的負(fù)載情況金赦。比如像下面這樣音瓷,我在命令行里輸入了 uptime 命令,系統(tǒng)也隨即給出了結(jié)果夹抗。
[root@localhosts ~]# uptime
04:49:26 up 2 days, 2:33, 2 users, load average: 0.70, 0.04, 0.05
#我們已經(jīng)比較熟悉前面幾列绳慎,它們分別是當(dāng)前時(shí)間、系統(tǒng)運(yùn)行時(shí)間以及正在登錄用戶數(shù)漠烧。
# 而最后三個(gè)數(shù)字呢杏愤,依次則是過去 1 分鐘、5 分鐘已脓、15 分鐘的平均負(fù)載(Load Average)珊楼。
平均負(fù)載案例分析實(shí)戰(zhàn)
下面,我們以三個(gè)示例分別來看這三種情況度液,并用 stress厕宗、mpstat、pidstat 等工具堕担,找出平均負(fù)載升高的根源已慢。
stress 是 Linux 系統(tǒng)壓力測試工具,這里我們用作異常進(jìn)程模擬平均負(fù)載升高的場景霹购。
mpstat 是多核 CPU 性能分析工具佑惠,用來實(shí)時(shí)查看每個(gè) CPU 的性能指標(biāo),以及所有 CPU 的平均指標(biāo)厕鹃。
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@localhosts ~]# stress --cpu 1 --timeout 600
------2.接著,在第二個(gè)終端運(yùn)行 uptime 查看平均負(fù)載的變化情況-----
# 使用watch -d 參數(shù)表示高亮顯示變化的區(qū)域(注意負(fù)載會持續(xù)升高)
[root@m01 ~]# 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@localhosts ~]# 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ù)載會慢慢增加到 1.00漫拭,而從終端三中還可以看到亚兄,正好有一個(gè) CPU 的使用率為 100%,但它的 iowait 只有 0采驻。這說明审胚,平均負(fù)載的升高正是由于 CPU 使用率為 100% 匈勋。那么,到底是哪個(gè)進(jìn)程導(dǎo)致了 CPU 使用率為 100% 呢膳叨?可以使用 pidstat 來查詢
# 間隔 5 秒后輸出一組數(shù)據(jù)
[root@localhosts ~]# 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%。