IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

vmstat 命令

生活在别处 2011-06-23 13:41:41 累计浏览 3,232 次
本机暂存

    vmstat [-a] [-n] [delay [ count]]

     vmstat [-f] [-s] [-m]

     vmstat [-S unit]

     vmstat [-d]

     vmstat [-p disk partition]

     vmstat [-V]

     vmstat, Virtual Meomory Statistics(虚拟内存统计), 可对操作系统的虚拟内存、进程、CPU活动进行监视. 它是对系统的整体情况进行统计, 但不能针对某个进程进行深入分析.

  • -a 开启 or 关闭显示 active/inactive 内存
  • -n 开启 or 关闭周期性循环输出时, 输出的头部信息仅显示一次
  • delay 两次输出之间的延迟时间
  • count 按照这个指定的时间间隔统计的次数
  • -f 开启 or 关闭显示自系统启动后 forks 的数目, 包括(fork, vfork and clone system calls)
  • -m 显示 slabinfo
  • -s 开启 or 关闭以表格形式显示的 event counters and memory statistics
  • -d 显示 disk statistics
  • -p 显示参数所指定的分区的详细信息
  • -S (k|K|m|M) 以k|kB|m|MB为单位显示,对应转换(1000|1024|1000000|1048576)
  • V 打印版本信息
  • [root@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
     0  0    284  66240 165924 419584    0    0     0     5    2    1  0  0 100  0  0
    
    #to output active/inactive memory info
    [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    284  65620  86928 833976    0    0     0     5    3    1  0  0 100  0  0
    
    #To run vmstat with 2 updates, five seconds apart
    [root@localhost ~]# vmstat 5 2
    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    284  65620 165924 419824    0    0     0     5    3    1  0  0 100  0  0
     0  0    284  65620 165924 419828    0    0     0     7 1014   64  0  0 100  0  0

        procs, 下面三种状态的进程数

  • r 等待运行的进程数
  • b 在等待的进程数(通常在等待 IO)
  • w 可进入运行队列但被替换的进程(Solaris vmstat)
  •     memory, 虚拟内存和实存信息

  • swpd 虚拟内存使用情况, unit:kb
  • free 空闲的内存, unit:kb
  • buff 被用来做 buffer 的内存数, unit:kb
  • cache 被用来做 cache 的内存数, unit:kb
  • inactive 闲置的内存,unit:kb, -a显示
  • active 活动内存, unit:kb,-a显示
  •     swap, 显示磁盘与内存每秒的交换

  • si 从磁盘交换到内存的交换页数量, unit:kb
  • so 从内存交换到磁盘的交换页数量, unit:kb
  •     io, 显示块设备每秒发送和收到的块数

  • bi 发送到块设备的块数, unit: blocks
  • bo 从块设备接收到的数据, unit:blocks
  •     system

  • in 每秒的中断数, 包括时钟中断
  • cs 每秒的环境切换次数
  •     CPU, CPU 故障时间的百分比, 在多处理器系统上, 这是全部处理器的平均值

  • us CPU 使用时间(except kernel)
  • sy CPU 系统使用时间(内核)
  • id 闲置时间
  • wa 等待 IO 的时间
  • st
  •     disk, 显示每秒的磁盘操作, s 表示 scsi 盘, 0 表示盘号

        pages, 每秒页面调度活动数量的信息(Solaris vmstat)

  • re 回收的页面
  • mf 非常严重错误的页面
  • pi 进入页面数, unit:KB
  • po 出页面数, unit:KB
  • fr 空也的页面数, unit:KB
  • de 提前读入的页面中的未命中数
  • sr 通过时钟算法扫描的页面
  •     fault, 显示每秒的中断数(Solaris vmstat)

  • in 设备中断
  • sy 系统中断
  • cy cpu交换
  •     准测

  • r40
  •     表明磁盘io没有也许存在不合理的平衡, 或者对磁盘操作比较频繁

  • 如果 r 经常大于 4 , 且 id 经常少于 40, 表示 CPU 的负荷很重
  • 如果 pi, po 长期不等于 0, 表示内存不足
  • 如果 disk 经常不等于 0, 且在 b 中的队列大于 3, 表示 io 性能不好
  • 通过 vmstat 识别 CPU 瓶颈

        r(运行队列)展示了正在执行和等待 CPU 资源的任务个数. 当这个值超过了 CPU 数目, 就会出现CPU瓶颈

        获得 CPU 个数的命令(Linux):

    [root@localhost ~]# cat /proc/cpuinfo | grep processor | wc -l

        当 r 值超过了CPU个数, 就会出现CPU 瓶颈, 解决办法大体如下

  • 最简单的就是 增加 CPU个数
  • 通过调整任务执行时间, 如大任务放到系统不繁忙的情况下进行执行, 进尔平衡系统任务
  • 调整已有任务的优先级
  • 通过 vmstat 识别 CPU 满负荷

        vmstat 中 CPU 的度量是百分比. 当us+sy≈100时, 表示 CPU 正在接近满负荷工作. 但要注意的是, CPU 满负荷工作并不能说明什么, *nix 总是试图要 CPU 尽可能的繁忙, 使得任务的吞吐量最大化. 唯一能够确定 CPU 瓶颈的还是 r(运行队列) 的值.

    通过 vmstat 识别 RAM 瓶颈

        数据库服务器都只有有限的 RAM, 出现内存争用现象是常见问题

        首先察看 RAM 的数量, 命令如下

    [root@localhost ~]# free
                 total       used       free     shared    buffers     cached
    Mem:       1035292     969548      65744          0     165924     419720
    -/+ buffers/cache:     383904     651388
    Swap:      2096472        284    2096188

        也可使用 top 等其他命令来显示RAM.

         当内存的需求大于RAM的数量, 服务器启动虚拟内存机制, 通过虚拟内存, 可以将 RAM 段移到 SWAP DISK 的特殊磁盘段上, 这样会出现虚拟内存的页导出和页导入现象, 页导出并不能说明 RAM 瓶颈, 虚拟内存系统经常会对内存段进行页导出, 但页导入操作就表明了服务器需要更多的内存了, 页导入需要从 SWAP DISK 上将内存段复制回 RAM, 导致服务器速度变慢.

        解决办法有如下几种

  • 加大 RAM
  • 改小 SGA, 使得对 RAM 需求减少
  • 减少 RAM 的需求(减少 PGA etc)
  • 同分类推荐文章

    1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
    2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
    3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

    查看更多 DevOps 文章 →

    建议继续学习

    1. linux内核研究笔记(一)内存管理 – page介绍 (累计阅读 10,487)
    2. Linux常用系统信息查看命令 (累计阅读 8,655)
    3. 查看 CPU, Memory, I/O and NetFlow (累计阅读 8,134)
    4. memory prefetch浅析 (累计阅读 7,458)
    5. 使用nginx记日志 (累计阅读 6,808)
    6. SSD磨损数据的分析报告 (累计阅读 5,167)
    7. 内存学习――为什么需要虚拟内存 (累计阅读 5,130)
    8. MYSQL数据库网卡软中断不平衡问题及解决方案 (累计阅读 4,764)
    9. linux磁盘管理学习笔记补充:连接ln、虚拟内存 (累计阅读 4,027)
    10. 关于虚拟内存的一点理解 (累计阅读 3,878)