linux性能分析(七)CPU性能篇(二)怎么理解平均负载

一    怎么理解平均负载

①  如何查看平均复杂

查看'系统负载'的命令: top、'uptime'、w、'cat /proc/loadavg'、tload

/proc/loadavg 

  

思考: uptime'每列'输出的'含义'?

重点: '当前时间'、'系统运行时间'、'正在登录用户数'、'平均负载'

思考:如何'观测'和'理解'这个最'常见'、也是'最重要'的'平均负载'系统指标?

思考: 'man uptime' 理解平均负载

知识点: '可运行'状态和'不可中断'状态进程的理解

linux 进程的六种状态 

引入: '不可中断案例'讲解

备注: 不可中断状态实际上是'系统'对'进程和硬件设备'的一种'保护'机制

思考: 如何'更通俗'的理解'负载均衡'?

 1、平均负载其实就是'平均活跃进程数'

 2、直观上的理解就是'单位时间内的活跃进程数'

 3、但它实际上是'活跃进程数'的'指数衰减'平均值

思考: '平均负载'和'cpu个数'关系?

绑核: 对于'特定进程或线程'需要绑定到'指定的核'上运行

③  平均负载多少合理

有了'CPU 个数'.我们就可以判断出: 当平均负载比 CPU 个数还'大'的时候,系统已经出现了'过载'

思考: 平均负载有'三'个数值,到底该参考'哪一个'呢?

核心: 分析系统负载的'趋势'

思考: 在'实际生产环境'中,平均负载'多高'时,需要我们'重点关注'呢?

④  平均负载CPU使用率关系

CPU密集型和I/O密集型区别

说明:云服务器涉及这'两种机型',CPU、内存、硬盘性能和容量不同.

⑤  案例背景

1、我们以'三个示例'分别来看这'三种'情况

2、并用 'iostat、mpstat、pidstat' 等'工具',找出平均负载升高的'根源'

遗留: 后续会'开一个专题'讲解iostat、mpstat、pidstat的'综合'使用,这里暂时'局限'某一特性

测试'环境': 16 CPU、32GB 内存

运行'用户': 以 'root' 用户运行

stress    stress各种测试

强调: 一定要'深入'了解 stress的各种参数含义,这样'压侧'的时候才能结合现象'判断'是否符合预期

⑥  模拟'CPU密集型进程

场景'一': stress '模拟' CPU '密集型' 进程

1、第一个'终端'运行 'stress' 命令,模拟一个 CPU 使用率 '100%' 的场景

目的: stress '测试cpu' 主要是在'用户态'将cpu'耗尽'

2、接着在'第二个终端'运行 uptime 查看平均负载的变化情况:

watch -n1 -d uptime

-d 参数表示'高亮'显示'变化'的区域

3、最后在'第三个终端'运行 mpstat 查看 CPU 使用率的'变化'情况:

mpstat -P ALL 5

-P ALL 表示'监控所有CPU',后面数字5表示'间隔5秒后'输出一组数据

现象:正好有一个 CPU 的'使用率'为 100%,但它的 'iowait' 只有 '0'.

结论:说明'平均负载的升高'正是由于 'CPU使用率为 100%' 导致.

  

思考: 到底是'哪个进程'导致了 CPU 使用率为 '100%' 呢?

可以使用 'pidstat' 来查询:

   pidstat -u 5 1

   备注: -u表示'CPU指标',间隔'5秒后'输出一组数据

pidstat命令详解

⑦  模拟 I/O 密集型进程

友情提示: 做'下一个'实验之前把'上一个'实验复原

1、首先还是运行 'stress' 命令,但这次'模拟 I/O' 压力,即不停地执行 'sync':

stress -i 1 --timeout 600

补充: stress -i 1 --hdd 1 --timeout 600 可以实现'IO负载'的效果

2、在'第二个'终端运行 uptime 查看'平均负载'的'变化'情况:

watch -n 1-d uptime

3、然后'第三个'终端运行 'mpstat' 查看 'CPU 使用率'的变化情况:

显示'所有CPU'的指标,并在'间隔5秒'输出一组数据

mpstat -P ALL 5 1

现象:

  1、其中'一个 CPU' 的系统 'CPU 使用率'升高到了 '63.39%'

  2、而 iowait 高达 '21.47%'

结论: 这说明'平均负载的升高'是由于 'iowait 的升高'

4、思考:到底是'哪个进程'导致 iowait 这么'高'呢?

# 间隔5秒后输出一组数据,-u表示CPU指标

pidstat -u 5 1  '或'  iotop 观察

结论: 平均负载的升高是由于 'iowait 的升高',还是由于 'stress 进程'导致的

iowait 过高问题的查找及解决linux

⑧  模拟大量进程的场景

铺垫: 当系统中'运行进程'超出 'CPU 运行能力'时,就会出现'等待 CPU' 的进程

即: 进程 '等待cpu 调度'的场景

1、这里我们'还是'使用 stress,但这次模拟的是 '64' 个进程:

stress -c 64 --timeout 600

说明: 

  1)、由于系统有 '16 个CPU',明显比 '64个进程' 要'少'得多

  2)、因而系统的 CPU 处于'严重过载'状态,平均负载高达'57.89'

2、接着再运行 'pidstat' 来看一下'进程的情况':

间隔'5秒后'输出'一组'数据: 

pidstat -u 5 1

源码安装升级sysstat包     1.11.5 sysstat包下载地址

结论:

  1、可以看出'64 个进程'在争抢 '16' 个 CPU

  机制: 某一时刻只能某一个'进程'占用'CPU',这里相当于 '4' 个进程在争抢 '1' 个 CPU

  2、每个进程'等待 CPU' 的时间 '也就是代码块中的 %wait 列' 高达 75%

  3、这些'超出' CPU 计算能力的进程,最终导致 'CPU 过载'

遗留: 等待cpu进程为什么也'导致CPU利用率高'呢?

⑨  平均负载小结

⑩  补充

/proc/loadavg 平均负载

思考: 遇到客户反馈'慢'的情况,这个时候我们'怎么分析'呢?

说明: 刻意使用'htop'更清晰的查看'负载'

说明: 恰当的'比喻'

思考: 如何观察'线程级别'的工具

思考: ls命令为什么'无法'使用?

思考: '超载'如何计算?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值