The vmstat command prints the system virtual memory statistics for Linux and Unix systems. vmstat prints information about system processes, memory, swap, I/O blocks, interrupts and context switches and the CPU activity. The most common command format is,
vmstat [delay [count]]
The optional delay parameter tells the time interval between periodic vmstat outputs. If the count number is given, vmstat prints output count times and exits. If count is not given, vmstat prints output forever
, or till the time you interrupt it with a control-C. For example,
$ vmstat 4 5 procs ----------memory---------- --swap-- ----io--- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 816344 75968 2724 94612 8 8 35 18 11 49 8 2 89 1 0 0 816332 78680 2744 94668 0 0 0 33 1430 2408 39 8 52 0 0 0 816324 79080 2752 94648 8 0 8 11 791 1537 5 2 93 1 0 0 816284 78708 2760 94652 8 0 8 9 829 1306 4 2 94 0 0 0 816236 78584 2768 94652 16 0 16 5 805 1559 10 2 88 1
We asked for 5 times of vmstat output, each after a delay of 4 seconds. So there are 5 lines of data in the output, each line giving the averages for the last 4 seconds. The first line gives the summary information since the system boot time. The procs columns give information about the processes in the system. The number under the r sub-column gives the number of processes that are ready to run. The b sub-column indicates the processes that are blocked in uninterruptible sleep. Then, we have the memory columns. The swpd column gives the amount of virtual memory used. The free column gives the amount of idle memory. The buff and the cache columns give the amount of memory used as buffers and cache respectively. All figures are in kilobytes, by default. Next, there are the swap columns. The si column gives the memory swapped in from the hard disk(s) in kilobytes per second. Similarly, so is the memory swapped out to disk(s), also in Kb/sec. Swapping indicates a memory bottleneck; since there is a shortage of main memory, the kernel has to make space by swapping out pages to hard disk to satisfy the requirement of memory from demanding processes. Next, there are the I/O columns under the heading io. The bi column gives the blocks received from block input devices per second. Similarly, the bo column indicates the blocks sent out to devices per second. Under the system column, the in sub-column gives the interrupts per second. This includes the clock interrupt. The cs sub-column gives the number of context switches per second. Then, there is the cpu column with four sub-columns. The us column gives the user time, the time the CPU has been working in the user mode, executing non-kernel code. The sy column is for the system time, when the CPU is working in the kernel mode, executing the kernel code. The id column indicates the CPU idle time and the wa column is for the time CPU has been waiting for the I/O.
Options
-a
The -a option displays the active and inactive memory columns. Active memory is the memory which has been used recently, whereas the inactive memory, allocated for some processes earlier, has not been used of late. For example,
$ vmstat -a 2 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free inact active si so bi bo in cs us sy id wa 1 0 787772 99252 379092 288488 8 8 38 18 56 126 8 2 88 1 0 0 787760 99128 379092 288556 0 0 0 0 840 2649 7 2 92 0 1 0 787760 99128 379092 288560 0 0 0 0 774 1592 5 2 94 0 3 0 787756 99096 379096 289596 0 0 0 12 2824 6823 48 10 42 0 ....
-f
The -f option gives the number of forks since the system boot. This is the number of processes created since the time of boot. For example,
$ vmstat -f 11106 forks $ ps PID TTY TIME CMD 3903 pts/0 00:00:01 bash 11107 pts/0 00:00:00 ps
vmstat reports 11106 forks and the process id of the next process ps is 11107.
-S
By default, the memory figures are reported in the units of Kilobytes (1024 bytes). It is possible to change this to 1000, 1024, 1000000 or 1048576 bytes using k, K, m or M parameter respectively after the -S option. For example to get memory figures in megabytes,
vmstat -S M 2 4 procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- r b swpd free buff cache si so bi bo in cs us sy id wa 1 0 773 81 6 132 9 9 39 19 88 60 9 2 88 1 0 0 773 81 6 132 0 0 0 36 910 1939 13 3 82 1 0 0 773 81 6 132 0 0 0 0 883 3197 7 3 90 0 0 0 773 81 6 132 0 0 0 24 788 1603 4 3 92 1
The figures given under memory are only affected. The data under the swap or io columns is not affected
-p
The -p option, followed by a partition name, gives the statistics for that partition. For example,
$ vmstat -p /dev/sda3 sda3 reads read sectors writes requested writes 436726 19349941 43142 1284936
-s
The -s option prints the summary data for the system. For example,
$ vmstat -s 960268 K total memory 816984 K used memory 260124 K active memory 383400 K inactive memory 143284 K free memory 2720 K buffer memory 120820 K swap cache 2996116 K total swap 845476 K used swap 2150640 K free swap 3112928 non-nice user cpu ticks 22571 nice user cpu ticks 813661 system cpu ticks 31530824 idle cpu ticks 475094 IO-wait cpu ticks 309 IRQ cpu ticks 18264 softirq cpu ticks 0 stolen cpu ticks 14124326 pages paged in 6729681 pages paged out 772468 pages swapped in 784699 pages swapped out 159151678 interrupts 319674149 CPU context switches 1332562573 boot time 11564 forks