如何監(jiān)控 Linux 服務(wù)器狀態(tài)?
Linux 服務(wù)器我們天天打交道,特別是 Linux 工程師更是如此。為了保證服務(wù)器的安全與性能,我們經(jīng)常需要監(jiān)控服務(wù)器的一些狀態(tài),以保證工作能順利開(kāi)展。
本文介紹的幾個(gè)命令,不僅僅適用于服務(wù)器監(jiān)控,也適用于我們?nèi)粘G闆r下的開(kāi)發(fā)。
1. watch
watch 命令我們的使用頻率很高,它的基本作用是,按照指定頻率重復(fù)執(zhí)行某一條指令。使用這個(gè)命令,我們可以重復(fù)調(diào)用一些命令來(lái)達(dá)到監(jiān)控服務(wù)器的作用。
默認(rèn)情況下,watch 命令的執(zhí)行周期是 2 秒,但我們可以使用 -n 選項(xiàng)來(lái)指定運(yùn)行頻率,比如我們想要每隔 5 秒執(zhí)行 date 命令,可以這么執(zhí)行:
- $ watch -n 5 date
 
一臺(tái)服務(wù)器肯定有多人在用,特別是本部門的小伙伴。對(duì)于這些小伙伴有沒(méi)渾水摸魚,我們可以使用一些命令來(lái)監(jiān)控他們。
我們可以每隔 10 秒執(zhí)行 who 命令,來(lái)看看都有誰(shuí)在使用服務(wù)器。
- $ watch -n 10 who
 - Every 10.0s: who butterfly: Tue Jan 23 16:02:03 2019
 - shs :0 2019-01-23 09:45 (:0)
 - dory pts/0 2019-01-23 15:50 (192.168.0.5)
 - alvin pts/1 2019-01-23 16:01 (192.168.0.15)
 - shark pts/3 2019-01-23 11:11 (192.168.0.27)
 
如果發(fā)現(xiàn)系統(tǒng)運(yùn)行很慢,我們可以調(diào)用 uptime 命令來(lái)查看系統(tǒng)平均負(fù)載情況。
- $ watch uptime
 - Every 2.0s: uptime butterfly: Tue Jan 23 16:25:48 2019
 - 16:25:48 up 22 days, 4:38, 3 users, load average: 1.15, 0.89, 1.02
 
一些關(guān)鍵的進(jìn)程肯定不能掛,否則可能會(huì)影響到業(yè)務(wù)開(kāi)展,所以我們可以重復(fù)統(tǒng)計(jì)服務(wù)器中的所有進(jìn)程數(shù)量。
- $ watch -n 5 'ps -ef | wc -l'
 - Every 5.0s: ps -ef | wc -l butterfly: Tue Jan 23 16:11:54 2019
 - 245
 
想動(dòng)態(tài)知道服務(wù)器內(nèi)存使用情況,可以重復(fù)執(zhí)行 free 命令。
- $ watch -n 5 free -m
 - Every 5.0s: free -m butterfly: Tue Jan 23 16:34:09 2019
 - total used free shared buff/cache available
 - Mem: 5959 776 3276 12 1906 4878
 - Swap: 2047 0 2047
 
當(dāng)然不僅僅是這些,我們還可以重復(fù)調(diào)用很多命令來(lái)對(duì)服務(wù)器一些關(guān)鍵參數(shù)進(jìn)行監(jiān)控,
2. top
使用 top 命令我們可以知道系統(tǒng)的很多關(guān)鍵參數(shù),而且是動(dòng)態(tài)更新的。默認(rèn)情況下,top 監(jiān)控的是系統(tǒng)的整體狀態(tài),如果我們只想知道某個(gè)人的使用情況,可以使用 -u 選項(xiàng)來(lái)指定這個(gè)人。
- $ top -u alvin
 - top - 16:14:33 up 2 days, 4:27, 3 users, load average: 0.00, 0.01, 0.02
 - Tasks: 199 total, 1 running, 198 sleeping, 0 stopped, 0 zombie
 - %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
 - MiB Mem : 5959.4 total, 3277.3 free, 776.4 used, 1905.8 buff/cache
 - MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4878.4 avail Mem
 - PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
 - 23026 alvin 20 0 46340 7820 6504 S 0.0 0.1 0:00.05 systemd
 - 23033 alvin 20 0 149660 3140 72 S 0.0 0.1 0:00.00 (sd-pam)
 - 23125 alvin 20 0 63396 5100 4092 S 0.0 0.1 0:00.00 sshd
 - 23128 alvin 20 0 16836 5636 4284 S 0.0 0.1 0:00.03 zsh
 
在這個(gè)結(jié)果里,你不僅僅可以看到 alvin 這個(gè)用戶運(yùn)行的所有的進(jìn)程數(shù),也可以看到每個(gè)進(jìn)程所消耗的系統(tǒng)資源(CPU,內(nèi)存),同時(shí)依然可以看到整個(gè)系統(tǒng)的關(guān)鍵參數(shù)。
3. ac
如果你想知道每個(gè)用戶登錄服務(wù)器所使用的時(shí)間,你可以使用 ac 命令。這個(gè)命令需要你安裝 acct 包(Debian)或 psacct 包(RHEL,Centos)。
如果我們想知道所有用戶登陸服務(wù)器所使用的時(shí)間之和,我們可以直接運(yùn)行 ac 命令,無(wú)需任何參數(shù)。
- $ ac
 - total 1261.72
 
如果我們想知道各個(gè)用戶所使用時(shí)間,可以加上 -p 選項(xiàng)。
- $ ac -p
 - shark 5.24
 - alvin 5.52
 - shs 1251.00
 - total 1261.76
 
我們還可以通過(guò)加上 -d 選項(xiàng)來(lái)查看具體每一天用戶使用服務(wù)器時(shí)間之和。
- $ ac -d | tail -10
 - Jan 11 total 0.05
 - Jan 12 total 1.36
 - Jan 13 total 16.39
 - Jan 15 total 55.33
 - Jan 16 total 38.02
 - Jan 17 total 28.51
 - Jan 19 total 48.66
 - Jan 20 total 1.37
 - Jan 22 total 23.48
 - Today total 9.83
 
小結(jié)
我們可以使用很多命令來(lái)監(jiān)控系統(tǒng)的運(yùn)行狀態(tài),本文主要介紹了三個(gè):watch 命令可以讓你重復(fù)執(zhí)行某一條命令來(lái)監(jiān)控一些參數(shù)的變化,top 命令可以查看某個(gè)用戶運(yùn)行的進(jìn)程數(shù)以及消耗的資源,而 ac 命令則可以查看每個(gè)用戶使用服務(wù)器時(shí)間。你經(jīng)常使用哪個(gè)命令呢?
本文授權(quán)轉(zhuǎn)載自公眾號(hào)「良許Linux」。良許,世界500強(qiáng)外企Linux開(kāi)發(fā)工程師,公眾號(hào)里分享大量Linux干貨,歡迎關(guān)注!
















 
 
 
 
 
 
 