虚拟内存分析工具-vmstat

命令详解

vmstat - 主要用于查看虚拟内存的使用情况(vmstat virtual memory performance monitoring)

关于虚拟内存

在系统中运行的每个进程都需要使用到内存,但不是每个进程都需要每时每刻使用系统分配的内存空间。当系统运行所需内存超过实际的物理内存,内核会释放某些进程所占用但未使用的部分或所有物理内存,将这部分资料存储在磁盘上直到进程下一次调用,并将释放出的内存提供给有需要的进程使用。
在Linux内存管理中,主要是通过“调页Paging”和“交换Swapping”来完成上述的内存调度。调页算法是将内存中最近不常使用的页面换到磁盘上,把活动页面保留在内存中供进程使用。交换技术是将整个进程,而不是部分页面,全部交换到磁盘上。

分页(Page)写入磁盘的过程被称作Page-Out,分页(Page)从磁盘重新回到内存的过程被称作Page-In。当内核需要一个分页时,但发现此分页不在物理内存中(因为已经被Page-Out了),此时就发生了分页错误(Page Fault)。当系统内核发现可运行内存变少时,就会通过Page-Out来释放一部分物理内存。尽管Page-Out不是经常发生,但是如果Page-out频繁不断的发生,直到当内核管理分页的时间超过运行程序的时间时,系统性能就会急剧下降。这时的系统已经运行非常慢或进入暂停状态,这种状态亦被称作thrashing。

语法

vmstat [options] [delay] [count]

语法说明
vmstat 可以统计 处理器、内存、页面调度、IO块、traps、磁盘、以及cpu活动状况。
此命令首次统计的是自上次启动以来的平均情况。 随后的统计数据是在delay周期时间内的取样信息。不管是哪一种情况下,该命令统计的处理器和内存信息都是瞬时的。

命令选项

命令选项说明

delay - 更新的时间间隔,单位是秒。如果没有指定delay的话,就只会输出一条统计报告,这条统计报告中的内容是自启动以来的平均值。

count - 更新的次数,当定义了delay,而没有指定count的话,默认就是无限,不断地输出。

选项简称 完整选项名 含义
-a active 展示活跃和非活跃的内存
-f forks -f开关会展示出自从启动之后,系统总共fork的个数,它包括:fork、vfork、clone system call。就相当于创建的总任务数。取决于线程的使用,每个进程可以由一个或多个任务来表示
-m slabs 展示slab信息
-n one-header 头部信息只展示一次,而不是周期性地展示
-s stats 把各种事件计数器和内存统计放到一个表中展示,这种方式不会重复性地展示输出信息
-d disk 展示磁盘的统计信息
-D disk-sum 统计一些关于磁盘活动的汇总信息
-p partition 展示关于分区的详细信息
-S unit 使用指定单位显示。参数有 k 、K 、m 、M ,分别代表1000、1024、1000000、1048576字节(byte)。默认单位为K(1024 bytes)。注意:此选项并不改变si/so、bi/bo的展示
-t timestamp 在每一行中增加时间戳
-w wide 宽输出模式,在这种模式下,每行的输出宽度超过80个字符
-v version 展示版本信息并退出
-h help 展示帮助信息并退出

命令输出结果

下面对命令在不同模式下的输出结果进行说明:

虚拟内存模式下的输出

处理器
r: 表示处于运行状态的进程数量
b: 表示处于不可中断睡眠状态的进程数量

内存
swpd: 已使用的虚拟内存总量
free: 空闲内存总量
buff: 作为buffer使用的内存总量
cache: 作为cache使用的内存总量
inact: 不活跃内存的总量
active:活跃内存的总量

swap交换区
si: Amount of memory swapped in from disk (/s).即:每秒从磁盘读入虚拟内存的大小
so: Amount of memory swapped to disk (/s) 即:每秒从虚拟内存写入到磁盘的大小

IO
bi:Blocks received from a block device (blocks/s).即:每秒从块设备中接收的块数
bo:Blocks sent to a block device (blocks/s).即:每秒发送到块设备的块数

系统
in: The number of interrupts per second, including the clock. 即:每秒中断的个数,包括时钟
cs: The number of context switches per second.即:每秒执行上下文切换的个数

CPU
下面这些是占总的CPU时间的比例
us: 运行非内核代码的时间。(用户时间,包括:nice time)
sy: 运行内核代码的时间。(系统时间)
id: 空闲时间
wa: 等待IO的时间。(被包含到空闲时间中)
st: 虚拟主机占用的时间

磁盘模式下的输出

读操作
total: 已完成的成功读取次数
merged: 被合并的读操作的个数
sectors: 成功读取的分区数
ms: 读操作耗费的毫秒数

写操作
total: 已完成的成功写次数
merged: 被合并的写操作的个数
sectors: 成功写的分区数
ms: 写操作耗费的毫秒数

IO
cur: 进行中的IO
s: IO花费的秒数

磁盘分区模式下的输出

reads: 提交到此分区的读操作个数
read sectors: 此分区总的读取分区数
writes: 提交到此分区的总的写操作个数
requested writes: 此分区总的写请求个数

SLAB模式下的输出

cache:缓存名称
num :当前活跃对象的个数
total:可用对象的总数
size : 每个对象的大小
pages: 至少含有一个活跃对象的页面个数

常用示例

[root@01r5840viotftelmrcx2Z ~]#
[root@01r5840viotftelmrcx2Z ~]# vmstat -a 2 3
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 1114348 3510560 10542308    0    0     8    86    6    3  1  0 98  0  0
 0  1      0 1111472 3510628 10542756    0    0     4   988 3058 3500  1  0 98  1  0
 0  1      0 1112836 3510600 10542824    0    0     0   540 2334 2758  1  0 98  0  0
[root@01r5840viotftelmrcx2Z ~]#


[root@01r5840viotftelmrcx2Z ~]# vmstat -s
     15732096 K total memory
      2244076 K used memory
     10517148 K active memory
      3513080 K inactive memory
      1127760 K free memory
       146384 K buffer memory
     12213876 K swap cache
            0 K total swap
            0 K used swap
            0 K free swap
      4568779 non-nice user cpu ticks
           19 nice user cpu ticks
       595514 system cpu ticks
    404812994 idle cpu ticks
      1281694 IO-wait cpu ticks
            0 IRQ cpu ticks
        84346 softirq cpu ticks
            0 stolen cpu ticks
     32875380 pages paged in
    354599478 pages paged out
            0 pages swapped in
            0 pages swapped out
   1144664542 interrupts
   1690316285 CPU context switches
   1607075802 boot time
        46254 forks
[root@01r5840viotftelmrcx2Z ~]#

以M为单位展示内存的使用情况

[root@01r5840viotftelmrcx2Z ~]# vmstat -S M
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   1085    142  12611    0    0     8    86    9    6  1  0 98  0  0
[root@01r5840viotftelmrcx2Z ~]# 

参考文献

vmstat命令
vmstat命令
vmstat命令

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容