我们在解决性能问题之前,需要先对性能的基础知识做一个简单的了解,并且要知道用哪些常用的命令来帮助我们去判断和分析这些性能问题。本篇文章主要也是来整理这部分内容,主要按照下面的思路进行整理:
一、基本概念介绍。
二、常用命令整理。
三、主要场景分析。
一、基本概念介绍
平均负载:是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。可以简单理解为,平均负载就是平均活跃进程数。
平均活跃进程数:直观上的理解就是单位时间内的活跃进程数,但它实际上是活跃进程数的指数衰减平均值。最理想的情况,就是每个 CPU 上都刚好运行着一个进程,这样每个 CPU 都得到了充分利用。
评定标准:
平均负载最理想的情况是等于 CPU 个数。
可运行状态的进程:是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
不可中断状态的进程:是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。
比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。
CPU 使用率:是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应,主要包括下面三种场景:
1.CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
2.I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
3.大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
二、常用命令整理:
uptime:uptime 命令,看一下测试前的平均负载情况。
$ uptime
15:17 up 3 days, 1:11, 2 users, load averages: 3.44 3.34 3.48
# 指标分别表示:
15:17 // 当前时间
up 3 days, 1:11 // 系统运行时间
2 users // 正在登录用户数
3.44 3.34 3.48 // 1分钟、5分钟、15分钟的平均负载
如果 1 分钟、5 分钟、15 分钟的三个值基本相同,或者相差不大,那就说明系统负载很平稳。
如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去 15 分钟内却有很大的负载。
如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1 分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就得分析调查是哪里导致的问题,并要想办法优化了。
三个不同时间间隔的平均值,给我们提供了分析系统负载趋势的数据来源,让我们能更全面、更立体地理解目前的负载状况。
sysctl:查看硬件信息
# 查看mac上物理cpu核数
$ sysctl hw.physicalcpu
hw.physicalcpu: 4
# 查看mac上逻辑cpu核数
$ sysctl hw.logicalcpu
hw.logicalcpu: 8
# 查看mac上硬件信息总览
$ system_profiler SPHardwareDataType
Hardware:
Hardware Overview:
Model Name: MacBook Pro
Model Identifier: MacBookPro16,2
Processor Name: Quad-Core Intel Core i5
Processor Speed: 2 GHz
Number of Processors: 1
Total Number of Cores: 4
L2 Cache (per Core): 512 KB
L3 Cache: 6 MB
Hyper-Threading Technology: Enabled
Memory: 16 GB
System Firmware Version: 1715.60.5.0.0 (iBridge: 19.16.10647.0.0,0)
Serial Number (system): C17DC6DVML7H
Hardware UUID: DE69AD58-11C8-52D8-AC5C-C543163DB6C5
Provisioning UDID: DE69AD58-11C8-52D8-AC5C-C543163DB6C5
Activation Lock Status: Disabled
三、主要场景分析
对于CPU使用来说,一般涉及三个过程:进程排队----》进程调度起来----〉用户进程和内核进程之间的交互
也正因为如此,上面的CPU的性能场景分为下面三个场景。
CPU 密集型进程,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
2.I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
3.大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高
stress 是一个 Linux 系统压力测试工具,这里我们用作异常进程模拟平均负载升高的场景。
sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统的性能,mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。