歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

每天一個Linux命令(40)vmstat命令

[b] vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操作系統的虛擬內存、進程、CPU活動進行監控。[/b] [b]它能夠對系統的整體情況進行統計,無法對某個進程進行深入分析。vmstat 工具提供了一種低開銷的系統性能觀察方式。[/b]

[b] (1)用法[/b][b] 用法: vmstat [選項參數][/b]

或 vmstat [選項參數] [數字] [數字][b] (2)功能:[/b]

[b] 功能: 報告虛擬內存的統計信息,關於進程、內存、I/O等系統整體運行狀態。[/b][b] (3)選項參數:[/b]

1) -d:        顯示磁盤相關統計信息。 2) -a:       顯示活躍和非活躍內存

3) -f:        顯示從系統啟動至今的fork數量。 4) -p:       顯示指定磁盤分區統計信息

5) -s:       顯示內存相關統計信息及多種系統活動數量。 6) -m:       顯示slabinfo

[b] (4)實例:[/b] 1)[sunjimeng@localhost ~]$ vmstat          顯示虛擬內存使用情況

[sunjimeng@localhost ~]$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 5  0      0 858580    752 506988    0    0     7     1   81  120  2  1 97  0  0
[sunjimeng@localhost ~]$
字段說明:

1.Procs(進程) r: 運行隊列中進程數量,這個值也可以判斷是否需要增加CPU。(長期大於1)

b: 等待IO的進程數量。 2.Memory(內存)

swpd: 使用虛擬內存大小,如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統性能。 free: 空閒物理內存大小。

buff: 用作緩沖的內存大小。 cache: 用作緩存的內存大小,如果cache的值大的時候,說明cache處的文件數多,如果頻繁訪問到的文件都能被cache處,那麼磁盤的讀IO bi會非常小。3.Swap

si: 每秒從交換區寫到內存的大小,由磁盤調入內存。 so: 每秒寫入交換區的內存大小,由內存調入磁盤。

注意: 內存夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閒內存(free)很少的或接近於0時,就認為內存不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。

4.IO(現在的Linux版本塊的大小為1kb) bi: 每秒讀取的塊數

bo: 每秒寫入的塊數 注意:

隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。5.system(系統)

in: 每秒中斷數,包括時鐘中斷。 cs: 每秒上下文切換數。

注意: 上面2個值越大,會看到由內核消耗的CPU時間會越大。6.CPU(以百分比表示)

  us: 用戶進程執行時間百分比(user time) us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那麼我們就該考慮優化程序算法或者進行加速。   sy: 內核系統進程執行時間百分比(system time) sy的值高時,說明系統內核消耗的CPU資源多,這並不是良性表現,我們應該檢查原因。

  wa: IO等待時間百分比 wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸(塊操作)。  id: 空閒時間百分比

2)[sunjimeng@localhost ~]$ vmstat 2        每二秒顯示一次系統內存的統計信息

[sunjimeng@localhost ~]$ vmstat 2
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 853508    752 507144    0    0     7     1   80  119  2  1 97  0  0
 0  0      0 853508    752 507144    0    0     0     0  376  466  3  2 96  0  0
......

3)[sunjimeng@localhost ~]$ vmstat 2 5       每二秒顯示一次系統內存的統計信息,總共5次 

[sunjimeng@localhost ~]$ vmstat 2 5
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 853888    752 507152    0    0     7     1   81  119  2  1 97  0  0
 0  0      0 853888    752 507152    0    0     0     0  609  763  5  2 92  0  0
 1  0      0 853888    752 507152    0    0     0     0  582  626  5  2 93  0  0
 0  0      0 853888    752 507152    0    0     0     0  399  464  3  2 95  0  0
 0  0      0 853888    752 507152    0    0     0     0  263  365  3  1 96  0  0
[sunjimeng@localhost ~]$

4)[sunjimeng@localhost ~]$ vmstat -d       顯示磁盤的信息

[sunjimeng@localhost ~]$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
sda    11582    610  838780  116523   7805   1068  133502  564406      0     73
sr0        0      0       0       0      0      0       0       0      0      0
[sunjimeng@localhost ~]$

merged:表示一次來自於合並的寫/讀請求,一般系統會把多個連接/鄰近的讀/寫請求合並到一起來操作。 5)[sunjimeng@localhost ~]$ vmstat -a       顯示活躍內存與非活躍內存

使用-a選項顯示活躍和非活躍內存時,所顯示的內容除增加inact和active外,其他顯示內容與例子1相同。

[sunjimeng@localhost ~]$ vmstat -a
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 854904 316268 604280    0    0     7     1   81  119  2  1 97  0  0
[sunjimeng@localhost ~]$

6)[sunjimeng@localhost ~]$ vmstat -f      查看系統已經被fork多少次

[sunjimeng@localhost ~]$ vmstat -f
        17873 forks
