Linux性能优化实战

平均负载

预先安装stress和sysstat,如apt install stress sysstat

strees是linux压力测试工具,用来模拟负载升高
sysstat是linux性能工具,用来监控和分析系统的性能,主要用到的两个命令

  1. mpstat用来实时查看每个cpu的性能指标及所有cpu的平均指标
  2. pidstat是进程性能分析工具,实时查看进程的cpu、内存、IO以及上下文切换等性能指标

测试前的平均负载情况

root@ubuntu:/home/jyxmust# uptime
 23:13:37 up  2:09,  1 user,  load average: 0.31, 0.54, 0.76

场景一、CPU密集型进程

模拟cpu使用率100%的场景

root@ubuntu:/home/jyxmust# stress --cpu 1 --timeout 600
stress: info: [9479] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

第二个终端查看平均负债变化,一分钟的平均负载慢慢增加到1.23

uptime

Linux性能优化实战_第1张图片

mpstat -P ALL 5

Linux性能优化实战_第2张图片

CPU的使用率为100%,但iowait只有0,说明了平均负载升高是由于CPU使用率为100%,到底是哪个进程导致的呢

pidstat -u 5 1

Linux性能优化实战_第3张图片
可以看出stress进程cpu使用率100%

场景二、I/O密集型进程

stress -i 1 --timeout 600
watch -d uptime
mpstat -P ALL 5 1
pidstat -u 5 1

Linux性能优化实战_第4张图片
可以看出这次由于iowait的升高
Linux性能优化实战_第5张图片
还有stress进程导致的

大量进程的场景

当系统中运行进程超过cpu运行能力,就会出现等待cpu的进程

stress -c 8 --timeout 600
pidstat -u 5 1

Linux性能优化实战_第6张图片

8个stress进程在争夺2个cpu,每个进程等待cpu的时间(也就是%wait列)高达88.45%,这些超过cpu计算能力的进程,最终导致cpu过载

总结

1、平均负载有可能是cpu密集型进程导致的
2、平均负载高并不一定代表cpu使用率高,还有可能是IO更繁忙了
3、当出现负载高的情况时,你可以使用mpstat、pidstat等工具,辅助分析负载的来源

上下文切换

sysbench是多线程的基准测试工具,来模拟系统多线程调度切换

预先安装sysbench和sysstat包,如 apt install sysbench sysstat

先使用vmstat查看空闲系统的上下文切换次数:

vmstat 1 1

在这里插入图片描述
r :正在运行和等待cpu的进程数
b:处于不可中断睡眠的进程数

上下文切换次数cs是481,中断次数in是147,r和b都是0,因为没有运行其他任务,这就是空闲系统的上下文切换次数

操作和分析

在第一个终端运行sysbench,模拟系统多线程调度的瓶颈:

sysbench --threads=10 --max-time=300 threads run

Linux性能优化实战_第7张图片
Linux性能优化实战_第8张图片
cs列的上下文切换次数上升到144万,r列的就绪队列的长度达到8,远远超过了系统cpu的个数2,所以肯定有大量的cpu竞争

us和sy列,这两列的cpu使用率加起来上升到了100%,说明cpu主要被内核占用了

结合这几个指标,可以得出系统的就绪队列多长,也就是正在运行和等待cpu的进程数过多,导致了大量的上下文切换,而上下文切换又导致了系统的cpu的占用率升高

那么到底是什么进程导致的问题

pidstat -w -u 1

Linux性能优化实战_第9张图片
cpu使用率升高是sysbench导致的,但上下文切换是来着其他进程。

pidstat -wt 1

-wt 表示输出线程的上下文切换指标
Linux性能优化实战_第10张图片
sysbench进程的上下文切换次数看起来并不多,但它的子线程的上下文切换次数很多,所以罪魁祸首还是sysbench线程。

除了上下文切换次数、还有中断次数也急速变多了,中断只发生内核态,pidstat只是进程性能分析工具,我们可以从/proc/interrupts文件读取,/proc是Linux的一个虚拟文件系统,用于内核空间与用户空间之间的通信,/proc/interrupts提供了只读的中断使用信息

watch -d cat /proc/interrupts

Linux性能优化实战_第11张图片

总结

通过sysbench案例来对上下文切换问题进行分析,碰到上下文切换次数过多的问题,可以借助vmstat、pidstat和/proc/interrupts等工具,来辅助排查性能问题的根源

你可能感兴趣的:(Linux,/,操作系统)