1. 使用w查看系統負載
用法如下:
# w
18:20:14 up 2 days, 7:57, 1 user, load average: 0.01, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.4.84 10:14 6.00s 0.11s 0.03s w
解釋:linux管理員最常用的命令就是這個w了,該命令顯示的信息很豐富。第一行從左至右顯示的信息依次爲:時間、系統運行時間、登錄用戶數、平均負載。
第二行開始的所有行則是告訴我們:當前登錄的用戶名及其登錄地址等。
注意:在這裏面最應該關注的應該是第一行中的load average:後面三個數值。
第一個數值表示一分鐘內系統的平均負載值。
第二個數值表示五分鐘內系統的平均負載值。
第三個數值表示十五分鐘內系統的平均負載值。
備註:我們着重看第一個值,它表示單位時間段內使用cpu的活動進程數(在這裏其實就是一分鐘內)值越大就說明服務器壓力越大。一般情況下,這個值只要不超過服務器的cpu數量就沒有關係,如果服務器的cpu數量爲8,那麼值小於就說明當前服務器沒有壓力,否則就要關注下。
查看服務器有幾個CPU(邏輯CPU)
這裏的processor計數從0開始,也就是說第一個顯示爲0,第二個顯示爲1。
# cat /proc/cpuinfo
processor : 1
vendor_id : GenuineIntel
cpu family : 6
model : 58
model name : Intel(R) Core(TM) i3-3240 CPU @ 3.40GHz
stepping : 9
microcode : 0x17
cpu MHz : 3392.132
cache size : 3072 KB
physical id : 0
siblings : 1
core id : 0
cpu cores : 1
apicid : 0
initial apicid : 0
fpu : yes
fpu_exception : yes
cpuid level : 13
wp : yes
查看當前系統有幾個cpu
# grep -c 'processor' /proc/cpuinfo
1
2. vmstat命令
vmstat命令的含義爲顯示虛擬內存狀態(“Viryual Memor Statics”),它可以報告關於進程、內存、I/O等系統整體運行狀態。讓我們知道系統的使用瓶頸在哪裏。
具體用法如下:
# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 697556 876 175492 0 0 1 0 53 69 0 0 100 0 0
# vmstat 1 表示每隔一秒輸出一次狀態且一直輸出,按Ctrl+c結束
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 697664 876 175524 0 0 1 0 53 69 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 107 120 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 79 89 0 1 99 0 0
0 0 0 697648 876 175524 0 0 0 0 76 97 0 1 99 0 0
0 0 0 697648 876 175524 0 0 0 0 67 78 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 72 86 0 0 100 0 0
^C
# vmstat 1 5 表示每隔一秒輸出一次狀態,共輸出五次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 697664 876 175524 0 0 1 0 53 69 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 80 92 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 88 106 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 86 95 0 0 100 0 0
0 0 0 697648 876 175524 0 0 0 0 70 82 0 0 100 0 0
解釋相關進程的作用,重點關注r、b、si、so、bi、bo這幾列信息:
procs顯示進程的相關信息
r (run):表示運行或等待CPU時間片的進程數。說明:不要誤以爲等待CPU時間片意味着這個進程沒有進行,實際上某一時刻一個CPU只能有一個進程,其他進程只能排着隊等着,此時這些排隊等待CPU資源的進程依然是運行狀態。該數值如果長期大於服務器CPU的個數,則說明CPU資源不夠用了。
b (block):表示等待資源的進程數,這個資源指的是I/O、內存等。舉個例子:當磁盤讀寫非常頻繁時,寫數據就會非常慢,此時CPU運算很快就結束了,但進程需要把計算的結果寫入磁盤,這樣進程的任務纔算完成,那此時這個進程只能慢慢地等待,這樣這個進程就是這個b狀態。該數值如果長時間大於1,則需要關注一下。
memory顯示內存的相關信息
swpd:表示切換到交換分區中的內存數量,單位爲KB。
free:表示當前空閒的內存數量,單位爲KB。
buff:表示(即將寫入磁盤的)緩衝大小,單位爲KB。
cache:表示(從磁盤中讀取的)緩存大小,單位爲KB。
swap顯示內存的交換情況
si:表示由交換區寫入內存的數據量,單位爲KB。
so:表示由內存寫入交換區的數據量,單位爲KB。
io顯示磁盤的使用情況
bi:表示從塊設備讀取數據的量(讀磁盤),單位爲KB。
bo:表示從塊設備寫入數據的量(寫磁盤),單位爲KB。
system顯示採集間隔內發生的中斷次數
in:表示在某一時間間隔內觀測到的每秒設備的中斷次數。
cs:表示每秒產生的上下文切換次數。
cpu顯示CPU的使用狀態
us:顯示用戶下花費CPU的時間百分比。
sy:顯示系統花費CPU的時間百分比。
id:表示CPU處於空閒狀態的時間百分比。
wa:表示I/O等待所佔用CPU的時間百分比。
st:表示被偷走的CPU所佔百分比(一般都爲0,不用關注)
3. top命令
top命令用於動態監控進程所佔的系統資源,每隔3秒變一次。它的特點是把佔用系統資源(cpu、內存、硬盤I/O等)最高的進程放到最前面。
用法如下:
# top
top - 19:37:58 up 2 days, 9:14, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 87 total, 1 running, 86 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 999940 total, 696980 free, 126268 used, 176692 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 692664 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21 root 20 0 0 0 0 S 0.7 0.0 3:13.30 kworker/0:1
3833 root 20 0 157588 2120 1512 R 0.7 0.2 0:00.77 top
496 root 20 0 303272 6760 4780 S 0.3 0.7 5:36.48 vmtoolsd
1 root 20 0 128104 6700 3948 S 0.0 0.7 0:02.83 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd
3 root 20 0 0 0 0 S 0.0 0.0 0:05.27 ksoftirqd/0
7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
9 root 20 0 0 0 0 S 0.0 0.0 0:53.45 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:02.18 watchdog/0
12 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 khelper
13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns
15 root 20 0 0 0 0 S 0.0 0.0 0:00.07 khungtaskd
16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback
17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd
18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset
19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kblockd
20 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 md
26 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kswapd0
27 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
備註:需要關注的值有load average,tasks,%CPU,%MEM。
RES表示進程佔用的內存數量。
shift+m表示按內存使用量排序。
shift+p表示按cpu使用量排序。
按數字1可以列出每個cpu的佔用量。
top -c顯示詳細的進程信息。
top -bn1靜態顯示所有進程。
q退出。
q+PID殺死程。
4. sar命令
sar命令很強大,被戲稱爲瑞士×××。它可以監控系統幾乎所有資源的狀態,比如平均負載、網上流量、磁盤狀態,內存使用等。與其他系統狀態監控工具不同,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。
#yum install -y sysstat sar命令安裝
查看網卡流量歷史 sar -n DEV
# sar -n DEV
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20時00分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時10分01秒 ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
解釋:
IFACE這一列表示設備名稱.
rxpck/s這一列表示每秒進入收取的包的數量有多少。
txpck/s這一列表示每秒發送出雲的包的數量有多少。
rxkB/s這一列表示每秒收取的數據量(單位爲KB)。
txkB/S這一列表示每秒發送的數據量。
注意:
如果有一天服務器丟包非常嚴重,那麼你就該應該查一下網卡流量是否異常了,如果rxpck/s那一列的數值大於4000,或者rxkB/s那一列的數值大於50000000,很有可能是被***了,正常的服務器網卡流量不會這麼高,除非是你自己在複製數據。
實時查看網卡流量
# sar -n DEV 1 5
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20時12分50秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時12分51秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時12分51秒 ens33 11.22 0.00 0.82 0.00 0.00 0.00 0.00
20時12分51秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時12分52秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時12分52秒 ens33 12.37 1.03 0.82 0.41 0.00 0.00 0.00
20時12分52秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時12分53秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時12分53秒 ens33 12.24 1.02 0.91 0.41 0.00 0.00 0.00
20時12分53秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時12分54秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時12分54秒 ens33 8.08 1.01 0.56 0.40 0.00 0.00 0.00
20時12分54秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時12分55秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時12分55秒 ens33 7.14 1.02 0.45 0.41 0.00 0.00 0.00
平均時間: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: ens33 10.20 0.82 0.71 0.33 0.00 0.00 0.00
使用-f選項查看某一天的網卡流量歷史,後面跟文件名。(在Red Hat或者CentOS發行版中,sar的庫文件一定在/var/log/sa/目錄下
示例如下:
# sar -n DEV -f /var/log/sa/sa20
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20時00分01秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
20時10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
20時10分01秒 ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: ens33 12.01 0.14 0.92 0.02 0.00 0.00 0.00
查看歷史負載 sar -q
示例如下:
# sar -q
Linux 3.10.0-514.el7.x86_64 (ccj-01) 2018年1月20日 _x86_64_ (1 CPU)
20時00分01秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
20時10分01秒 1 105 0.00 0.01 0.05 0
平均時間: 1 105 0.00 0.01 0.05 0
備註:這個命令有助於我們查看服務器在過去某個時間的負載狀況。
5. nload命令
sar雖然可以查看網卡流量,但是不夠直觀,還有一個更好用的工具,那就是nload。
安裝nload:
#yum install -y epel-release 先安裝擴展源
#yum install -y nload 因爲nload依賴於epel-release。
#nload 查看網卡流量:
Device ens33 [192.168.114.1] (1/2):
=========================================================================================================================
Incoming:
Curr: 10.76 kBit/s
Avg: 9.31 kBit/s
Min: 4.62 kBit/s
Max: 13.25 kBit/s
Ttl: 142.85 MByte
Outgoing:
Curr: 8.55 kBit/s
Avg: 8.42 kBit/s
Min: 3.90 kBit/s
Max: 9.18 kBit/s
Ttl: 1.69 MByte
說明:
Incoming爲進入網卡的流量。
Outgoing爲網卡出去的流量。
主要關注Curr那行的數據,其單位也可以動態自動調整。
按q退出該界面。