1据忘、管理進(jìn)程狀態(tài)
當(dāng)程序運行為進(jìn)程后鹦牛,如果希望停止進(jìn)程,此時可以使用linux的kill命令對進(jìn)程發(fā)送關(guān)閉信號勇吊,還有killall pkill命令
(1)使用kill-l列出系統(tǒng)所支持的信號
[root@yangdan ~]# 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+1247) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-1352) 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
數(shù)字 | 信號意義 | 信號翻譯 |
---|---|---|
1 | SIGHUP | 通常用來重新加載配至文件 |
9 | SIGKLL | 強制殺死進(jìn)程 |
15 | SIGTERM | 終止進(jìn)程曼追,默認(rèn)kill使用該信號 |
(2)使用kill命令殺死指定PID的進(jìn)程
1、給vsdtpd 進(jìn)程發(fā)送信號1汉规,15
[root@yangdan ~]# yum install vsfpd -y
[root@yangdan ~]# systemctl start vsftpd
[root@yangdan ~]# ps aux |grep vsftpd
root 8117 0.0 0.1 53276 576 ? Ss 16:39 0:0 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 8119 0.0 0.2 112708 984 pts/0 S+ 16:40 0:0 grep --color=auto vsftpd
2礼殊、發(fā)送重載信號,例如vsftpd 的配置文件發(fā)生改變针史,希望重新加載
[root@yangdan ~]# kill -1 8117
[root@yangdan ~]# ps aux |grep vsftpd
root 8117 0.0 0.1 53276 752 ? Ss 16:39 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 8122 0.0 0.2 112708 988 pts/0 R+ 16:42 0:00 grep --color=auto vsftpd
3晶伦、發(fā)送停止信號,當(dāng)然vsftpd 服務(wù)有停止的腳本 systemctl stop vsftpd
[root@yangdan ~]# kill 8117
[root@yangdan ~]# ps aux |grep vsftpd
root 8125 0.0 0.2 112708 988 pts/0 R+ 16:46 0:00 grep --color=auto vsftpd
[root@yangdan ~]# systemctl start vsftpd
[root@yangdan ~]# ps aux |grep vsftpd
root 8133 0.0 0.1 53276 576 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 8135 0.0 0.2 112708 988 pts/0 R+ 16:47 0:00 grep --color=auto vsftpd
4啄枕、發(fā)送強制停止信號婚陪,當(dāng)無法停止服務(wù)時,可強制終止信號
[root@yangdan ~]# kill -9 8117
(3)linux系統(tǒng)中的killall pkill命令用于殺死指定名字的進(jìn)程频祝∶诓危可以使用kill命令殺死指定進(jìn)程PID的進(jìn)程脆淹,要找到需要殺死的進(jìn)程,然后使用ps命令配合grep來查找進(jìn)程沽一。
1盖溺、通過服務(wù)名稱殺掉進(jìn)程
[root@yangdan ~]# ps aux|grep nginx
root 8153 0.0 0.2 112708 988 pts/0 R+ 17:01 0:00 grep --color=auto nginx
[root@yangdan ~]# systemctl start nginx
[root@yangdan ~]# pkill nginx
[root@yangdan ~]# killall nginx
2、使用pkill踢出從遠(yuǎn)程登錄到本機的用戶铣缠,終止pts/0上所有進(jìn)程烘嘱,并且bash也結(jié)束(用戶被強制退出)
[root@yangdan ~]# pkill -9 -t pts/0
2、管理后臺進(jìn)程
(1)什么是后臺進(jìn)程
通常進(jìn)程都會在終端前臺運行攘残,一旦關(guān)閉終端拙友,進(jìn)程也隨著結(jié)束,此時就希望進(jìn)程能在后臺運行歼郭,將在前臺的進(jìn)程放入后臺運行,可以及時關(guān)閉終端也不影響進(jìn)程的正常運行辐棒。
(2)為什么將進(jìn)程放入后臺運行
如:我們此前在國內(nèi)服務(wù)器傳輸大文件時病曾,由于網(wǎng)絡(luò)的問題需要傳輸很久,如果在傳輸?shù)倪^程中出現(xiàn)網(wǎng)絡(luò)抖動或不小心關(guān)閉終端則會導(dǎo)致傳輸失敗漾根,如果將傳輸進(jìn)程放入后臺泰涂,就不會出現(xiàn)這樣的問題。
(3)使用什么工具將進(jìn)程放入后臺
之前都選擇使用&符號經(jīng)進(jìn)程放入后臺辐怕,然后使用jobs逼蒙、bg、fg等飯方式臣氖瑁看進(jìn)程狀態(tài)是牢,這種方式不太好,最好使用screen
(1)jobs陕截、bg驳棱、fg的使用(不推薦)
[root@yangdan ~]# sleep 3000 & // 運行程序(時),讓其在后臺執(zhí)行
[root@yangdan ~]# sleep 4000 //^Z农曲,將前臺的程序掛起(暫停)到后臺
[2]+ stopoed sleep 400
[root@yangdan ~]# ps aux |grep sleep
[root@yangdan ~]# jobs //查看后臺作業(yè)
[1]- Running sleep 3000 &
[2]+ Stopped sleep 4000
[root@yangdan ~]# bg %2 //讓作業(yè)2放入后臺
[root@yangdan ~]# fg %1 //將作業(yè)1調(diào)回到前臺
[root@yangdan ~]# kill %1 //kill 1,終止 PID 為 1 的進(jìn)程
[root@yangdan ~]# (while :;do data; sleep 2; done) & //進(jìn)程在后臺運行社搅,但輸出依然在當(dāng)前終端
[root@yangdang ~]# (while :;do data; sleep 2; done) &>/dev/null &
(2)screen的使用(推薦使用,生產(chǎn)必用)
1乳规、安裝
[root@yangdan ~]# yum install screen -y
2形葬、開啟一個screen窗口,指定名稱
[root@yangdan ~]# screen -S wget_mysql
3暮的、在screen窗口執(zhí)行任務(wù)即可
4件甥、平滑的退出screen,但不會終止screen中的任務(wù)脓规。注意:如果使用exit 才真的關(guān)閉screen窗口,所以要使用ctrl+a+d 關(guān)閉會話
screen -S 表示指定開啟的名稱
5翩伪、查看當(dāng)前正在運行的zcreen有哪些
[root@yangdan ~]# screen -list 查看后臺運行的程序
There is a screen on:
8217.wget_mysql (Attached)
1 Socket in /var/run/screen/S-root.
6、進(jìn)入正在運行的screen
[root@yangdan ~]# screen -r wget_mysql
There is a screen on:
8217.wget_mysql (Attached)
There is no screen to be resumed matching wget_mysql.
[root@yangdan ~]# screen -r 8217
There is a screen on:
8217.wget_mysql (Attached)
There is no screen to be resumed matching 8217.
3谈息、進(jìn)程的優(yōu)先級 [進(jìn)階]
(1)什么是優(yōu)先級
優(yōu)先級是指優(yōu)先享受資源缘屹,如:老人優(yōu)先、小孩優(yōu)先等
(2)為什么有系統(tǒng)優(yōu)先級
舉例:去游樂園玩摩天輪侠仇,游樂園正常情況下是不用排隊的轻姿,當(dāng)節(jié)假日來臨時大人、小孩就比正常情況下的人要多好多則會導(dǎo)致響應(yīng)很慢逻炊,假設(shè)我是游樂園的VIP(最高優(yōu)先者)互亮,無論有多少人在排隊,我是優(yōu)先去玩摩天輪的人余素,至于沒有花錢的人員(較低優(yōu)先級)則進(jìn)入等待狀態(tài)豹休。
(3)系統(tǒng)中如何給進(jìn)程配置優(yōu)先級
在啟動進(jìn)程時,為不同的進(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:實際nice級別佑淀,默認(rèn)0留美。 PR:顯示nice值,-20映射到0.+19映射到39
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
560 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 xfs-log/sdc2
783 root 20 0 225724 4252 2776 S 0.0 0.9 0:00.17 abrt-watch-log
2伸刃、使用ps查看進(jìn)程優(yōu)先級
[root@yangdan ~]# ps axo command,nice |grep sshd |grep -v grep
/usr/sbin/sshd -D 0
sshd: root@pts/0 0
2)nice指定程序的優(yōu)先級谎砾。格式:nice -n 優(yōu)先級數(shù)字 進(jìn)程名稱
1、開啟vim并且指定程序優(yōu)先級為-5
[root@yangdan ~]# nice -n -5 vim &
[1] 8296
2奕枝、查看該進(jìn)程的優(yōu)先級情況
[root@yangdan ~]# ps axo pid,command,nice |grep 8296
8296 vim -5
3)renice命令修改一個正在運行的進(jìn)程優(yōu)先級棺榔。格式:renice -n 優(yōu)先級數(shù)字 進(jìn)程pid
1、查看sshd進(jìn)程當(dāng)前的優(yōu)先級狀態(tài)
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
1444 /usr/sbin/sshd -D 0
8180 sshd: root@pts/0 0
2隘道、調(diào)整sshd主進(jìn)程的優(yōu)先級
[root@yangdan ~]# renice -n -20 1444
1444 (process ID) old priority 0, new priority -20
3症歇、調(diào)整之后記得退出終端
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
1444 /usr/sbin/sshd -D -20
8180 sshd: root@pts/0 0
[root@yangdan ~]# exit
4、當(dāng)再次登錄sshd服務(wù)谭梗,會有主進(jìn)程fork子進(jìn)程(那么子進(jìn)程會繼承主進(jìn)程的優(yōu)先級)
[root@yangdan ~]# ps axo pid,command,nice |grep sshd
1444 /usr/sbin/sshd -D -20
8180 sshd: root@pts/0 -20
4忘晤、系統(tǒng)平均負(fù)載 [進(jìn)階]
發(fā)現(xiàn)系統(tǒng)變慢時,第一件事就是執(zhí)行top或uptime命令激捏,了解系統(tǒng)的負(fù)載情況
[root@yangdan ~]# uptime
19:02:01 up 10:44, 2 users, load average: 0.00, 0.00, 0.03
#熟悉前面幾列设塔,分別為當(dāng)前時間、系統(tǒng)云行時間远舅、正在登錄用戶數(shù)闰蛔。
#最后三個數(shù)字痕钢,依次為過去 1 分鐘、5 分鐘序六、15 分鐘的平均負(fù)載(Load Average)
(1)什么是平均負(fù)載
平均負(fù)載不就是單位時間內(nèi)任连,系統(tǒng)處于可運行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù)例诀,平均負(fù)載與CPU使用率并沒有直接關(guān)系随抠。
(2)可運行狀態(tài)和不可中斷狀態(tài)
1)可運行狀態(tài)進(jìn)程,是指正在使用CPU或者正在等待CPU的進(jìn)程繁涂,也就是ps命令看到處于R狀態(tài)的進(jìn)程
2)不可中斷進(jìn)程拱她,系統(tǒng)中最常見的是等待硬件設(shè)備的I/O響應(yīng),也就是ps命令中看到的D狀態(tài)的進(jìn)程
當(dāng)一個進(jìn)程向磁盤讀寫數(shù)據(jù)時扔罪,為了保證數(shù)據(jù)的一致性秉沼,在得到磁盤回復(fù)前,是不能被其他進(jìn)程打斷矿酵,這個時候就處于不可中斷狀態(tài)氧猬。如果進(jìn)程被打斷了,就容易出現(xiàn)磁盤數(shù)據(jù)與進(jìn)城數(shù)據(jù)不一致的問題坏瘩。
所以,不可中斷狀態(tài)實際上是系統(tǒng)對進(jìn)程和硬件設(shè)備的一種保護(hù)機制漠魏。因此可以簡單地理解為倔矾,平均負(fù)載就是單位時間內(nèi)的活躍進(jìn)程數(shù)
(3)平均負(fù)載為多少時合理
理性狀態(tài)是每個CPU剛好運行著一個進(jìn)程,每個CPU都得到了充分利用柱锹,在評判平均負(fù)載時哪自,首先通過top命令獲取,或使用grep 'model name' /etc/cpuinfo
例:1)如果在4個CPU的系統(tǒng)上禁熏,平均負(fù)載為2時壤巷,意味著CPU有50%的空閑
2)如果在2個CPU的系統(tǒng)上,平局負(fù)載為2時瞧毙,意味著所有的CPU都剛好占滿
3)如果在1個CPU的系統(tǒng)上胧华,平均負(fù)載為2時,意味著有一半的進(jìn)程競爭不到CPU
平均負(fù)載有三個值宙彪,應(yīng)該都關(guān)注
這三個只就像是天氣一樣矩动,如果只看晚上天氣,感覺在過冬天释漆,如果結(jié)合早上悲没、中午、晚上三個時間點的溫度看男图,就可以了解的更全面示姿,所以應(yīng)該三個都關(guān)注
(1)如果三個值基本相同的話甜橱,那就說明平均負(fù)載是正常的
(2)1 分鐘小于15 分鐘的值,說明平均負(fù)載在減少栈戳,15 分鐘就有很大的負(fù)載
(3)1 分鐘大于15 分鐘的值岂傲,說明1 分鐘負(fù)載在增加,所以需要持續(xù)觀察
(4)實際環(huán)境生產(chǎn)環(huán)境中荧琼,平均負(fù)載高時譬胎,需要重點關(guān)注
當(dāng)平均負(fù)載高于70%時,應(yīng)該分析排查負(fù)載高的問題命锄,一旦負(fù)載過高堰乔,有可能導(dǎo)致進(jìn)程響應(yīng)慢,影響服務(wù)的正常功能
最好的辦法就是脐恩,把系統(tǒng)的平均負(fù)載監(jiān)控起來镐侯,然后根據(jù)更多的歷史數(shù)據(jù),判斷負(fù)載變化的趨勢驶冒,發(fā)現(xiàn)負(fù)載有明顯升高時苟翻,在做分析調(diào)查
(5)平均負(fù)載與CPU使用率的關(guān)系
平均負(fù)載是指單位時間內(nèi),處于可運行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù)骗污,所以崇猫,他不僅包括正在使用的CPU進(jìn)程,還包括等待CPU和等待I/O的進(jìn)程
而CPU使用率需忿,是單位時間內(nèi)CPU繁忙情況下的統(tǒng)計诅炉,跟平均負(fù)載不一定完全對應(yīng)
CPU密集型進(jìn)程,使用大量CPU會導(dǎo)致平均負(fù)載升高屋厘,兩者是一致的
I/O密集型進(jìn)程涕烧,等待I/O也會導(dǎo)致平均負(fù)載過高,但CPU使用率不一定高
大量CPU的進(jìn)程調(diào)度也會導(dǎo)致平均負(fù)載過高汗洒,此時的CPU使用率也會·較高