[sunjimeng@localhost ~]$

7)[sunjimeng@localhost ~]$ vmstat -p devtmpfs  查看特定磁盤設備的

[sunjimeng@localhost ~]$ df
文件系統          1K-塊    已用     可用 已用% 掛載點
/dev/sda3      18555904 3583564 14972340   20% /
devtmpfs         997908       0   997908    0% /dev
tmpfs           1006936     148  1006788    1% /dev/shm
tmpfs           1006936    9080   997856    1% /run
tmpfs           1006936       0  1006936    0% /sys/fs/cgroup
/dev/sda1        303788  113264   190524   38% /boot
[sunjimeng@localhost ~]$ vmstat -p devtmpfs
partition was not found
[sunjimeng@localhost ~]$ vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes
                1151      51564       1034       4138

  說明:  這些信息主要來自於/proc/diskstats。

  reads:         來自於這個分區的讀的次數。  read sectors:     來自於這個分區的讀扇區的次數。

  writes:        來自於這個分區的寫的次數。  requested writes:  來自於這個分區的寫請求次數。

8)[root@localhost sunjimeng]# vmstat -m        顯示slabinfo

[sunjimeng@localhost ~]$ vmstat -m
vmstat: your kernel does not support slabinfo or your permissions are insufficient
[sunjimeng@localhost ~]$ su root
密碼:
[root@localhost sunjimeng]# vmstat -m
Cache                       Num  Total   Size  Pages
fuse_inode                   42     42    768     42
nf_conntrack_ffff880080950000      0      0    320     51
nf_conntrack_ffffffff819e07c0    102    102    320     51
kcopyd_job                    0      0   3312      9
dm_uevent                     0      0   2608     12
dm_rq_target_io               0      0    424     38
xfs_icr                       0      0    144     56
xfs_ili                    3922   3922    152     53
xfs_inode                 26816  26816   1024     32
xfs_efd_item                 80     80    400     40
xfs_da_state                134    134    488     67
xfs_btree_cur                78     78    208     39
xfs_log_ticket               88     88    184     44
scsi_cmd_cache               72     72    448     36
UDPLITEv6                     0      0   1152     28
UDPv6                        56     56   1152     28
tw_sock_TCPv6                 0      0    256     64
TCPv6                        32     32   2048     16
Cache                       Num  Total   Size  Pages
cfq_queue                   140    140    232     70
bsg_cmd                       0      0    312     52
mqueue_inode_cache           36     36    896     36
hugetlbfs_inode_cache       106    106    608     53
configfs_dir_cache            0      0     88     46
dquot                         0      0    256     64
kioctx                        0      0    576     56
pid_namespace                 0      0   2176     15
posix_timers_cache            0      0    248     66
UDP-Lite                      0      0   1024     32
ip_fib_trie                 146    146     56     73
RAW                         884    884    960     34
UDP                          64     64   1024     32
tw_sock_TCP                   0      0    256     64
TCP                          34     34   1920     17
blkdev_queue                 32     32   2016     16
blkdev_requests            4578   4578    384     42
blkdev_ioc                  156    156    104     39
Cache                       Num  Total   Size  Pages
fsnotify_event_holder    128180 128180     24    170
fsnotify_event              909   1632    120     68
sock_inode_cache           1224   1224    640     51
net_namespace                 7      7   4224      7
shmem_inode_cache          1008   1008    680     48
Acpi-ParseExt              6720   6720     72     56
Acpi-Namespace             4692   4692     40    102
taskstats                    98     98    328     49
proc_inode_cache           5638   5978    656     49
sigqueue                    102    102    160     51
bdev_cache                   78     78    832     39
sysfs_dir_cache           29688  30168    112     36
inode_cache               15675  15675    592     55
dentry                    57213  57498    192     42
iint_cache                    0      0     80     51
selinux_inode_security    50139  50439     80     51
buffer_head                3588   3588    104     39
vm_area_struct            18198  18463    216     37
Cache                       Num  Total   Size  Pages
mm_struct                   140    140   1600     20
files_cache                 306    306    640     51
signal_cache                857    952   1152     28
sighand_cache               575    585   2112     15
task_xstate                 858    858    832     39
task_struct                 721    781   2912     11
anon_vma                   6502   7040     64     64
shared_policy_node         2295   2295     48     85
numa_policy                 186    186    264     62
radix_tree_node            5988   6048    584     56
idr_layer_cache             210    210   2112     15
dma-kmalloc-8192              0      0   8192      4
dma-kmalloc-4096              0      0   4096      8
dma-kmalloc-2048              0      0   2048     16
dma-kmalloc-1024              0      0   1024     32
dma-kmalloc-512              64     64    512     64
dma-kmalloc-256               0      0    256     64
dma-kmalloc-128               0      0    128     64
Cache                       Num  Total   Size  Pages
dma-kmalloc-64                0      0     64     64
dma-kmalloc-32                0      0     32    128
dma-kmalloc-16                0      0     16    256
dma-kmalloc-8                 0      0      8    512
dma-kmalloc-192               0      0    192     42
dma-kmalloc-96                0      0     96     42
kmalloc-8192                 40     44   8192      4
kmalloc-4096                581    648   4096      8
kmalloc-2048               1472   1584   2048     16
kmalloc-1024               3353   3424   1024     32
kmalloc-512                7808   7808    512     64
kmalloc-256                8046   9216    256     64
kmalloc-192                9976   9996    192     42
kmalloc-128                5696   5696    128     64
kmalloc-96                 5586   5586     96     42
kmalloc-64               112568 113152     64     64
kmalloc-32               123831 124416     32    128
kmalloc-16                58869  60672     16    256
Cache                       Num  Total   Size  Pages
kmalloc-8                 84992  84992      8    512
kmem_cache_node             192    192     64     64
kmem_cache                  192    192    256     64

