Load Average(负载平均值)是一个用于衡量系统负载的指标,它表示一段时间内处于活跃状态的进程数目。理想情况下,负载值应该小于系统的CPU核心数,但具体的适宜值取决于系统的用途和配置。
一、基础
Load Average(负载平均值)是一个用于衡量系统负载的指标,它表示一段时间内处于活跃状态的进程数目。Load Average通常用三个值来表示(如top/uptime命令),分别对应于过去1分钟、5分钟和15分钟的平均值。需要注意的是,Load Average并不仅仅表示CPU的利用率,它还包括了等待I/O、网络等资源的进程。因此,即使CPU利用率并不高,Load Average仍然可能较高,这可能是因为其他资源的限制导致的。
- 负载平均值小于CPU核心数:表示系统目前相对空闲,进程在几乎没有等待CPU资源。
- 负载平均值接近或超过CPU核心数:表示系统处于较高的负载状态,进程可能需要等待CPU资源。
- 负载平均值大幅度增加:可能表示系统资源不足,需要进一步调查和优化。
负载高判断标准:以1个CPU为例,几核满负载就是几,一般情况下我们以
满负载*0.7
作为高负载的临界值。
- CPU高:使用top命令来判断CPU是否高,如:
1 | top - 14:07:56 up 31 days, 18:53, 1 user, load average: 0.53, 1.01, 1.17 |
在%Cpu(s)
行各个值含义:
- us:表示用户空间程序的CPU使用率
- sy:表示系统空间程序的CPU使用率
- ni:表示用于nice操作的CPU使用率
- id:表示CPU空闲的百分比
- wa:表示CPU等待I/O的百分比
- hi:表示硬中断的百分比
- si:表示软中断的百分比
- st:表示被偷取(被虚拟化宿主抢占)的时间百分比。
CPU总和 = 100% = us + sy + ni + id + wa + hi + si + st
us和sy的值较高即表示系统的CPU使用率就相对较高
- 内存高:使用
top
或free -h
命令都可以查看到内存的使用情况,以free -h
为例,各个指标含义:- total(总内存):表示系统上总共的内存量,包括物理内存和交换空间。
- used(已用内存):表示当前系统正在使用的内存量,包括正在使用的物理内存和交换空间。
- free(空闲内存):表示当前系统未被使用的内存量,即尚未分配给任何进程的内存。
- shared(共享内存):表示被多个进程共享的内存量。
- buff/cache(缓存和缓冲区):表示被用作文件系统缓存和缓冲区的内存量。这部分内存实际上是空闲的,如果系统需要,可以很容易地被释放。
- available(可用内存):表示系统当前可用的内存量,包括空闲内存和缓存。
如果已用内存接近或超过总内存的一定比例,或空闲内存非常低,示系统内存资源紧张。
IO高
- 使用iostat命令: iostat 命令是 sysstat 包的一部分,用于显示CPU、内存和磁盘I/O的统计信息。在终端中运行以下命令:iostat
- iostat 会显示每个磁盘的平均读写速率、响应时间等信息。可以通过 iostat -d 仅显示磁盘相关的信息。
- 使用iotop命令: iotop 是一个交互式的工具,可以显示磁盘I/O活动的实时信息,以及各个进程对磁盘的使用情况。运行以下命令:iotop
- iotop 的输出按磁盘I/O使用率排序,可以方便地找到占用I/O资源较多的进程。
- 使用vmstat命令: vmstat 命令可以显示虚拟内存的统计信息,包括磁盘I/O情况。运行以下命令:vmstat 1
- vmstat 每秒输出一次系统统计信息,其中 bi 表示块(block)输入,bo 表示块输出,用于表示磁盘I/O活动。
- 使用sar命令: sar 命令是 sysstat 包中的另一个工具,可以提供关于系统性能的历史数据。运行以下命令:sar -d 1
- sar -d 会显示磁盘活动的统计数据,包括读写速率、I/O等待时间等。
- 使用iostat命令: iostat 命令是 sysstat 包的一部分,用于显示CPU、内存和磁盘I/O的统计信息。在终端中运行以下命令:iostat
可能导致负载高的因素
因素 | 现象 | 原因 |
---|---|---|
CPU密集型任务 | 高用户和系统CPU使用率 | 系统正在执行需要大量计算资源的任务 |
内存不足 | 高交换空间使用率、高磁盘IO | 系统开始使用交换空间,因为物理内存不足 |
IO密集型任务 | 高磁盘IO或网络IO | 系统中的任务频繁进行文件读写、数据库查询或网络通信 |
进程调度问题 | 多个进程争夺CPU时间,导致CPU使用率波动 | 系统调度算法不合理,导致进程无法有效地共享CPU资源 |
多核心处理器不平衡 | 部分CPU核心负载高,而其他核心相对空闲 | 任务无法充分利用所有可用的CPU核心 |
大量进程或线程 | 高进程数或线程数 | 系统同时运行了大量的进程或线程 |
不合理的系统配置 | 异常的系统日志、性能参数不合理 | 内核参数设置、日志记录、网络配置等不合理 |
恶意软件或攻击 | 异常的网络流量、未知进程或服务 | 恶意软件或攻击占用系统资源 |
系统故障或硬件故障 | 系统错误消息、硬件故障日志 | 可能有硬件故障、磁盘损坏或其他系统故障 |
存在D状态进程 | CPU很空闲,但是load average却非常高 | D状态是指不可中断的睡眠状态,该状态的进程无法被kill,也无法自行退出 |
- 常用命令
- top
- vmstat
- iotop
- free
- ps
二、实战
TODO