文章目录

  • 前言:
  • 什么是系统性能调优
  • 到底怎么理解平均负载
    • 它和CPU使用率的关系
    • 平均负载多少合适
    • 如何分析平均负载
    • 平均负载升高的实战模拟
      • 场景:CPU密集型进程
      • 场景二:I/O密集型程序

前言:

对于运维工程师,我认为性能优化是很重要的一项工作,比如服务器CPU使用率过高,top命令之后怎么快速定位问题,又比如系统没有跑什么占用内存的程序,但是用free一看,内存已经不多了,应该怎么处理,或者一大早起来,zabbix收到报警,某台数据库主机的iowait太高,怎么办。这篇博客讨论的主要是这些问题 。

什么是系统性能调优

说到系统性能优化,我觉得主要有两个方面,一个是系统资源方面的,一个是应用负载方面的(),学习性能优化,关键还是多实操,多问为什么,不要想着一开始就把与原理都搞懂,在实操中学习,然后慢慢去理解原理,我们可以开虚拟机,使用Linux系统去实操,系统性能优化,首先要根据优化的需求,场景,选择出适合的分工具,比如top命令等等,。

到底怎么理解平均负载

它的定义是在特定时间间隔内,运行队列中的平均进程数量,也就是处于可运行状态不可中断状态的平均进程数量,其实说白了就是活跃的进程

可运行状态:就是正在使用CPU或者等待CPU的进程,就是ps命令里面处于R状态(Running或者Runnable)的进程

不可中断状态,有一些进程,它正处在内核态的关键流程中,这些流程是不能被打断的,就是ps命令里面看到的,状态为D的进程(Disk Sleep),比如最常见的等待磁盘的I/O,当一个进程对磁盘进行读写的时候,它不允许其他的进程来中断它,因为如果这时候被打断了,就容易出现进程里的数据和硬盘里面的数据不一致的情况发生,不可中断进程实际上是操作系统对硬件设备和进程的一个保护机制

总结来讲:我们可以简单理解为,其实平均负载就是特定时间内的活跃进程的数量,他是根据时间以及在这个时间里面任务队列中的进程数量计算出来的一个平均值,任务队列里面的进程包括,可运行进程,以及不可中断进程。

它和CPU使用率的关系

首先,系统的CPU使用率是系统上的每个CPU的使用率加起来,是有可能大于100%的,它和CPU的使用率并没有什么直接关系,对于一个CPU密集型程序,使用了大量的CPU,导致负载升高,这两个是一致的,但是对于那些IO密集型程序,等待IO的时候,平均负载也会升高,但是CPU的使用率并不一定高

平均负载多少合适

因为平均负载是特定时间内运行队列中的平均进程数,所以平均负载和CPU个数有关,用平均负载除以系统CPU个数,如果这个值大于0.7,就说明可能过载了,但这个0.7这个数字不是绝对的,我觉得我们应该吧这个系统负载监控起来,然后根据更多的历史数据,去分析,如果发现负载有明显的升高趋势,就要去做进一步的分析

查看系统CPU个数(记住)

grep 'model name' /proc/cpuinfo | wc -l
如何分析平均负载

上面讲到平均负载多少正常,又因为我们的top命令,uptime命令,会显示一分钟,五分钟,十五分钟的平均负载,所以我们可以这样通过对比一分钟,与十五分钟的负载进行分析,如果一份的负载比十五分钟的负载要大得多,那么说明这个负载是处于上升趋势的,反过来,就是下降趋势的。然后结合它的负载与CPU个数进行分析

平均负载升高的实战模拟

安装stress压测工具和sysstat系统性能分析工具,sysstat这个包我们使用mpstat(分析多核CPU)和pidstat(分析进程)

yum -y install stress  sysstat
场景:CPU密集型进程

使用压测工具,模拟CPU一直在计算

[root@lvs ~]# stress --cpu 1 --timeout 60
stress: info: [22320] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

使用top命令查看负载,也可以使用uptime(没有那么消耗系统资源),可以看到是stress进程在占用CPU资源,CPU使用率接近100%,一分钟的平均负载比15分钟的平均负载要高得多,所以说明负载在上升