[b] (5)其他:[/b]1.物理內存和虛擬內存區別:

物理內存讀寫數據要比從硬盤讀寫數據要快的多,因此,我們希望所有數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。 物理內存就是系統硬件提供的內存大小,是真正的內存;在Linux系統下,虛擬內存就是為了滿足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用作虛擬內存的磁盤空間被稱為交換空間(Swap Space)。作為物理內存的擴展,linux會在物理內存不足時,使用交換分區的虛擬內存。(更詳細的說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣以來,物理內存得到了釋放,這塊內存就可以用於其它目的,當需要用到原始的內容時,這些信息會被重新從交換空間讀入物理內存。)

2.linux內存運行機制: linux的內存管理采取的是分頁存取機制,為了保證物理內存能得到充分的利用,內核會在適當的時候將物理內存中不經常使用的數據塊自動交換到虛擬內存中,而將經常使用的信息保留到物理內存。

1)首先,Linux系統會不時的進行頁面交換操作,以保持盡可能多的空閒物理內存,即使並沒有什麼事情需要內存,Linux也會交換出暫時不用的內存頁面。這可以避免等待交換所需的時間。 2)其次,linux進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內存,linux內核根據”最近最經常使用“算法,僅僅將一些不經常使用的頁面文件交換到虛擬內存,有時我們會看到這麼一個現象:linux物理內存還有很多,但是交換空間也使用了很多。其實,這並不奇怪,例如,一個占用很大內存的進程運行時,需要耗費很多內存資源,此時就會有一些不常用頁面文件被交換到虛擬內存中,但後來這個占用很多內存資源的進程結束並釋放了很多內存時,剛才被交換出去的頁面文件並不會自動的交換進物理內存,除非有這個必要,那麼此刻系統物理內存就會空閒很多,同時交換空間也在被使用,就出現了剛才所說的現象了。關於這點,不用擔心什麼,只要知道是怎麼一回事就可以了。

3)最後,交換空間的頁面在使用時會首先被交換到物理內存,如果此時沒有足夠的物理內存來容納這些頁面,它們又會被馬上交換出去,如此以來,虛擬內存中可能沒有足夠空間來存儲這些交換頁面,最終會導致linux出現假死機、服務異常等問題,linux雖然可以在一段時間內自行恢復,但是恢復後的系統已經基本不可用了。 4)因此,合理規劃和設計linux內存的使用,是非常重要的。

3.虛擬內存原理: 在系統中運行的每個進程都需要使用到內存,但不是每個進程都需要每時每刻使用系統分配的內存空間。當系統運行所需內存超過實際的物理內存,內核會釋放某些進程所占用但未使用的部分或所有物理內存,將這部分資料存儲在磁盤上直到進程下一次調用,並將釋放出的內存提供給有需要的進程使用。

在Linux內存管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的內存調度。調頁算法是將內存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內存中供進程使用。交換技術是將整個進程,而不是部分頁面,全部交換到磁盤上。 分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到內存的過程被稱作Page-In。當內核需要一個分頁時,但發現此分頁不在物理內存中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。 當系統內核發現可運行內存變少時,就會通過Page-Out來釋放一部分物理內存。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷的發生,直到當內核管理分頁的時間超過運行程式的時間時,系統效能會急劇下降。這時的系統已經運行非常慢或進入暫停狀態,這種狀態亦被稱作thrashing(顛簸)。 4.buffer與cache的區別

buff和cache的主要區別是在控制和速度上。buff的控制相對簡單,是對數據流緩沖,將需要的數據流臨時緩沖在buff裡,以降低低速設備對整體的影響。一般都是對大量的數據交換進行緩沖;cache是對高速交換進行緩沖,需要一些額外的算法來提高效率,比如讀取命中之類的,一般相對較小,速度很快,大多是對指令的臨時存儲。

Copyright © Linux教程網 All Rights Reserved