二十九、w查看系統負載、vmstat命令、top命令、sar命令、nload命令
一、使用w查看系統負載
# w
06:10:09 up 6:20, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.93.1 23:50 1.00s 0.22s 0.02s w
第1行從左至右顯示的信息:當前系統時間 up 系統運行時間,登錄用戶數,平均負載。
遠程登錄為pts,虛擬機內登錄為tty,Linux登錄章節有詳細介紹。
pts顯示了遠程的IP。
LOGIN:登錄的時間
IDLE:空閑了多長時間。
load average: 0.00, 0.01, 0.05
load average:系統負載。
第1個數值表示1分鐘內系統的平均負載值,第2個數值表示5分鐘內系統的平均負載值,第3個數值表示15分鐘內系統的平均負載值。著重看第1個值,它表示單位時間段內使用CPU的活動進程數(在這裏其實就是1分鐘內),值越大說明服務器壓力越大。一般情況下,這個值只要不超過服務器的CPU數量就沒關系。若服務器CPU數量為8,那麽值小於8就說明當前服務器沒壓力,8就是理想狀態。
負載理想的狀態就是自己的CPU數量的數字,當前我的有1顆CPU,那麽數字為1時就是理想狀態,不閑也無壓力。
查看服務器有多少個CPU,方法:
# cat /proc/cpuinfo
processor : 0 看第1行的這個值,0代表1顆,1代表2顆,此處為邏輯CPU,並非物理CPU。最大數字是7,代表8顆CPU。
# uptime
06:54:20 up 7:04, 1 user, load average: 0.00, 0.01, 0.05
和w命令的第一行一模一樣。
當系統負載過大時,無法判斷具體哪裏有壓力。
二、vmstat命令
vmstat:監控系統的狀態。
判斷壓力的問題源(CPU、內存、磁盤等),使用vmstat命令。
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 1543344 2076 182424 0 0 3 0 25 22 0 0 100 0 0
通常用法是: # vmstat 1 每1秒顯示1次,動態顯示。
或者# vmstat 1 5 每秒顯示1次,顯示5次自動結束。
打印的結果分為6個部分:procs、memory、swap、io、system、cpu。
重點關註:r、b、si、so、bi、bo。
procs:顯示進程的相關信息。
r(run):表示運行或等待CPU時間片的進程數。某一時刻1個CPU只能有1個進程占用,其他進程排隊,等待CPU時間資源的進程依然是運行狀態。該數值若長期大於服務器CPU的個數,則說明CPU資源不夠用了。
b(block):進程被CPU以外的資源阻斷了。等待資源的進程數,這個資源指的是I/O,內存等。舉例,當磁盤讀寫很頻繁時,寫數據就會很慢,此時CPU運算很快就結束了,但進程需把計算的結果寫入磁盤,這樣進程的任務才算完成,那此時該進程只能慢慢等待磁盤,這個進程就是b狀態。該數值長時間大於1,則需要關註了。
menory:顯示內存的相關信息。
swpd:表示切換到交換分區中的內存數量,單位為KB。(若持續變動,說明內存和swap分區在頻繁交換數據,說明內存不夠了,為0正常)
free:表示當前空閑的內存數量,單位為KB。
buff:表示(即將寫入磁盤的)緩沖大小,單位為KB。
cache:表示(從磁盤中讀取的)緩存大小,單位為KB。
swap:顯示內存的交換情況。
(i:in)si:表示由交換區寫入內存的數據庫,單位為KB。關聯:swpd
(o:out)so:表示由內存寫入交換區的數據量,單位為KB。關聯:swpd
io:顯示磁盤的使用情況。和磁盤有關聯,數字大代表在頻繁讀寫,太多會造成b列增加。
bi:表示從塊設備讀取數據的量(讀磁盤),單位為KB。
bo:表示從塊設備寫入數據的量(寫磁盤),單位為KB。
system:顯示采集間隔內發生的中斷次數。
in:表示在某一時間間隔內觀測到的每秒設備的中斷次數。
cs:表示每秒產生的上下文切換次數。
cpu:顯示CPU的使用狀態。
us:顯示用戶下所花費CPU的時間百分比。數字不會超過100,若長時間大於50說明系統資源不夠了。
sy:顯示系統花費CPU的時間百分比。
id:表示CPU處於空閑狀態的時間百分比。
(wait)wa:表示I/O等待所占用CPU的時間百分比。數字太大說明CPU不夠用。
st:表示被偷走的CPU的所占百分比(一般為0,無需關註)服務器做了虛擬化,有虛擬機可能會偷走部分CPU。
us+sy+id=100
只需關註r、b、swpd、si、so、bi、bo、us、wa。多關註us。
三、top命令
top:查看具體進程使用資源情況。
用法:# top 動態監控進程所占的系統資源,每隔3秒變一次。
特點:把占用系統資源(CPU、內存、I/O等)最高的進程放到最前面。
top - 04:42:37 up 50 min, 1 user, load average: 0.07, 0.04, 0.05
Tasks: 95 total, 1 running, 94 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
KiB Mem : 1867048 total, 1546204 free, 136952 used, 183892 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1540464 avail Mem
Tasks:進程數。
Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie
94個進程,1個r狀態的進程,93個休眠,0個停止進程。
zombie:僵屍進程。主進程以外中止,子進程留在這。
RES:進程所占的內存大小。物理內存大小。單位是字節。
%MEM:使用內存的百分比
KiB Mem : 1867048 total, 1543120 free, 139108 used, 184820 buff/cache
物理內存(KB):進程數,剩余,已使用,buff/cache
默認情況下按CPU從高到低排序。按M可按內存排序,按P可切換回CPU排序。按數字1可列出所有核的CPU的使用狀態,按1可切換,按q鍵可以退出top。
top - 05:40:02 up 1:48, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 94 total, 1 running, 93 sleeping, 0 stopped, 0 zombie
%Cpu0 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1867048 total, 1546076 free, 136920 used, 184052 buff/cache
KiB Swap: 4194300 total, 4194300 free, 0 used. 1540360 avail Mem
# top -c:可以查看到具體命令的全局路徑。
# top -bn1:一次性靜態輸出所有信息,適合寫腳本時使用。
四、sar命令
sar命令:可以打印歷史信息,可以顯示當天從零點開始到當前時間的系統狀態信息。
可以監控系統幾乎所有資源的狀態,如平均負載,網卡流量,磁盤狀態,內存等。
被稱為Linux裏的瑞士×××。查看網卡流量是非常有用的。
若沒有該命令,yum install -y sysstat。
初次使用會報錯,因為sar工具還沒有生成相應的數據庫文件。
它的數據庫文件在/var/log/sa/目錄下。
# sar -n DEV 查看網卡流量歷史
該命令會把當天記錄的網卡信息打印出來,每隔十分鐘記錄一次。
# sar -n DEV
Linux 3.10.0-693.el7.x86_64 (yaowei-01) 2018年03月20日 _x86_64_ (2 CPU)
06時00分02秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
06時10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
06時10分01秒 ens33 0.35 0.09 0.02 0.01 0.00 0.00 0.00
平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: ens33 0.35 0.09 0.02 0.01 0.00 0.00 0.00
IFACE:設備名稱。
rxpck/s:每秒進入收取的包的數量。每秒收入幾千是正常,上萬就不正常了。
txpck/s:每秒發送出去的包的數量。
rxkB/s:每秒收取的數據量(KB)。
txkB/s:每秒發送的數據量。
後面幾列不需關註。
若服務器丟包嚴重,就應查一下網卡流量是否異常。若rxpck/s數值,或者rxkB/s大於5000000,很可能是被攻擊了。正常的服務器網卡流量沒這麽高,除非是自己在復制數據。
# sar -n DEV 1 5 實時查看網卡流量
# sar -n DEV -f /var/log/sa/sa23 查看某天的網卡流量歷史,後面跟文件名,23日。
該目錄下還會生成一個sar23的文件,可以cat,sa23是二進制文件,不能cat。
RedHat或Centos發行版,sar的庫文件一定在/var/log/sa/下。
# sar -q 查看歷史負載,有助於查看服務器在過去某個時間的負載情況。
# sar -b 查看磁盤
五、nload命令
比sar查看網卡流量更好用。系統默認沒安裝。
# yum install -y epel-release; yum install -y nload
因為nload包在epel擴展源裏,所以要先安裝一個擴展源。
# nload
Device ens33 [192.168.93.130] (1/2):
======================================================================================================================
Incoming:
Curr: 944.00 Bit/s
Avg: 1.12 kBit/s
Min: 944.00 Bit/s
Max: 1.86 kBit/s
Ttl: 15.59 MByte
Outgoing:
Curr: 8.58 kBit/s
Avg: 8.44 kBit/s
Min: 4.27 kBit/s
Max: 9.03 kBit/s
Ttl: 1.05 MByte
最上面一行為網卡名和IP地址,按右方向鍵可以查看其它網卡的網絡流量。
Incoming:進入網卡的流量,Outgoing:網卡出去的流量。
主要關註Curr那行。按q退。
二十九、w查看系統負載、vmstat命令、top命令、sar命令、nload命令