linux-基礎知識
1.w的命令
[[email protected] ~]# w
22:59:41 up 15:46, 1 user, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 22:43 5.00s 0.05s 0.02s w
[[email protected] ~]#
2.uptime命令
[[email protected] ~]# uptime
23:00:00 up 15:46, 1 user, load average: 0.00, 0.01, 0.05
[[email protected] ~]#
3.vmstat總結
[[email protected] ~]# vmstat 1
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 298360 1696 591216 0 0 3 4 16 23 0 0 100 0 0
0 0 0 298360 1696 591216 0 0 0 0 38 51 0 0 100 0 0
0 0 0 298344 1696 591216 0 0 0 0 26 34 0 0 100 0 0
0 0 0 298344 1696 591216 0 0 0 16 32 40 0 0 100 0 0
0 0 0 298344 1696 591216 0 0 0 0 28 38 0 0 100 0 0
0 0 0 298344 1696 591216 0 0 0 3 33 49 0 0 100 0 0
0 0 0 298344 1696 591216 0 0 0 0 27 33 0 0 100 0 0
r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閑,沒什麽程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關系,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。
b 表示阻塞的進程,這個不多說,進程阻塞,大家懂的。
swpd 虛擬內存已使用的大小,如果大於0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那麽你該升級內存了或者把耗內存的任務遷移到其他機器。
free 空閑的物理內存的大小,我的機器內存總共8G,剩余3415M。
buff Linux/Unix系統是用來存儲,目錄裏面有什麽內容,權限等的緩存,我本機大概占用300多M
cache cache直接用來記憶我們打開的文件,給文件做緩沖,我本機大概占用300多M(這裏是Linux/Unix的聰明之處,把空閑的物理內存的一部分拿來做文件和目錄的緩存,是為了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)
si 每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。
so 每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。
bi 塊設備每秒接收的塊數量,這裏的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什麽IO操作,所以一直是0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒
bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。
in 每秒CPU的中斷次數,包括時間中斷
cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千並發甚至幾萬並發的測試,選擇web服務器的進程可以由進程或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
us 用戶CPU時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。
sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。
id 空閑 CPU時間,一般來說,id + us + sy = 100,一般我認為id是空閑CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。
wt 等待IO CPU時間。
4.top命令的總結
[[email protected] ~]# top
top - 23:03:04 up 15:49, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 96 total, 1 running, 95 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 : 999964 total, 298048 free, 109004 used, 592912 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 691840 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
21308 root 20 0 142972 5156 3884 S 0.3 0.5 0:00.32 sshd
1 root 20 0 128092 6728 3968 S 0.0 0.7 0:02.40 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:00.09 ksoftirqd/0
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
7 root rt 0 0 0 0 S 0.0 0.0 0:00.03 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:03.98 rcu_sched
10 root rt 0 0 0 0 S 0.0 0.0 0:00.63 watchdog/0
11 root rt 0 0 0 0 S 0.0 0.0 0:00.61 watchdog/1
12 root rt 0 0 0 0 S 0.0 0.0 0:00.09 migration/1
13 root 20 0 0 0 0 S 0.0 0.0 0:00.78 ksoftirqd/1
序號 列名 含義
a PID 進程id
b PPID 父進程id
c RUSER Real user name
d UID 進程所有者的用戶id
e USER 進程所有者的用戶名
f GROUP 進程所有者的組名
g TTY 啟動進程的終端名。不是從終端啟動的進程則顯示為 ?
h PR 優先級
i NI nice值。負值表示高優先級,正值表示低優先級
j P 最後使用的CPU,僅在多CPU環境下有意義
k %CPU 上次更新到現在的CPU時間占用百分比
l TIME 進程使用的CPU時間總計,單位秒
m TIME+ 進程使用的CPU時間總計,單位1/100秒
n %MEM 進程使用的物理內存百分比
o VIRT 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
p SWAP 進程使用的虛擬內存中,被換出的大小,單位kb。
q RES 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
r CODE 可執行代碼占用的物理內存大小,單位kb
s DATA 可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb
t SHR 共享內存大小,單位kb
u nFLT 頁面錯誤次數
v nDRT 最後一次寫入到現在,被修改過的頁面數。
w S 進程狀態(D=不可中斷的睡眠狀態,R=運行,S=睡眠,T=跟蹤/停止,Z=僵屍進程)
x COMMAND 命令名/命令行
y WCHAN 若該進程在睡眠,則顯示睡眠中的系統函數名
z Flags 任務標誌,參考 sched.h
5.sar的命令
常用:
[[email protected] ~]# sar -n DEV
Linux 3.10.0-514.el7.x86_64 (localhost.localdomain) 2017年07月10日 _x86_64_ (2 CPU)
17時20分50秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
17時30分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17時30分01秒 ens33 1.34 0.82 0.13 0.15 0.00 0.00 0.00
17時40分02秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17時40分02秒 ens33 0.07 0.07 0.01 0.01 0.00 0.00 0.00
17時50分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
17時50分01秒 ens33 0.04 0.05 0.00 0.00 0.00 0.00 0.00
18時00分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18時00分01秒 ens33 0.03 0.03 0.00 0.00 0.00 0.00 0.00
18時10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18時10分01秒 ens33 0.02 0.02 0.00 0.00 0.00 0.00 0.00
18時20分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18時20分01秒 ens33 0.03 0.02 0.00 0.00 0.00 0.00 0.00
18時30分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18時30分01秒 ens33 0.01 0.01 0.00 0.00 0.00 0.00 0.00
18時40分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18時40分01秒 ens33 0.01 0.02 0.00 0.00 0.00 0.00 0.00
18時50分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
18時50分01秒 ens33 0.01 0.01 0.00 0.00 0.00 0.00 0.00
19時00分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時00分01秒 ens33 0.01 0.01 0.00 0.00 0.00 0.00 0.00
19時10分01秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
19時10分01秒 ens33 0.01 0.01 0.00 0.00 0.00 0.00 0.00
6.nload命令
nload直接回車
Device ens33 [10.0.0.201] (1/2):
=============================================================================================
Incoming:
Curr: 872.00 Bit/s
Avg: 976.00 Bit/s
Min: 872.00 Bit/s
Max: 1.86 kBit/s
Ttl: 60.60 MByte
Outgoing:
Curr: 7.85 kBit/s
Avg: 8.17 kBit/s
Min: 4.90 kBit/s
Max: 8.98 kBit/s
Ttl: 4.02 MByte
linux-基礎知識