stat

vmstat

使用 vmstat 命令,可以查看到上下文切换次数这个指标,如下表所示,每隔 1 秒输出 1 组数据:

$ vmstat 1
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      0 5921968 1536888 16818972    0    0     0    75    1    0  4  2 95  0  0

上表的 cs(context switch)就是每秒上下文切换的次数,按照不同场景,CPU 上下文切换还可以分为中断上下文切换、线程上下文切换和进程上下文切换三种,但是无论是哪一种,过多的上下文切换,都会把 CPU 时间消耗在寄存器、内核栈以及虚拟内存等数据的保存和恢复上,从而缩短进程真正运行的时间,导致系统的整体性能大幅下降。vmstat 的输出中 us、sy 分别用户态和内核态的 CPU 利用率,这两个值也非常具有参考意义。

vmstat 的输只给出了系统总体的上下文切换情况,要想查看每个进程的上下文切换详情(如自愿和非自愿切换),需要使用 pidstat,该命令还可以查看某个进程用户态和内核态的 CPU 利用率。

dstat

--total-cpu-usage-- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai stl| read  writ| recv  send|  in   out | int   csw
  4   1  95   0   0| 735B  592k|   0     0 |   0     0 |5465    33k
  8   3  90   0   0|   0   168k| 428k  429k|   0     0 |  10k   41k
  3   1  97   0   0|   0   208k| 128k  149k|   0     0 |8106    31k

pidstat

Linux 4.15.0-58-generic (master) 	11/19/2019 	_x86_64_	(8 CPU)

01:58:10 PM   UID       PID    %usr %system  %guest   %wait    %CPU   CPU  Command
01:58:10 PM     0         1    0.34    0.23    0.00    0.00    0.57     0  systemd
01:58:10 PM     0         2    0.00    0.00    0.00    0.00    0.00     2  kthreadd
01:58:10 PM     0         7    0.00    0.01    0.00    0.01    0.01     0  ksoftirqd/0
上一页
下一页