如何監(jiān)控 Linux 服務器狀態(tài)?
Linux 服務器我們天天打交道,特別是 Linux 工程師更是如此。為了保證服務器的安全與性能,我們經常需要監(jiān)控服務器的一些狀態(tài),以保證工作能順利開展。
本文介紹的幾個命令,不僅僅適用于服務器監(jiān)控,也適用于我們日常情況下的開發(fā)。
1. watch
watch 命令我們的使用頻率很高,它的基本作用是,按照指定頻率重復執(zhí)行某一條指令。使用這個命令,我們可以重復調用一些命令來達到監(jiān)控服務器的作用。
默認情況下,watch 命令的執(zhí)行周期是 2 秒,但我們可以使用 -n 選項來指定運行頻率,比如我們想要每隔 5 秒執(zhí)行 date 命令,可以這么執(zhí)行:
- $ watch -n 5 date
一臺服務器肯定有多人在用,特別是本部門的小伙伴。對于這些小伙伴有沒渾水摸魚,我們可以使用一些命令來監(jiān)控他們。
我們可以每隔 10 秒執(zhí)行 who 命令,來看看都有誰在使用服務器。
- $ 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ā)現系統(tǒng)運行很慢,我們可以調用 uptime 命令來查看系統(tǒng)平均負載情況。
- $ 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
一些關鍵的進程肯定不能掛,否則可能會影響到業(yè)務開展,所以我們可以重復統(tǒng)計服務器中的所有進程數量。
- $ watch -n 5 'ps -ef | wc -l'
- Every 5.0s: ps -ef | wc -l butterfly: Tue Jan 23 16:11:54 2019
- 245
想動態(tài)知道服務器內存使用情況,可以重復執(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
當然不僅僅是這些,我們還可以重復調用很多命令來對服務器一些關鍵參數進行監(jiān)控,
2. top
使用 top 命令我們可以知道系統(tǒng)的很多關鍵參數,而且是動態(tài)更新的。默認情況下,top 監(jiān)控的是系統(tǒng)的整體狀態(tài),如果我們只想知道某個人的使用情況,可以使用 -u 選項來指定這個人。
- $ 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
在這個結果里,你不僅僅可以看到 alvin 這個用戶運行的所有的進程數,也可以看到每個進程所消耗的系統(tǒng)資源(CPU,內存),同時依然可以看到整個系統(tǒng)的關鍵參數。
3. ac
如果你想知道每個用戶登錄服務器所使用的時間,你可以使用 ac 命令。這個命令需要你安裝 acct 包(Debian)或 psacct 包(RHEL,Centos)。
如果我們想知道所有用戶登陸服務器所使用的時間之和,我們可以直接運行 ac 命令,無需任何參數。
- $ ac
- total 1261.72
如果我們想知道各個用戶所使用時間,可以加上 -p 選項。
- $ ac -p
- shark 5.24
- alvin 5.52
- shs 1251.00
- total 1261.76
我們還可以通過加上 -d 選項來查看具體每一天用戶使用服務器時間之和。
- $ 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ān)控系統(tǒng)的運行狀態(tài),本文主要介紹了三個:watch 命令可以讓你重復執(zhí)行某一條命令來監(jiān)控一些參數的變化,top 命令可以查看某個用戶運行的進程數以及消耗的資源,而 ac 命令則可以查看每個用戶使用服務器時間。你經常使用哪個命令呢?
本文授權轉載自公眾號「良許Linux」。良許,世界500強外企Linux開發(fā)工程師,公眾號里分享大量Linux干貨,歡迎關注!