如何監控 Linux 服務器狀態?

Linux 服務器咱們每天打交道,特別是 Linux 工程師更是如此。爲了保證服務器的安全與性能,咱們常常須要監控服務器的一些狀態,以保證工做能順利開展。安全

本文介紹的幾個命令,不單單適用於服務器監控,也適用於咱們平常狀況下的開發。bash

1. watch

watch 命令咱們的使用頻率很高,它的基本做用是,按照指定頻率重複執行某一條指令。使用這個命令,咱們能夠重複調用一些命令來達到監控服務器的做用。服務器

默認狀況下,watch 命令的執行週期是 2 秒,但咱們可使用 -n 選項來指定運行頻率,好比咱們想要每隔 5 秒執行 date 命令,能夠這麼執行:ssh

$ watch -n 5 date複製代碼

一臺服務器確定有多人在用,特別是本部門的小夥伴。對於這些小夥伴有沒渾水摸魚,咱們可使用一些命令來監控他們。性能

咱們能夠每隔 10 秒執行 who 命令,來看看都有誰在使用服務器。spa

$ 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)複製代碼

若是發現系統運行很慢,咱們能夠調用 uptime 命令來查看系統平均負載狀況。code

$ 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複製代碼

一些關鍵的進程確定不能掛,不然可能會影響到業務開展,因此咱們能夠重複統計服務器中的全部進程數量。cdn

$ watch -n 5 'ps -ef | wc -l'
Every 5.0s: ps -ef | wc -l                   butterfly: Tue Jan 23 16:11:54 2019
​
245複製代碼

想動態知道服務器內存使用狀況,能夠重複執行 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複製代碼

固然不單單是這些,咱們還能夠重複調用不少命令來對服務器一些關鍵參數進行監控,內存

2. top

使用 top 命令咱們能夠知道系統的不少關鍵參數,並且是動態更新的。默認狀況下,top 監控的是系統的總體狀態,若是咱們只想知道某我的的使用狀況,可使用 -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 這個用戶運行的全部的進程數,也能夠看到每一個進程所消耗的系統資源(CPU,內存),同時依然能夠看到整個系統的關鍵參數。

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複製代碼

小結

咱們可使用不少命令來監控系統的運行狀態,本文主要介紹了三個:watch 命令可讓你重複執行某一條命令來監控一些參數的變化,top 命令能夠查看某個用戶運行的進程數以及消耗的資源,而 ac 命令則能夠查看每一個用戶使用服務器時間。你常常使用哪一個命令呢?歡迎留言討論!

碼字不易,若是您以爲有幫助,麻煩點個贊再走唄~

-----------------

我是良許,世界500強外企 Linux 開發工程師,專業生產 Linux 乾貨。歡迎關注個人公衆號「良許Linux」,回覆「1024」獲取最新最全的技術資料,回覆「入羣」進入高手如雲技術交流羣。

相關文章
相關標籤/搜索