聊聊Linux中CPU上下文切换( 四 )

vmstat 5 (每隔5s输出一组数据)

聊聊Linux中CPU上下文切换

文章插图
该命令输出信息中,各个字段以及含义:procs:procs 中有 r 和 b 列,它报告进程统计信息 。在上面的输出中,在运行队列(r)中有两个进程在等待 CPU 并有零个休眠进程(b) 。通常,它不应该超过处理器(或核心)的数量,如果你发现异常,最好使用 top 命令进一步地排除故障 。
  • r:等待运行的进程数 。
  • b:休眠状态下的进程数 。
memory: memory 下有报告内存统计的 swpd、free、buff 和 cache 列 。你可以用 free -m 命令看到同样的信息 。在上面的内存统计中,统计数据以千字节表示 , 这有点难以理解,最好添加 M 参数来看到以兆字节为单位的统计数据 。
  • swpd:使用的虚拟内存量 。
  • free:空闲内存量 。
  • buff:用作缓冲区的内存量 。
  • cache:用作高速缓存的内存量 。
  • inact:非活动内存的数量 。
  • active:活动内存量 。
swap:swap 有 si 和 so 列,用于报告交换内存统计信息 。你可以用 free -m 命令看到相同的信息 。
  • si:从磁盘交换的内存量(换入,从 swap 移到实际内存的内存) 。
  • so:交换到磁盘的内存量(换出,从实际内存移动到 swap 的内存) 。
I/O:I/O 有 bi 和 bo 列,它以“块读取”和“块写入”的单位来报告每秒磁盘读取和写入的块的统计信息 。如果你发现有巨大的 I/O 读写,最好使用 iotop 和 iostat 命令来查看 。
  • bi:从块设备接收的块数 。
  • bo:发送到块设备的块数 。
system:system 有 in 和 cs 列,它报告每秒的系统操作 。
  • in:每秒的系统中断数,包括时钟中断 。
  • cs:系统为了处理所以任务而上下文切换的数量 。
CPU:CPU 有 us、sy、id 和 wa 列,报告(所用的) CPU 资源占总 CPU 时间的百分比 。如果你发现异常 , 最好使用 top 和 free 命令 。
  • us:处理器在非内核程序消耗的时间 。
  • sy:处理器在内核相关任务上消耗的时间 。
  • id:处理器的空闲时间 。
  • wa:处理器在等待IO操作完成以继续处理任务上的时间 。
补充:pidstat命令查看进程的CPU上下文切换情况
笔者的环境是:Centos7
执行如下的命令:pidstat,查看进程的CPU上下文切换情况如果没有安装 , yum install sysstat安装即可
聊聊Linux中CPU上下文切换

文章插图
在结果中你能看到如下内容:
  • PID - 被监控的任务的进程号
  • %usr - 当在用户层执行(应用程序)时这个任务的cpu使用率,和 nice 优先级无关 。注意这个字段计算的cpu时间不包括在虚拟处理器中花去的时间 。
  • %system - 这个任务在系统层使用时的cpu使用率 。
  • %guest - 任务花费在虚拟机上的cpu使用率(运行在虚拟处理器) 。
  • %CPU - 任务总的cpu使用率 。在SMP环境(多处理器)中,如果在命令行中输入-I参数的话 , cpu使用率会除以你的cpu数量 。
  • CPU - 正在运行这个任务的处理器编号 。
  • Command - 这个任务的命令名称 。

推荐阅读