I/O密集型进程大量进程的场景以及上下文切换

Posted my_captain

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I/O密集型进程大量进程的场景以及上下文切换相关的知识,希望对你有一定的参考价值。

一. 上节回顾

1. 什么是进程?什么是线程?它们之间的区别?

2. CPU命令

  查看物理CPU的个数

  查看每个物理CPU的核数

  查看逻辑CPU的个数

3. CPU架构

  从处理器层面查看

  从操作系统层面查看

4. uptime

  load average:三个负载的含义

  平均负载和CPU使用率

5. 场景一:CPU密集型进程

二. 场景二:I/O密集型进程

1. 在第一个终端里运行

stress -ng -i 1 --hdd 1 --timeout 600  #hdd表示读写临时文件
或者
stress -i 1 --timeout 600
或者stress -d 1 -t 600

2. 在第二个终端里运行

watch -d uptime

3. 在第三个终端里使用mpstat查看CPU使用率的变化情况

mpstat -P ALL 5

在运行的过程中,1分钟的平均负载会慢慢不断升高,其中一个CPU使用率升高超过90%以上,iowait也很高,说明平均负载的升高是由于iowait的升高导致的

4. 查看是哪个进程导致的

pidstat -u 5 1

stress -ng -hdd

三. 场景三:大量进程的场景

当系统中运行进程超出CPU运行能力时,是不是出现等待CPU的进程情况

1. 在第一个终端中模拟12个进程

stress -c 12 --timeout 600

由于系统只有4个CPU,明显比12个进程要少得多,因此系统CPU处于严重过载状态

2. 在第二个终端中使用uptime查看

平均负载高达load average:11.43

3. 在第三个终端运行pidstat看一下进程的情况

可以看出,12个进程在抢夺4个CPU,每个进程等待CPU时间(也就是%wait)高达67%,明显超出CPU的计算范围,最终导致CPU过载

 

总结一下:

CPU使用率,是单位时间内CPU繁忙情况的统计,跟平均负载并不一定完全对应

(1) CPU密集型进程:使用大量CPU会导致平均负载升高,此时这两者是一致的

(2) I/O密集型进程:等待I/O也会导致平均负载升高,但CPU使用率(user%)不一定很高

(3) 大量等待CPU的进程调度也会导致平均负载升高

 

 

 

以上是关于I/O密集型进程大量进程的场景以及上下文切换的主要内容,如果未能解决你的问题,请参考以下文章

CPU上下文切换(上)

2017-2018-1 20179205《Linux内核原理与设计》第九周作业

进程和线程

Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题

Python36 多线程多进程的使用场景

多进程