11 Vmstat内存信息
vmstat(Virtual Memory Statistics 虚拟内存统计) 命令用来显示Linux系统虚拟内存状态,也可以报告关于进程、内存、I/O等系统整体运行状态。
虚拟内存运行原理
在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。
分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。
当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。经管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程式的时间时,系统效能会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing(颠簸)。
yum install -y sysstat
Usage:
vmstat [options] [delay [count]]
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
-a:显示活跃和非活跃内存
-f:显示从系统启动至今的fork数量 。
-m:显示slabinfo
-n:只在开始时显示一次各字段名称。
-s:显示内存相关统计信息及多种系统活动数量。
delay:刷新时间间隔。如果不指定,只显示一条结果。
count:刷新次数。如果不指定刷新次数,但指定了刷新时间间隔,这时刷新次数为无穷。
-d:显示磁盘相关统计信息。
-p:显示指定磁盘分区统计信息
-S:使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)
-V:显示vmstat版本信息。
[root@k8s-master02 ~]# vmstat 3 100
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 1571520 2084 1785444 0 0 0 2 18 3 0 0 100 0 0
| Procs(进程) | 说明 |
|---|---|
| r: | 运行队列中进程数量(等待执行的任务数),这个值也可以判断是否需要增加CPU。( 当这个值超过了cpu个数,就会出现cpu瓶颈。 ) |
| b | 等待IO的进程数量。 |
| Memory(内存) | 说明 |
|---|---|
| swpd | 正在使用虚拟内存大小, 单位k。 如果swpd的值不为0,表示物理内存可能不足了,但是如果SI,SO的值长期为0,这种情况不会影响系统性能。 |
| free | 空闲物理内存大小。 |
| buff | 用作缓冲的内存大小。 对块设备的读写进行缓冲 |
| cache | 用作缓存的内存大小,如果cache的值大的时候,说明cache处的文件数多,如果频繁访问到的文件都能被cache处,那么磁盘的读IO bi会非常小。 |
| Swap | 说明 |
|---|---|
| si | 每秒从交换区写到内存的大小,由磁盘调入内存。 (单位:kb/s) |
| so | 每秒从内存写入交换区的内存大小,由内存调入磁盘。 (单位:kb/s) |
| inact | 非活跃内存大小,即被标明可回收的内存,区别于free和active (当使用-a选项时显示) |
| active | 活跃的内存大小 。 (当使用-a选项时显示) |
注意:内存够用的时候,这2个值都是0,如果这2个值长期大于0时,系统性能会受到影响,磁盘IO和CPU资源都会被消耗。有些朋友看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,不能光看这一点,还要结合si和so,如果free很少,但是si和so也很少(大多时候是0),那么不用担心,系统性能这时不会受到影响的。因为linux总是先把内存用光
| IO | 说明 |
|---|---|
| bi | 每秒读取的块数 |
| bo | 每秒写入的块数 |
注意:随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大。
| system(系统) | |
|---|---|
| in | 每秒中断数,包括时钟中断。 |
| cs | 每秒上下文切换数。 |
注意:上面2个值越大,会看到由内核消耗的CPU时间会越大。
| CPU(以百分比表示) | 说明 |
|---|---|
| us | 用户进程执行时间百分比(user time)。 us的值比较高时,说明用户进程消耗的CPU时间多,但是如果长期超50%的使用,那么我们就该考虑优化程序算法或者进行加速。 |
| sy | 内核系统进程执行时间百分比(system time)。 sy的值高时,说明系统内核消耗的CPU资源多,这并不是良性表现,我们应该检查原因。 |
| wa | IO等待时间百分比。 wa的值高时,说明IO等待比较严重,这可能由于磁盘大量作随机访问造成,也有可能磁盘出现瓶颈(块操作)。 |
| id | 空闲时间百分比 (包括IO等待时间) |
Free memory
This is RAM that’s not being used.
Wired memory
Information in this memory can’t be moved to the hard disk, so it must stay in RAM. The amount of Wired memory depends on the applications you are using.
Active memory
This information is currently in memory, and has been recently used.
Inactive memory
This information in memory is not actively being used, but was recently used.
For example, if you’ve been using Mail and then quit it, the RAM that Mail was using is marked as Inactive memory. This Inactive memory is available for use by another application, just like Free memory. However, if you open Mail before its Inactive memory is used by a different application, Mail will open quicker because its Inactive memory is converted to Active memory, instead of loading Mail from the slower hard disk.