管理后臺(tái)進(jìn)程
1.什么是后臺(tái)進(jìn)程:通常進(jìn)程會(huì)在終端前臺(tái)運(yùn)行,一旦關(guān)閉終端键菱,進(jìn)程也會(huì)隨著結(jié)束纱耻,那么此時(shí)我們就希望進(jìn)程能在后臺(tái)進(jìn)行弄喘,就是將在前臺(tái)運(yùn)行的進(jìn)程放入后臺(tái)運(yùn)行蘑志,這樣即使我們關(guān)閉了終端也不影響進(jìn)程的正常運(yùn)行
2.我們?yōu)槭裁匆獙⑦M(jìn)程放入后臺(tái)運(yùn)行
比如:我們此前在國(guó)內(nèi)服務(wù)器往國(guó)外服務(wù)器傳輸大文件時(shí)急但,由于網(wǎng)絡(luò)的問(wèn)題需要傳輸很久波桩,如果在傳輸?shù)倪^(guò)程中出現(xiàn)網(wǎng)絡(luò)抖動(dòng)或者不小心關(guān)閉了終端則會(huì)導(dǎo)致傳輸失敗,如果能將傳輸?shù)倪M(jìn)程放入后臺(tái)储玫,是不是就能解決此類(lèi)問(wèn)題了撒穷。
3.使用什么工具將進(jìn)程放入后臺(tái)
早期的時(shí)候大家都選擇使用&符號(hào)將進(jìn)程放入后臺(tái)裆熙,然后在使用jobs入录、bg喻括、fg等方式查看進(jìn)程狀態(tài)唬血,但太麻煩了唤崭。也不直觀谢肾,所以我們推薦使用screen。
安裝screen?
[root@oldboy ~]# yum install screen -y
#2.開(kāi)啟一個(gè)screen窗口,指定名稱(chēng)[root@oldboy ~]# screen -S wget_mysql
#3.在creen 窗口中執(zhí)行任務(wù)即可
#4.平滑的退出screen 但不會(huì)終止這個(gè)任務(wù)
ctrl+a+d? 是掛起在后臺(tái)執(zhí)行冕杠,
要想真正的退出程序 ctrl+c? 終止程序 然后 exit 退出? 后臺(tái)就沒(méi)有進(jìn)程了
5.查看當(dāng)前正在運(yùn)行的screen有哪些?
[root@oldboy ~]# screen -listThere is a screen on:22058.wget_mysql? ? (Detached)1 Socket in /var/run/screen/S-root.
6.進(jìn)入正在運(yùn)行的screen? 可以是進(jìn)程編號(hào) 也可以是名字
[root@oldboy ~]# screen -r wget_mysql[root@oldboy ~]# screen -r 22058
5.進(jìn)程的優(yōu)先級(jí)
1.什么優(yōu)先級(jí)
優(yōu)先級(jí)指的是優(yōu)先享受資源分预,比如排隊(duì)買(mǎi)票時(shí)薪捍,軍人優(yōu)先笼痹、老人優(yōu)先配喳。等等
2.為什么要與系統(tǒng)優(yōu)先級(jí)
舉個(gè)例子: 海底撈火鍋正常情況下響應(yīng)就特別快,那么當(dāng)節(jié)假日來(lái)臨時(shí)人員突增則會(huì)導(dǎo)致處理請(qǐng)求特別慢凳干,那么假設(shè)我是海底撈VIP客戶(hù)(最高優(yōu)先級(jí))晴裹,無(wú)論門(mén)店多么繁忙,我都不用排隊(duì)救赐,海底撈人員會(huì)直接服務(wù)于我涧团,滿(mǎn)足我的需求。至于沒(méi)有VIP的人員(較低優(yōu)先級(jí))則進(jìn)入排隊(duì)等待狀態(tài)经磅。(PS: 至于等多久少欺,那.....)
3.系統(tǒng)中如何有系統(tǒng)優(yōu)先級(jí)
在啟動(dòng)進(jìn)程時(shí),為不同的進(jìn)程使用不同的調(diào)度策略馋贤。nice 值越高: 表示優(yōu)先級(jí)越低,例如+19仿滔,該進(jìn)程容易將CPU 使用量讓給其他進(jìn)程腰埂。nice 值越低: 表示優(yōu)先級(jí)越高牺荠,例如-20杈曲,該進(jìn)程更不傾向于讓出CPU。
1)使用top或ps命令查看進(jìn)程的有限級(jí)
#1.使用top可以查看nice優(yōu)先級(jí)。? NI: 實(shí)際nice級(jí)別间唉,默認(rèn)是0印叁。 PR: 顯示nice值,-20映射到0,+19映射到39PID? USER? ? ? PR? ? ? NI? ? VIRT? ? ? ? RES? ? SHR S? %CPU? ? %MEM? ? TIME+ COMMAND1083 root? ? ? ? 20? ? ? ? 0? ? 298628? 2808? 1544 S? 0.3? ? ? ? ? 0.1? ? ? ? 2:49.28 vmtoolsd5? ? ? root? ? ? 0 -20? ? 0? ? ? 0? ? ? ? ? ? ? ? ? ? ? ? ? 0? ? ? S? 0.0? ? ? ? 0.0? ? ? ? 0:00.00 kworker/0:+
#2.使用ps查看進(jìn)程優(yōu)先級(jí)[root@m01 ~]# ps axo command,nice |grep sshd|grep -v grep/usr/sbin/sshd -D? ? ? ? ? ? 0sshd: root@pts/2? ? ? ? ? ? 0
2.nice指定程序的優(yōu)先級(jí) 語(yǔ)法格式nice -n 優(yōu)先級(jí)數(shù)字 進(jìn)程名稱(chēng)
1.開(kāi)啟vim并且指定程序優(yōu)先級(jí)為-5[root@m01 ~]# nice -n -5 vim &? ? &后臺(tái)執(zhí)行[1] 98417
#2.查看該進(jìn)程的優(yōu)先級(jí)情況[root@m01 ~]# ps axo pid,command,nice |grep 98417 98417 vim? ? ? ? ? ? ? ? ? ? ? ? -5
#3.renice命令修改一個(gè)正在運(yùn)行的進(jìn)程優(yōu)先級(jí)细燎。語(yǔ)法格式 renice -n 優(yōu)先級(jí)數(shù)字 進(jìn)程pid
#1.查看sshd進(jìn)程當(dāng)前的優(yōu)先級(jí)狀態(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)先級(jí)[root@m01 ~]# renice -n -20 9800298002 (process ID) old priority 0, new priority -20
#3.調(diào)整之后記得退出終端[root@m01 ~]# ps axo pid,command,nice |grep 折疊shd 70840 sshd: root@pts/2? ? ? ? ? ? ? 0 98002 /usr/sbin/sshd -D? ? ? ? ? -20[root@m01 ~]# exit
#4.當(dāng)再次登陸sshd服務(wù)璧瞬,會(huì)由主進(jìn)程fork子進(jìn)程(那么子進(jìn)程會(huì)繼承主進(jìn)程的優(yōu)先級(jí))[root@m01 ~]# ps axo pid,command,nice |grep 折疊shd 98002 /usr/sbin/sshd -D? ? ? ? ? -20 98122 sshd: root@pts/0? ? ? ? ? ? -20
6.系統(tǒng)平均負(fù)載[進(jìn)階]
每次發(fā)現(xiàn)系統(tǒng)變慢時(shí)档冬,我們通常做的第一件事,就是執(zhí)行 top 或者 uptime 命令,來(lái)了解系統(tǒng)的負(fù)載情況玫氢。比如像下面這樣生逸,我在命令行里輸入了 uptime 命令,系統(tǒng)也隨即給出了結(jié)果截酷。
[root@m01 ~]# uptime04: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í)間以及正在登錄用戶(hù)數(shù)骑丸。
而最后三個(gè)數(shù)字呢菊碟,依次則是過(guò)去 1 分鐘、5 分鐘、15 分鐘的平均負(fù)載(Load Average)队丝。
1.什么是平均負(fù)載平均負(fù)載不就是單位時(shí)間內(nèi)的 CPU 使用率嗎膘盖?上面的 0.70软棺,就代表 CPU 使用率是 70%稀火。其實(shí)上并.....那到底如何理解平均負(fù)載: 平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù)粉渠,也就是平均活躍進(jìn)程數(shù)雕沉,PS: 平均負(fù)載與 CPU 使用率并沒(méi)有直接關(guān)系倔叼。
3.那平均負(fù)載為多少時(shí)合理最理想的狀態(tài)是每個(gè) CPU 上都剛好運(yùn)行著一個(gè)進(jìn)程碘耳,這樣每個(gè) CPU 都得到了充分利用。所以在評(píng)判平均負(fù)載時(shí)愉阎,首先你要知道系統(tǒng)有幾個(gè) CPU咐旧,這可以通過(guò) top 命令獲取铣墨,或grep 'model name' /proc/cpuinfo
例1、假設(shè)現(xiàn)在在 4、2媒惕、1核的CPU上尊搬,如果平均負(fù)載為 2 時(shí),意味著什么呢舞肆?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Q1.在4 個(gè) CPU 的系統(tǒng)上,意味著 CPU 有 50% 的空閑博杖。Q2.在2 個(gè) CPU 的系統(tǒng)上椿胯,意味著所有的 CPU 都剛好被完全占用。Q3.而1 個(gè) CPU 的系統(tǒng)上剃根,則意味著有一半的進(jìn)程競(jìng)爭(zhēng)不到 CPU哩盲。
.平均負(fù)載與 CPU 使用率有什么關(guān)系在實(shí)際工作中,我們經(jīng)常容易把平均負(fù)載和 CPU 使用率混淆,所以在這里廉油,我也做一個(gè)區(qū)分镣丑。可能你會(huì)疑惑娱两,既然平均負(fù)載代表的是活躍進(jìn)程數(shù)莺匠,那平均負(fù)載高了,不就意味著 CPU 使用率高嗎十兢?我們還是要回到平均負(fù)載的含義上來(lái)趣竣,平均負(fù)載是指單位時(shí)間內(nèi),處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的進(jìn)程數(shù)旱物。所以遥缕,它不僅包括了正在使用 CPU 的進(jìn)程,還包括等待 CPU 和等待 I/O 的進(jìn)程宵呛。*
而 CPU 使用率单匣,是單位時(shí)間內(nèi) CPU 繁忙情況的統(tǒng)計(jì),跟平均負(fù)載并不一定完全對(duì)應(yīng)宝穗。比如:CPU 密集型進(jìn)程户秤,使用大量 CPU 會(huì)導(dǎo)致平均負(fù)載升高,此時(shí)這兩者是一致的逮矛;I/O 密集型進(jìn)程鸡号,等待 I/O 也會(huì)導(dǎo)致平均負(fù)載升高,但 CPU 使用率不一定很高须鼎;大量等待 CPU 的進(jìn)程調(diào)度也會(huì)導(dǎo)致平均負(fù)載升高鲸伴,此時(shí)的 CPU 使用率也會(huì)比較高。