[root@lvs ~]# top
top - 21:28:10 up 19:20,  7 users,  load average: 0.93, 0.57, 0.32
Tasks: 185 total,   2 running, 183 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,100.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999696 total,    73736 free,   595796 used,   330164 buff/cache
KiB Swap:  2097148 total,  1787928 free,   309220 used.   180676 avail Mem PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                               22433 root      20   0    7264    100      0 D 97.3  0.0   2:06.23 stress                                                                                                20226 root      20   0       0      0      0 S  1.7  0.0   0:01.45 kworker/u256:2                                                                                        21751 root      20   0       0      0      0 R  1.0  0.0   0:01.48 kworker/u256

在另一个终端使用mpstata查看CPU使用率,可以看到有一个CPU是一直被占用的

[root@lvs ~]# mpstat -P ALL 5
Linux 3.10.0-693.el7.x86_64 (lvs)   04/30/2020  _x86_64_    (1 CPU)09:21:48 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:21:53 PM  all   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:21:53 PM    0   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.0009:21:53 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:21:58 PM  all   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:21:58 PM    0   99.80    0.00    0.20    0.00    0.00    0.00    0.00    0.00    0.00    0.00

查看发现它的iowait是正常的,说明是CPU是计算密集型程序引起的平均负载高

可以使用pidstat看看是哪个进程导致的,可见是stress进程导致的

[root@lvs ~]# pidstat -u 5 1
Linux 3.10.0-693.el7.x86_64 (lvs)   04/30/2020  _x86_64_    (1 CPU)09:29:05 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
09:29:10 PM     0      1128    0.20    0.00    0.00    0.20     0  tuned
09:29:10 PM     0     20226    0.00    1.20    0.00    1.20     0  kworker/u256:2
09:29:10 PM     0     21751    0.00    1.00    0.00    1.00     0  kworker/u256:1
09:29:10 PM     0     21972    0.00    0.20    0.00    0.20     0  kworker/0:1
09:29:10 PM     0     22433    0.20   97.21    0.00   97.41     0  stress
09:29:10 PM     0     22467    0.00    0.20    0.00    0.20     0  pidstat

通过这个例子我们先通过分析出了平均负载高的原因是有计算密集型程序在大量消耗CPU,然后通过分析找到了大量使用CPU资源的进程

场景二:I/O密集型程序

模拟

[root@lvs ~]# stress -i 1 --timeout 600
stress: info: [22432] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd

top命令与mpstat命令分析,stress进程使得CPU使用率接近100%

[root@lvs ~]# top
top - 21:28:10 up 19:20,  7 users,  load average: 0.93, 0.57, 0.32
Tasks: 185 total,   2 running, 183 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,100.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :   999696 total,    73736 free,   595796 used,   330164 buff/cache
KiB Swap:  2097148 total,  1787928 free,   309220 used.   180676 avail Mem PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                                               22433 root      20   0    7264    100      0 D 97.3  0.0   2:06.23 stress                                                                                                20226 root      20   0       0      0      0 S  1.7  0.0   0:01.45 kworker/u256:2                                                                                        21751 root      20   0       0      0      0 R  1.0  0.0   0:01.48 kworker/u256:1                                                                                        1 root      20   0  193700   4416   2320 S  0.0  0.4   0:05.53 systemd                                                                                               2 root      20   0       0      0      0 S  0.0  0.0   0:00.06 kthreadd

mpstat

[root@lvs ~]# mpstat -P ALL 5 1
Linux 3.10.0-693.el7.x86_64 (lvs)   04/30/2020  _x86_64_    (1 CPU)09:28:21 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:28:26 PM  all    0.20    0.00   99.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00
09:28:26 PM    0    0.20    0.00   99.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all    0.20    0.00   99.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00
Average:       0    0.20    0.00   99.80    0.00    0.00    0.00    0.00    0.00    0.00    0.00

但是我们还不知道是I/O密集型到导致还是CPU密集型导致,

