Linux命令行工具之pidstat命令

原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11484624.html

 

pidstat命令就可以帮助我们监测到具体线程的上下文切换

通过pidstat -help命令,可以查看到有以下几个常用参数可以监测线程的性能:

常用参数:

  • -u:默认参数,显示各个进程的cpu使用情况;
  • -r:显示各个进程的内存使用情况;
  • -d:显示各个进程的I/O使用情况;
  • -w:显示每个进程的上下文切换情况;
  • -p:指定进程号;
  • -t:显示进程中线程的统计信息

首先,通过pidstat -w -p pid 命令行,我们可以查看到进程的上下文切换:

cswch/s:每秒主动任务上下文切换数量

nvcswch/s:每秒被动任务上下文切换数量

 

之后,通过pidstat -w -p pid -t 命令行,我们可以查看到具体线程的上下文切换:

Note:

有两列内容是需要重点关注对象。一个是 cswch ,表示每秒自愿上下文切换(voluntary context switches)的次数,另一个则是nvcswch ,表示每秒非自愿上下文切换(non voluntary context switches)的次数。

自愿上下文切换 cswch

是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。

非自愿上下文切换 nvcswch

则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU时,就容易发生非自愿上下文切换。

 

每秒上下文切换多少次才算正常呢?

这个数值其实取决于系统本身的 CPU 性能。如果系统的上下文切换次数比较稳定,那么从数百到一万以内,都应该算是正常的。但当上下文切换次数超过一万次,或者切换次数出现数量级的增长时,就很可能已经出现了性能问题。

需要根据上下文切换的类型,再做具体分析。比方说:

  • 自愿上下文切换变多了,说明进程都在等待资源,有可能发生了 I/O 等其他问题;
  • 非自愿上下文切换变多了,说明进程都在被强制调度,也就是都在争抢 CPU,说明 CPU 的确成了瓶颈;
  • 中断次数变多了,说明 CPU 被中断处理程序占用,还需要通过查看 /proc/interrupts 文件来分析具体的中断类型。

 

posted @ 2019-09-08 10:31  李白与酒  阅读(1714)  评论(0编辑  收藏  举报