3. 搞玄学?看看进程切换

看看进程切换

$ vmstat 2
procs  ------------memory------------  --swap-- -----io---- ---system---- ---cpu--
 r  b  swpd     free    buff    cache   si   so    bi    bo    in      cs us sy id 
39  0     0 10823876 2415652 46400008    0    0 28828  3775 190521 308902 16 27 54  
 8  6     0 10856772 2415652 46400248    0    0 23784  2222 186975 310175 12 18 69  
 5  0     0 10876804 2415656 46400552    0    0 28852  3420 182219 295182 12 25 59  
29  0     0 10845268 2415656 46401136    0    0 24908  3680 189906 308567 14 24 59  
26  1     0 10891356 2415656 46401156    0    0 20640  4059 187160 309603 14 23 62
 3  0     0 10946284 2415656 46401596    0    0 17920  3622 185902 309350 13 21 65
15  1     0 10894820 2415656 46402168    0    0 19968  4660 180810 302132 14 29 57
 6  1     0 10922464 2415656 46402156    0    0  7680  1375 171290 297429  8 11 81

vmstat 能汇报操作系统当前的状态, 看上面的第二行, 不同的参数划分成不同类下的指标

  • 进程相关(procs指标)

    • r = ready. 就绪进程的数量

    • b = blocked. 不可中断的进程数量

  • 内存相关(memory指标)

    • swpd = swapped. 虚拟内存使用量

    • free 还有多少内存可用

  • 进程中断数量(system指标)

    • in = interrupted. 中断数量(包含进程/线程的中断), 包括因为等待IO, 以及时间片到期等因素

    • cs = context switch. 上下文切换数量

pidstat 能汇报上下文切换的情况:

  • cswtch: context switch, 每秒上下文切换次数

  • nv-cswtch: non-voluntary-context-switch, 每秒非自愿上下文切换次数(指时间片到期)

与进程相关的API

  • exec: 执行一个新任务, 只不过使用另一个App的镜像

  • fork: 出一个子进程, 此时父进程如果

    • 不等子进程就直接退出, 子进程全都变成孤儿进程变成1号进程的子进程. 这招我们在pause容器的设计的时候说过, 我们需要pause作为1号进程来负责收集并妥善给所有孤儿进程善后

    • 不使用wait来收集子进程的信息, 故而子进程的进程描述符依旧留在操作系统中, 占用PID信息

Last updated

Was this helpful?