ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

极客时间Linux性能优化实战笔记 —— CPU性能篇

2022-09-16 23:02:13  阅读:223  来源: 互联网

标签:负载 极客 性能 stress 密集型 Linux 进程 平均 CPU


查看系统平均负载

使用uptime或者top命令,以uptime为例:

$ uptime
02:34:03 up 2 days, 20:14,  1 user,  load average: 0.63, 0.83, 0.88

含义:

02:34:03                        //当前时间
up 2 days, 20:14                //系统运行时间
1 user                          //正在登录用户数
load average: 0.63, 0.83, 0.88  // 依次则是过去 1 分钟、5 分钟、15 分钟的平均负载(Load Average)

平均负载

单位时间内,系统中处于可运行状态(R)和不可中断状态(D)的平均进程数,即平均活跃进程数(实际上是活跃进程数的指数衰减平均值,参考sched/loadavg.c),跟cpu的使用率没有直接关系。所以这里不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程。

R: Running或者Runable
D:Uninterruptible Sleep或者Disk Sleep

平均负载最理想的情况是等于CPU个数,当高于CPU数量的70%的时候,就应该排查负载高的问题了。负载过高可能会导致进程响应变慢,进而影响服务的正常功能。

  • 跟CPU使用率的区别
    CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。比如:
    • CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
    • I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
    • 大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。在理解平均负载时,也要注意:

  • 平均负载高有可能是 CPU 密集型进程导致的;
  • 平均负载高并不一定代表 CPU 使用率高,还有可能是 I/O 更繁忙了;
  • 当发现负载高的时候,你可以使用 mpstat、pidstat 等工具,辅助分析负载的来源。

工具

  • stress
    可以用来模拟CPU和IO密集型负载。
    • CPU密集型
      $ stress --cpu 1 --timeout 600   # 模拟一个CPU密集型进程,运行600秒后退出
      
    • IO密集型
      $ stress -i 1 --timeout 600   # 模拟一个IO密集型进程,运行600秒后退出。使用sync来实现,有可能无法产生有效的iowait,可以使用stress-ng
      

这个stress工具的继任者是stress-ng,可以模拟的进程类型非常广泛,值得研究一下。
比如用这个工具模拟IO密集型进程:

stress-ng -i 1 --hdd 1 --timeout 600  # --hdd表示读写临时文件
  • watch
    周期性执行指定命令,加入-d参数会将差异部分高亮出来。如watch -d uptime可以实时查看平均负载的变化情况

  • mpstat
    常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标
    示例:

mpstat -P ALL 2 5    # 显示所有cpu的指标,每个2秒输出依次,执行5次后退出
  • pidstat
    常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标
    示例:
pidstat -u 2 5    # -u表示查看CPU指标,每隔2s输出一组,执行5次后退出

pidstat -d 2 5    # -d表示查看IO指标,每隔2s输出一组,执行5次后退出
  • htop
    对于IO密集型负载:红色
    对于CPU密集型负载:绿色
    image

  • atop

标签:负载,极客,性能,stress,密集型,Linux,进程,平均,CPU
来源: https://www.cnblogs.com/pengdonglin137/p/16701114.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[[email protected]]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有