Linux性能优化一:CPU优化以及平均负载的理解相关推荐

  1. 【linux】性能优化之CPU优化一

    文章目录 一.前言 二.性能统计信息 1. 平均负载率. 2. 平均负载率命令 uptime 3. 平均负载和CPU使用的关系 4. 如何定位哪个进程出现问题 一.前言 因为以前只是了解了linux的 ...

  2. Linux性能监控之CPU

    CPU介绍 内核调度器将负责调度2种资源种类:线程(单一或者多路)和中断. 调度器去定义不同资源的不同优先权. 优先级:Interrupts(中断) > Kernel(System) Proce ...

  3. (一文了解)linux性能分析之CPU篇

    目录 前言 一.CPU 性能指标 1.CPU使用率 2.负载均衡 3.上下文切换 4.CPU缓存命中率 二.常用工具 1.uptime 2.vmstat 3.mpstat 4.top 5.sar 6. ...

  4. Linux性能监控(CPU监控)

    Linux性能监控(CPU监控) 主要分为四类: cup监控 内存监控命令 IO性能 网络性能 cup监控 关于CPU,有3个重要的概念:上下文切换(context switchs),运行队列(Run ...

  5. 解决win10cpu使用率100_如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了...

    来自公众号:阿里巴巴中间件 CPU(Central Processing Unit)是计算机系统的运算和控制核心,是信息处理.程序运行的最终执行单元,相当于系统的"大脑".当 CP ...

  6. 理解Linux和其他UNIX-Like系统上的平均负载

    理解Linux和其他UNIX-Like系统上的平均负载      Linux,Mac以及其他UNIX-like系统都能显示出"load average"信息.这些数字告诉你,你系统 ...

  7. 【CPU】如何正确理解 CPU 使用率和平均负载的关系?

    什么是 CPU 使用率? CPU 使用率就是 CPU 非空闲态运行的时间占比,它反映了 CPU 的繁忙程度. 比如,单核 CPU 1s 内非空闲态运行时间为 0.8s,那么它的 CPU 使用率就是 8 ...

  8. php 系统平均负载,深入理解liunx平均负载

    查找系统平均负载,可以通过top或者uptime命令查看 $ uptime 14:12:35 up 289 days, 18:50, 2 users, load average: 0.12, 0.09 ...

  9. Linux性能优化 Linux性能工具:CPU top

    不显示未使用任何CPU的进程启动top top -i top - 16:16:14 up 8:12, 1 user, load average: 1.04, 1.24, 1.35 Tasks: 356 ...

最新文章

  1. 字符串匹配-BM算法改进SUNDAY--Boyer-Moore-Horspool-Sunday Aglorithm
  2. selenium webdriver (12) -- 鼠标和键盘
  3. 20150928所学粗略整理
  4. java调用c视频接口_JAVA本地调用(JNI- java调用c)
  5. Objective-C初学者指南(第2版)
  6. 2019年税收分类编码_通过分析112,654个编码测试,我们了解了2019年开发人员的招聘趋势...
  7. java在控制台输出空心正方形,菱形,空心菱形
  8. 卸载python2.7_Office卸载工具官方版
  9. 【学习笔记】通过雷达获取某一角度的距离信息
  10. 用Java编写程序实现找出100以内的质数
  11. Ubuntu pptp服务器搭建教程(保姆级)
  12. python综合程序设计——做一个可视化大屏
  13. 用CSS美化你的HTML
  14. 深圳企业选择深圳SEO外包的理由
  15. 非诚勿扰24灯全灭php,收二手货小伙上非诚勿扰,24盏灯全灭还遭羞辱,最后才知道是收二手豪车身价上亿...
  16. 从[USER SERVICES CLIENT]下载的sentinel-3数据在SNAP中打开没有地理坐标的解决办法
  17. 用html实现抽奖大转盘,【项目实战】用CSS实现一个抽奖转盘(附详细代码+思路)...
  18. 清明祭:缅怀手机领域的那些先烈厂商们,你可还记得?
  19. 第四章 数据结构与算法之算法基础(时间复杂度、空间复杂度、稳定性详述)
  20. 基于EasyX的五子棋游戏

热门文章

  1. PCB生产工艺流程二:图形电镀工艺流程说明
  2. Unity3D脚本:Unity制作连连看脚本
  3. SpringBoot后端统计网站的IP访问次数及地区
  4. js做网站301跳转
  5. 云计算提供商锁定的影响以及解决方案
  6. STM32F1与STM32CubeIDE编程实例-MAX7219驱动8位7段数码管(基于SPI)
  7. float与double的精度问题
  8. 《重庆市新型基础设施重大项目建设行动方案(2020—2022年)》来啦!
  9. Splunk—云计算大数据时代的超级日志分析和监控利器
  10. 操作系统笔记:windows 替换ctrl和alt键功能