【day1】
平均负载
1.查看平均负载命令 uptime
[root@localhost ~]# uptime 13:24:46 up 211 days, 4:50, 1 user, load average: 0.20, 0.23, 0.20
load average后的3个值分别表示最近1分钟,5分钟,15分钟服务器的负载。这里的负载指的是系统处于可运行状态和不可中断状态的进程数,也就是平均活跃进程数,这个也是平均负载的定义。这个值并不是CPU的使用率。
load average后的值是和CPU的核心数相关的,理想状态下,每CPU核心上运行一个进程。
2.查看CPU核心数
[root@localhost ~]# grep 'model name' /proc/cpuinfo | wc -l 4
以本机为例,平均负载在4以下,说明都是未过载的情况。
以上可知,系统负载过高可能的原因有下面几个
a.系统进程过多,导致负载过高,此时CPU使用率也会很高
b.I/O密集型进程,等待IO也会导致负载过,此时CPU使用率不一定高
c.大量等待CPU的进程调度也会导致负载过高,此时的CPU使用率也比较高
我们可以用下面几个命令辅助查看CPU和等待IO的状态
iostat、mpstat、pidstat
[root@localhost ~]# mpstat -P ALL Linux 2.6.32-573.26.1.el6.x86_64 (localhost.localdomain) 02/08/2023 _x86_64_ (4 CPU) 01:37:39 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle 01:37:39 PM all 0.05 0.00 0.07 0.07 0.00 0.00 0.00 0.00 99.82 01:37:39 PM 0 0.04 0.00 0.04 0.12 0.00 0.00 0.00 0.00 99.80 01:37:39 PM 1 0.07 0.00 0.16 0.04 0.00 0.00 0.00 0.00 99.73 01:37:39 PM 2 0.04 0.00 0.03 0.09 0.00 0.00 0.00 0.00 99.84 01:37:39 PM 3 0.03 0.00 0.03 0.02 0.00 0.00 0.00 0.00 99.91
【day2】
CPU上下文切换
CPU上下文:CPU寄存器和程序计数器
CPU上下文切换:就是将前一个任务的CPU上下文保存起来,然后再加载后一个任务的CPU上下文,最后再跳转到程序计数器指向的最新的位置,运行新任务。
CPU上下文切换分为以下几种场景
进程上下文切换
线程上下文切换
中断上下文切换
线程和进程的最大区别:线程是调度的基本单位,进程是资源拥有的基本单位。
-
当进程只有一个线程时,可以理解为线程就是进程。
-
当进程拥有多个线程时,这些线程会共享虚拟内存和全局变量等资源,这些资源在上下文切换时是不需要修改的。
-
线程也有自己的私有数据,比如栈和寄存器等,这些在上下文切换时也是需要保存的。
中断处理比进程拥有更高的优先级,所以中断处理会打断进程的正常调度和执行。而在打断其他进程时,就需要将进程当前的状态保存下来,这样在中断结束后,进程可以从之前的状态恢复运行。