linux 性能调优 平均负载

使用 uptime 查看 系统负载情况

load average:

依次则是过去 1 分钟、5 分钟、15 分钟的平均负载

简单来说,平均负载是指单位时间内,系统处于 可运行状态 和不可中断状态 的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。

不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。

所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

因此,你可以简单理解为,平均负载其实就是平均活跃进程数。平均活跃进程数,直观上的理解就是单位时间内的活跃进程数,但它实际上是活跃进程数的指数衰减平均值。这个“指数衰减平均”的详细含义你不用计较,这只是系统的一种更快速的计算方式,你把它直接当成活跃进程数的平均值也没问题。

既然平均的是活跃进程数,那么最理想的,就是每个 CPU 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。比如当平均负载为 2 时,意味着什么呢?

在只有 2 个 CPU 的系统上,意味着所有的 CPU 都刚好被完全占用。

在 4 个 CPU 的系统上,意味着 CPU 有 50% 的空闲。
而在只有 1 个 CPU 的系统中,则意味着有一半的进程竞争不到 CPU。

平均负载为多少时合理

我们知道,平均负载最理想的情况是等于 CPU 个数。所以在评判平均负载时, 首先你要知道系统有几个 CPU ,这可以通过 top 命令或者从文件 /proc/cpuinfo 中读取,比如:

grep ‘model name‘ /proc/cpuinfo | wc -l

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

如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
但如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
反过来,如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,

也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,

这时就得分析调查是哪里导致的问题,并要想办法优化了。

平均负载与 CPU 使用率

我们还是要回到平均负载的含义上来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。

而 CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。

比如:

CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

下面,我们以三个示例分别来看这三种情况,并用 iostat、mpstat、pidstat 等工具,找出平均负载升高的根源。

stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。

而 sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们的案例会用到这个包的两个命令 mpstat 和 pidstat。

CPU 密集型进程

 首先,我们在第一个终端运行  stress  命令,模拟一个  CPU  使用率 100% 的场景:

stress --cpu 1 --timeout 600

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

watch -d uptime

在第三个终端 使用 mpstat 查看cpu 使用情况

mpstat -P ALL 5

那么,到底是哪个进程导致了 CPU 使用率为 100% 呢?你可以使用 pidstat 来查询:

从这里可以明显看到,stress 进程的 CPU 使用率为 89%。

模拟IO密集型的操作

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

stress -i 1 --timeout 600

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

watch -d uptime

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

mpstat -P ALL 5 1

使用 pidstat 观察

压力还是有stress 进程造成的。

原文地址:https://www.cnblogs.com/yg_zhang/p/11522940.html

时间: 2024-11-07 14:47:13

linux 性能调优 平均负载的相关文章

<Linux性能调优指南>主要思路流程

网上IBM很早放出的一本免费电子书, 十来年了,参考意义还是很大. 国内有翻译成中文在线阅读的版本. 见如下两个URL Linux Performance and Tuning Guidelines <Linux性能调优指南> https://www.gitbook.com/book/lihz1990/transoflptg/details ========================================= 服务器优化思路 管理变更流程 管理变更和性能优化并不直接相关,但可能是

Linux性能调优,从优化思路说起

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的apache.tomcat.mysql.php等等,开源软件的最大理念是自由.开放,那么linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以最低廉的成本,达到应用最优的性能.因此,谈到性能问题,主要实现的是linux操作系统和应用程序的最佳结合. 一.性能问题综述 系统的性能是指操作系统完成任务的有效性.稳定性和响应速度.Linux系统管理员可能经常会遇到系统不稳定.响

linux 性能调优工具参考 (linux performance tools)

之前发现几张图对于linux使用者有着较强的参考意义,下面对其进行简单备忘: # linux 静态信息查看工具 # linux 性能测试工具 benchmark # linux 性能观测工具 # linux 性能调优工具  资源来源链接:http://www.brendangregg.com/linuxperf.html 保持更新,其中不少工具都有使用过,欢迎大家留言交流:更多内容请关注 cnblogs.com/xuyaowen; 原文地址:https://www.cnblogs.com/xuy

linux性能调优总结

系统性能一直是个热门话题.做运维这几年也一直在搞性能调优,写这个文章也算是对工作的总结. 讲调优第一步是,要讲为什么要调优?也就是系统分析,分析还需要有指标,做好性能监控的情况下,看到确实需要调优才能进行.不能为了调优而 “调优“ 那不是调优,那是破坏. 性能分析的目的 找出系统性能瓶颈 为以后的优化提供方案或者参考 达到良好利用资源的目的.硬件资源和软件配置. 影响性能的因素 想确定有哪些因素,首先确定你的应用是什么类型的?例如: cpu密集型例如web服务器像nginx node.js需要C

Linux性能调优的优化思路

Linux操作系统是一个开源产品,也是一个开源软件的实践和应用平台,在这个平台下有无数的开源软件支撑,我们常见的有apache.tomcat.nginx.mysql.php等等,开源软件的最大理念就是自由.开放,那么Linux作为一个开源平台,最终要实现的是通过这些开源软件的支持,以低廉的成本,达到应用最有的性能.因此,谈到性能问题,主要实现的是Linux系统和应用程序的最佳结合. 博文大纲:一.性能问题综述二.影响Linux性能的因素三.分析系统性能设计的人员四.调优总结 一.性能问题综述 系

【Linux性能调优一】观大局:系统平均负载load average

要测试linux系统性能及调优,首先要从全局检查linux的平均负载 1.什么是平均负载 load average 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数.也可简单理解为平均活跃进程数. 简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系. 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runn

Linux性能调优

Linux操作系统下挂载硬盘分区的几种方法 简单三步制作会动的Windows 7桌面墙纸 大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数.可以修改这些参数来分配更多的内存,从而改进网络性能.设置内核参数的方法是通过 proc 接口,也就是通过读写 /proc 中的值.幸运的是,sysctl 可以读取 /etc/sysctl.conf 中的值并根据需要填充/proc,这样就能够更轻松地管理这些参数.清单 2 展示在互联

Linux性能调优之gprof和oprofile

为了更好的优化程序性能,我们必须找到性能瓶颈点,“好钢用在刀刃上”才能取 得好的效果,否则可能白做工作. 为了找到关键路径,我们可以使用profilng技术,在linux平台上,我们可以使用gprof和oprofile工 具. gprof是GNU工具之一,它在编译的时候在每个函数的出入口加入了profiling的代码,运行时统计程序在用户态的 执行信息,可以得到每个函数的调用次数,执行时间,调用关系等信息,简单易懂.适合于查找用户级程序的性能瓶颈,对于很多时间都在内核态执行的程 序,gprof不

linux 性能调优

导致cpu负载增高的三个场景: 1.cpu密集型进程 2io密集型,等待io也会导致负载升高,但是cpu使用率不一定很高 3.大量等待cpu的进程调度 cpu寄存器:是cpu内置的容量小,速度极快的内存[保存程序运行时的一些数据] cpu计数器:用来保存cpu正在执行的指令位置或者即将执行的下一条指令位置 cpu上下文切换就是保存当前运行的cpu寄存器和计数器中的数据然后跳转到新的程序计数器位置执行其他进程 频繁的上下文切换会提高cpu负载. 系统调用通常称为特权模式的切换,从ring0切换到r