xiaohanliang
OS
OS
  • hi
  • PROCESS
    • 0. 你的程序是怎么用内存的
    • 1. 为什么内存要区分堆与栈
    • 2. 什么叫你的程序
    • 3. 搞玄学?看看进程切换
    • 4. 进程是怎样调度的
    • 5. 理解进程线程有啥用
    • 6. 没有人真正见过的进程通信
    • 7. [WIP]mutex的起源CAS
    • 8. [WIP]mutex的下一步信号量
    • 9. [WIP]如何人为制造死锁
    • 10. 怎么什么东西都是fd
    • 11. IO各种模型
    • 12. Epoll内部是怎么工作的
  • NETWORK DEVICES
    • 1. 一个新的namesapce
    • 2. veth对讲机
    • 3. 如何靠网桥连接对讲机
    • 4. 左耳进右耳出的tun设备
    • 5. 如何用iptables改包头
    • 6. 在ip报头上再包个头
    • 7.如何用vxlan隧道分割局域网
    • 8. 通过多播组的方式获取mac
    • 9. 自动维护的fdb/arp表
    • 10. [WIP]macvlan网卡
Powered by GitBook
On this page
  • 看看进程切换
  • 与进程相关的API

Was this helpful?

  1. PROCESS

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

Previous2. 什么叫你的程序Next4. 进程是怎样调度的

Last updated 4 years ago

Was this helpful?

看看进程切换

$ 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

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

  • 进程相关(procs指标)

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

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

  • 内存相关(memory指标)

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

    • free 还有多少内存可用

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

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

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

$ pidstat -w 2
[xiaohan@cm-be-test-5bd6e93d ~]$ pidstat -w 2
Linux  (cm-be-test-5bd6e93d)         2020年11月18日  _x86_64_        (28 CPU)

10时58分21秒       PID   cswch/s nvcswch/s  Command
10时58分23秒       115     10.00      0.00  nginx
10时58分23秒       116     10.00      0.00  nginx
10时58分23秒       118     10.00      0.00  nginx
10时58分23秒       119     10.00      0.00  nginx
10时58分23秒       120     10.00      0.00  nginx
10时58分23秒       121     10.00      0.00  nginx
10时58分23秒       122      9.50      0.00  nginx
10时58分23秒     22965      0.50      0.00  pidstat
  • cswtch: context switch, 每秒上下文切换次数

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

与进程相关的API

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

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

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

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

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

vmstat
pidstat