赞
踩
NAME
vmstat - Report virtual memory statistics
vmstat 报告有关processes,memory, paging,block IO,traps,disks 和 cpu activity的信息。这些报告旨在帮助识别系统瓶颈,Linux vmstat并不将自己视为正在运行的进程。
vmstat用来观测系统整体的性能情况,并不能观测单个进程,单个进程观测可以用pidstat。
虚拟内存统计命令vmstat提供系统内存运行状况的高级视图,包括当前可用内存和分页统计信息。
delay:更新时间间隔,以秒为单位。如果没有指定延迟,则只打印一个报告,其中包含自引导以来的平均值。
count:更新次数。在没有指定count的情况下,当定义了delay时,count默认值则为无限大。
vmstat每两秒显示一次,显示五次:
[root@localhost ~]# vmstat -w 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
0 0 0 1100516 17264 5916084 0 0 1 1 4 2 2 1 97 0 0
0 0 0 1100292 17264 5916084 0 0 0 0 729 3516 5 2 93 0 0
1 0 0 1100268 17264 5916084 0 0 0 4 825 3379 5 2 93 0 0
1 0 0 1100020 17264 5916084 0 0 0 0 831 3464 6 2 92 0 0
0 0 0 1099872 17264 5916084 0 0 0 2 908 3519 5 2 93 0 0
我们可以看到第一行数据的与其他行的数据差异较大(比如 in 和 cs 这两个数据),查看man手册说明:
The first report produced gives averages since the last reboot. Additional reports give information on a sampling period of length delay. The process and memory reports are instantaneous in either case.
第一行数据是系统启动以来的平均值,其他行才是你在运行 vmstat 命令时,设置的间隔时间的平均值。另外,进程和内存的报告内容都是即时数值。
Procs
r: The number of runnable processes (running or waiting for run time).
b: The number of processes in uninterruptible sleep.
r 表示 处于运行态的进程,正在执行或者正在运行队列中等待运行。
通过ps或top显示为 R 状态(Running 或 Runnable)的进程。
b 表示 不可中断的处于睡眠态的进程,进程正在睡眠(阻塞),等待某些条件的达成。但是与 interruptible sleep 的进程不一样的是,该进程在等待条件的过程中,不会对信号做出任何响应。
通过ps或top显示为D状态的进程就是处于uninterruptible sleep的进程,该类型进程通常是等待硬件设备的 I/O 响应等重要的操作,或者持有一个信号量。
比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。
不可中断状态是系统对进程和硬件设备的一种保护机制。
(1)
swpd: the amount of of swapped-out memory.
free: the amount of idle memory (Free available memory).
buff: the amount of memory used as buffers (buffer cache).
cache: the amount of memory used as cache (page cache).
buff/cache:系统中的空闲内存(free memory)在系统启动后,如果空闲内存(free memory)较多,会有一部分用来当作缓存,以提高系统性能。这部分缓存可以在需要的时候(free memory不够的时候)释放出来供应用程序使用。
缓存(buff/cache)占用实际的物理内存,通常缓存的是磁盘上的数据,用来减少对磁盘I/O的操作,把对磁盘的访问变成对物理内存的访问,应该缓存经常访问的数据(热数据),而不是不常访问的数据(冷数据)。
(2)
Swap
si: Amount of memory swapped in from disk (/s).
so: Amount of memory swapped to disk (/s).
如果 the si and so 持续非零,则系统处于内存不足的状态,内存的一些数据(最近没有访问的数据,非活跃的数据)正在交换到 swap device(Swap分区,匿名页被交换到Swap分区) 或者 file(file-backed pages会被直接写入到文件中)中。
anonymous pages和file-backed pages:
Linux一个进程使用的内存分为2种:
file-backed pages(有文件背景的页面,比如代码段、比如read/write方法读写的文件、比如mmap读写的文件;他们有对应的硬盘文件,因此如果要交换,可以直接和硬盘对应的文件进行交换),此部分页面进page cache。
anonymous pages(匿名页,如stack,heap,CoW后的数据段等;他们没有对应的硬盘文件,因此如果要交换,只能交换到虚拟内存-swapfile或者Linux的swap硬盘分区),此部分页面,如果系统内存不充分,可以被swap到swapfile或者硬盘的swap分区。
具体可参考:swappiness=0究竟意味着什么?
如果系统开启了Swap分区,在物理内存不够用时,操作系统会从物理内存中把部分暂时不被使用的数据转移到交换分区,从而为当前运行的程序留出足够的物理内存空间。通常生产环境不会开启Swap分区,会影响性能。
查看交换分区:
[root@localhost ~]# free -m
total used free shared buff/cache available
Mem: 7705 837 1502 138 5365 6275
Swap: 7935 0 7935
NAME
swapon, swapoff - enable/disable devices and files for paging and swapping
[root@localhost ~]# swapon
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 7.8G 0B -2
[root@localhost ~]# cat /proc/swaps
Filename Type Size Used Priority
/dev/dm-1 partition 8126460 0 -2
[root@localhost ~]# cat /etc/fstab
......
/dev/mapper/centos-swap swap swap defaults 0 0
swappiness用于设置向交换分区写页面的活跃程度:
[root@localhost ~]# cat /proc/sys/vm/swappiness
20
swappiness越大,越倾向于回收匿名页;swappiness越小,越倾向于回收file-backed的页面。当然,它们的回收方法都是一样的LRU算法。
swappiness = 0,当内存不足时,只回收file-backed的页面,不回收匿名页。
swappiness = 1,进行最少量的匿名页交换,而不禁用交换。
swappiness=100,当内存不足时的时候,表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。
swappiness的值为 0 到 100。
IO
bi: Blocks received from a block device (blocks/s).
bo: Blocks sent to a block device (blocks/s).
所有 linux blocks 目前都是1024字节。
System
in: The number of interrupts per second, including the clock.
cs: The number of context switches per second.
其中 in 代表系统每秒发生中断的次数,包括时钟中断(是否包括了系统软中断)。
其中 cs 代表系统每秒上下文切换的次数,显示了系统总体的上下文切换情况。
上下文切换包括:进程上下文切换、线程上下文切换以及中断上下文切换(是否包括了系统调用上下文切换)。
man 手册中指出:没有统计系统调用的数目,cs应该没有包括系统调用上下文切换的次数。
Does not tabulate the block io per device or count the number of system calls.
CPU
These are percentages of total CPU time.
us: Time spent running non-kernel code. (user time, including nice time)
sy: Time spent running kernel code. (system time)
id: Time spent idle.
wa: Time spent waiting for IO.
st: Time stolen from a virtual machine.
-a, --active
Display active and inactive memory
[root@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
0 0 0 1543828 1254616 4325384 0 0 1 1 1 5 2 1 97 0 0
inact 是 the page cache 中 inactive memory 的数目。
active 是 the page cache 中 active memory 的数目。
-f, --forks
[root@localhost ~]# vmstat -f
1688718 forks
显示自系统引导(boot)以来的fork数量。这包括fork、vfork和clone系统调用,相当于创建的任务总数。每个进程由一个或多个任务表示,具体取决于线程的使用情况。
-m, --slabs
Displays slabinfo.
[root@localhost ~]# vmstat -m Cache Num Total Size Pages fuse_request 80 80 400 20 fuse_inode 21 21 768 21 nf_conntrack_ffff970adafd8000 0 0 320 25 nf_conntrack_ffffffff9dd11640 1200 1200 320 25 rpc_inode_cache 25 25 640 25 fat_inode_cache 432 682 720 22 fat_cache 2346 2346 40 102 kvm_vcpu 0 0 13056 2 xfs_dqtrx 0 0 528 31 xfs_dquot 0 0 488 16 xfs_ili 95208 95208 168 24 xfs_inode 118541 118541 960 17 xfs_efd_item 95 209 416 19 xfs_log_ticket 792 792 184 22 bio-3 407 500 320 25 i915_dependency 0 0 64 64 i915_request 0 0 576 28 drm_i915_gem_object 787 1218 768 21 kcopyd_job 0 0 3312 9 dm_uevent 0 0 2608 12 dm_rq_target_io 0 0 136 30 ip6_dst_cache 306 306 448 18 RAWv6 104 104 1216 26 UDPLITEv6 0 0 1216 26 UDPv6 104 104 1216 26 tw_sock_TCPv6 0 0 256 16 TCPv6 60 60 2112 15 cfq_queue 0 0 232 17 bsg_cmd 0 0 312 26 mqueue_inode_cache 36 36 896 18 hugetlbfs_inode_cache 78 78 608 26 configfs_dir_cache 46 46 88 46 dquot 0 0 256 16 kioctx 112 112 576 28 userfaultfd_ctx_cache 0 0 192 21 pid_namespace 14 14 2200 14 posix_timers_cache 608 608 248 16 UDP-Lite 0 0 1088 30 flow_cache 0 0 144 28 UDP 120 120 1088 30 tw_sock_TCP 240 320 256 16 TCP 64 64 1984 16 dax_cache 21 21 768 21 blkdev_queue 52 52 2456 13 blkdev_ioc 195 195 104 39 user_namespace 68 68 480 17 sock_inode_cache 1208 1300 640 25 fsnotify_mark_connector 145872 146880 24 170 net_namespace 24 24 5248 6 shmem_inode_cache 1979 2256 680 24 Acpi-State 2943 3417 80 51 task_delay_info 900 900 112 36 taskstats 96 96 328 24 proc_inode_cache 89554 90336 656 24 Cache Num Total Size Pages sigqueue 225 275 160 25 bdev_cache 76 76 832 19 kernfs_node_cache 30202 30566 120 34 mnt_cache 13601 14217 384 21 inode_cache 24273 24273 592 27 dentry 421617 421617 192 21 iint_cache 0 0 128 32 avc_xperms_node 1606 1606 56 73 avc_node 18274 18368 72 56 selinux_inode_security 241622 245004 40 102 buffer_head 629616 629616 104 39 vm_area_struct 31754 32346 216 18 mm_struct 260 260 1600 20 files_cache 300 300 640 25 signal_cache 506 532 1152 28 sighand_cache 353 405 2112 15 task_xstate 780 780 1088 30 task_struct 558 637 4160 7 anon_vma 10598 11679 80 51 shared_policy_node 3393 3655 48 85 numa_policy 31 31 264 31 radix_tree_node 43204 43204 584 28 idr_layer_cache 375 375 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 16 dma-kmalloc-512 0 0 512 16 dma-kmalloc-256 0 0 256 16 dma-kmalloc-128 0 0 128 32 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 21 dma-kmalloc-96 0 0 96 42 kmalloc-8192 84 108 8192 4 kmalloc-4096 701 744 4096 8 kmalloc-2048 945 1040 2048 16 kmalloc-1024 5819 7920 1024 16 kmalloc-512 1974 4496 512 16 kmalloc-256 12207 13792 256 16 kmalloc-192 8287 8379 192 21 kmalloc-128 5374 6496 128 32 kmalloc-96 10878 10878 96 42 kmalloc-64 350630 353536 64 64 kmalloc-32 136946 138752 32 128 kmalloc-16 73134 75520 16 256 kmalloc-8 87552 87552 8 512 kmem_cache_node 320 320 64 64 kmem_cache 144 144 256 16
FIELD DESCRIPTION FOR SLAB MODE
cache: Cache name
num: Number of currently active objects
total: Total number of available objects
size: Size of each object
pages: Number of pages with at least one active object
-s, --stats
显示各种事件计数器和内存统计信息。
[root@localhost ~]# vmstat -s 7890812 K total memory 856064 K used memory 4648752 K active memory 1388784 K inactive memory 1101524 K free memory 17264 K buffer memory 5915960 K swap cache 8126460 K total swap 0 K used swap 8126460 K free swap 15121809 non-nice user cpu ticks 15133 nice user cpu ticks 5119922 system cpu ticks 690449365 idle cpu ticks 57602 IO-wait cpu ticks 0 IRQ cpu ticks 5756 softirq cpu ticks 0 stolen cpu ticks 3828326 pages paged in 7187387 pages paged out 0 pages swapped in 0 pages swapped out 582941861 interrupts 2668486471 CPU context switches 1667480478 boot time 1858539 forks
-d, --disk
Report disk statistics
[root@localhost ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 50328 1098 5830005 346513 251291 81504 13311417 8074414 0 1322
dm-0 50608 0 5753849 362039 294970 0 13273320 29031220 0 1321
dm-1 91 0 4928 2075 0 0 0 0 0 1
dm-2 94 0 6729 1398 17 0 4440 119 0 1
sdb 3536 29173 386910 21114 2 0 2 18 0 6
FIELD DESCRIPTION FOR DISK MODE Reads total: Total reads completed successfully merged: grouped reads (resulting in one I/O) sectors: Sectors read successfully ms: milliseconds spent reading Writes total: Total writes completed successfully merged: grouped writes (resulting in one I/O) sectors: Sectors written successfully ms: milliseconds spent writing IO cur: I/O in progress (正在进行的I/O操作) s: seconds spent for I/O
-D, --disk-sum
Report some summary statistics about disk activity.
[root@localhost ~]# vmstat -D
5 disks
4 partitions
104657 total reads
30271 merged reads
11982421 read sectors
733139 milli reading
546326 writes
81506 merged writes
26589723 written sectors
37106137 milli writing
0 inprogress IO
2652 milli spent IO
[root@localhost ~]# strace -e trace=open vmstat
......
open("/proc/meminfo", O_RDONLY) = 3
open("/proc/stat", O_RDONLY) = 4
open("/proc/vmstat", O_RDONLY) = 5
......
https://zhuanlan.zhihu.com/p/444321207
swappiness=0究竟意味着什么?
极客时间:Linux 性能优化实战
极客时间:Linux 内核技术实战课
Systems.Performance.Enterprise.and.the.Cloud.2nd.Edition
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。