作者:低调的小男2502928607 | 来源:互联网 | 2023-09-04 16:38
自定义标题 1. CPU 2. CPU 使用率 3. 测试: 4. 总结
1. CPU cpu平均负载 uptime 或 top 查看 cpu 平均负载(平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,,它和 CPU 使用率并没有直接关系) $ uptime 02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88 当前时间 运行时间 正在登录用户数 1min 5min 15min
查看逻辑CPU个数 (当平均负载高于 CPU 数量 70% 的时候) grep 'model name' /proc/cpuinfo | wc -l 逻辑CPU个数
平均负载其实就是平均活跃进程数,那么最理想的,就是每个 CPU 上都刚好运行着一个进程,有了 CPU 个数,我们就可以判断出,当平均负载比 CPU 个数还大的时候,系统已经出现了过载。 如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。 但如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。 反过来,如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了 假设我们在一个单 CPU 系统上看到平均负载为 1.73,0.60,7.98,那么说明在过去 1 分钟内,系统有 73% 的超载,而在 15 分钟内,有 698% 的超载,从整体趋势来看,系统的负载在降低。 2. CPU 使用率 平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。 而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如: CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的; I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高; 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
3. 测试: 安装stress(Linux系统压力测试工具)和sysstat(Linux性能工具)(Centos7系统) 安装stress(Linux系统压力测试工具)和sysstat(Linux性能工具) yum install stress 一直找不到镜像处理方式 所以用了rpm方式安装 用rpm方式安装,先从下面的地址下载rpm包 http://ftp.tu-chemnitz.de/pub/linux/dag/redhat/el7/en/x86_64/rpmforge/RPMS/stress-1.0.2-1.el7.rf.x86_64.rpm 然后 rpm -Uvh stress-1.0.2-1.el7.rf.x86_64.rpm 安装 sysstat使用yum安装 yum install sysstat 查看平均负载变化率 watch -d uptime $ watch -d uptime .. ., load average: 1.06, 0.58, 0.37
显示所有CPU的指标,并在间隔5秒输出一组数据 $ mpstat - P ALL 5 20 Linux 4. 15. 0 ( ubuntu) 09/ 22/ 18 _x86_64_ ( 2 CPU) 13:41:28 CPU % usr % nice % sys % iowait % irq % soft % steal % guest % gnice % idle 13:41:33 all 0. 21 0. 00 12. 07 32. 67 0. 00 0. 21 0. 00 0. 00 0. 00 54. 84 13:41:33 0 0. 43 0. 00 23. 87 67. 53 0. 00 0. 43 0. 00 0. 00 0. 00 7. 74 13:41:33 1 0. 00 0. 00 0. 81 0. 20 0. 00 0. 00 0. 00 0. 00 0. 00 98. 99
查看哪个进程占用cpu高 pidstat -u 5 1 是因为CentOS默认的sysstat稍微有点老,源码或者RPM升级到11. 5. 5版本以后就可以看到了 $ pidstat - u 5 1 Linux 4. 15. 0 ( ubuntu) 09/ 22/ 18 _x86_64_ ( 2 CPU) 13:42:08 UID PID % usr % system % guest % wait % CPU CPU Command 13:42:13 0 104 0. 00 3. 39 0. 00 0. 00 3. 39 1 kworker/ 1:1H 13:42:13 0 109 0. 00 0. 40 0. 00 0. 00 0. 40 0 kworker/ 0:1H 13:42:13 0 2997 2. 00 35. 53 0. 00 3. 99 37. 52 1 stress 13:42:13 0 3057 0. 00 0. 40 0. 00 0. 00 0. 40 0 pidstat
平均负载高有可能是 CPU 密集型进程导致的; 平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了; 当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源。 4. 总结 一、什么是平均负载 正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。 错误定义:单位时间内的cpu使用率。 可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程 不可中断状态的进程:处于内核态关键流程中的进程,且不可被打断,如等待硬件设备IO响应,ps命令D状态的进程 理想状态:每个cpu上都有一个活跃进程,即平均负载数等于cpu数 过载经验值:平均负载高于cpu数量70%的时候
二、相关命令 cpu核数: lscpu、 grep ‘model name’ /proc/cpuinfo | wc -l 显示平均负载:uptime、top,显示的顺序是最近1分钟、5分钟、15分钟,从此可以看出平均负载的趋势 watch -d uptime: -d会高亮显示变化的区域 strees: 压测命令,–cpu cpu压测选项,-i io压测选项,-c 进程数压测选项,–timeout 执行时间 mpstat: 多核cpu性能分析工具,-P ALL监视所有cpu pidstat: 进程性能分析工具,-u 显示cpu利用率
三、平均负载与cpu使用率的区别 CPU使用率:单位时间内cpu繁忙情况的统计 情况1:CPU密集型进程,CPU使用率和平均负载基本一致 情况2:IO密集型进程,平均负载升高,CPU使用率不一定升高 情况3:大量等待CPU的进程调度,平均负载升高,CPU使用率也升高
四、平均负载过高时,如何调优 工具:stress、sysstat,yum即可安装
CPU密集型进程case: mpstat -P ALL 5: -P ALL表示监控所有CPU,5表示每5秒刷新一次数据,观察是否有某个cpu的%usr会很高,但iowait应很低 pidstat -u 5 1:每5秒输出一组数据,观察哪个进程%cpu很高,但是%wait很低,极有可能就是这个进程导致cpu飚高 IO密集型进程case: mpstat -P ALL 5: 观察是否有某个cpu的%iowait很高,同时%usr也较高 pidstat -u 5 1:观察哪个进程%wait较高,同时%CPU也较高 大量进程case: pidstat -u 5 1:观察那些%wait较高的进程是否有很多