性能分析之Linux系统平均负载案例分析

本文涉及的产品
轻量应用服务器 2vCPU 4GiB,适用于搭建容器环境
无影云电脑个人版,1个月黄金款+200核时
轻量应用服务器 2vCPU 4GiB,适用于搭建Web应用/小程序
简介: 【4月更文挑战第20天】在上文性能基础之理解Linux系统平均负载和CPU使用率中,我们详细介绍了 Linux 系统平均负载的相关概念,本文我们来做几个案例分析,以达到加深理解。

一、前言

在上文性能基础之理解Linux系统平均负载和CPU使用率中,我们详细介绍了 Linux 系统平均负载的相关概念,本文我们来做几个案例分析,以达到加深理解。

二、准备工作

1、测试环境

  • 操作系统:CentOS 7.2 双核
  • 监控工具:iotop、htop、top、uptime、sysstat
  • 压测工具:stress
# 获得物理cpu核心的数量
[zzw@7dgroup2 ~]$ lscpu -p | egrep -v '^#' | wc -l
2
# 获取逻辑cpu数量(包括超线程逻辑cpu数量)
[zzw@7dgroup2 ~]$ lscpu -p | egrep -v '^#' | sort -u -t, -k 2,4 | wc -l
1

2、工具介绍

  • iotop 是一个用来监视磁盘 I/O 使用状况的 top 类工具
  • htop 是一款运行于 Linux 系统监控与进程管理软件,用于取代 Linux 下传统的 top。与 top 只提供最消耗资源的进程列表不同,htop 提供所有进程的列表,并且使用彩色标识出处理器、swap 和内存状态。
  • stress 是一个 Linux 系统压力测试工具,一个 Posix 系统下生成Cpu/Menory/IO/Disk 负载的工具。
  • sysstat 包含了常用的 Linux 性能工具,用来监控和分析系统命令。
  • 3、工具安装

# 安装stress
sudo yum install -y epel-release
sudo yum install -y stress

# 安装iotop
sudo yum install -y iotop

# 安装htop
sudo yum install -y htop

# 安装sysstat
sudo yum install -y sysstat

4、其它工作

我们打开五个终端,登录到同一台 Linux 机器中。

  • 终端一:stress 模拟 Linux 压测场景
  • 终端二:top 监控进程状况
  • 终端三:iotop 监控进程 I/O 使用状况
  • 终端四:htop 监控进程详细状况
  • 终端五:mpstat 监控系统 iowait 详细状况
  • 三、案例分析

    上面所有准备工作都已经完成了,我们首先使用 uptime 命令看下当前 Linux 的平均负载情况
[zzw@7dgroup2 ~]$ uptime
 20:12:34 up 148 days,  3:09,  7 users,  load average: 0.06, 0.10, 0.13

1、场景一:CPU密集型进程

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

# 模拟一个CPU使用率100%的场景。
[zzw@7dgroup2 ~]$ stress --cpu 1 --timeout 600
stress: info: [2395] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd

在终端二查看当前 CPU 使用率及平均负载情况,我们可以看到1分钟的平均负载已经慢慢增加到 1.11,而其中一个CPU1 User使用率已到达 72%。

image.png

在终端五我们发现系统的 iowait 几乎为 0。这说明,平均负载的升高正是由于 CPU User使用率升高导致的。这个罪魁祸首正是 PID 为 9717 的 stress 进程。

image.png

在终端四上通过 htop 我们也可以很直观了解当前的负载情况,此处我们看到 CPU User使用率颜色是绿色偏高。

image.png

2、场景二:I/O 密集型进程场景

我们继续在终端一运行 stress 命令,模拟 I/O 压力,即不停的执行 sync

# 模拟 I/O 压力,不停的执行 sync
[zzw@7dgroup2 ~]$ stress -i 1 --timeout 600
stress: info: [11041] dispatching hogs: 0 cpu, 1 io, 0 vm, 0 hdd

在终端二查看当前 CPU 使用率及平均负载情况,我们可以看到1分钟的平均负载已经慢慢增加到 1.25,而CPU0 System使用率为 68%

image.png

在终端五,我们发现两个CPU 都出现了 iowait。这说明,系统平均负载升高是由于 iowait 升高造成的。

image.png

那么到底是哪个进程?在终端三上我们通过 iotop 发现有两个进程在大量执行 IO 写操作,结合 top S列(进程状态代码)使用情况(R和D,即可运行状态和不可中断状态)我们可以发现还是 PID 为 19241 的 stress 进程引起的。

image.png

如下图,当我们停止 stress 进程后的状况。

image.png

通过终端四的 htop 我们也可以很直观了解当前的负载情况,此处我们看到 CPU 使用率颜色是红色偏高。

image.png

3、场景三:大量进程

当系统中运行的进程数超过 CPU 运行能力时,就会出现等待 CPU 的进程。此处,我们还是使用 stress 模拟 4 个进程。

[zzw@7dgroup2 ~]$ stress -c 4 --timeout 600
stress: info: [13473] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd

由于系统只有 2 个 CPU,明显比 4 个进程要少得多,因此系统 CPU 处于严重过载状态,平均负载高达
4.30

image.png

进一步查看运行队列的长度(等待运行的进程数),可以看出,stress 进程们在疯狂的争夺 2 个CPU,这就导致出现运行队列过大,这些超出 CPU 计算能力的进程,最终导致系统过载。

image.png

以下是使用 vmstat 命令。

image.png

在终端四上通过 htop 我们也可以很直观了解当前的负载情况,此处我们看到 CPU User使用率颜色是绿色偏高。
image.png

四、小结

平均负载提供了一个快速查看系统整体性能的手段,反映了系统的整体负载状况。但并不能跟CPU使用率并不一定完全对应。比如:

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

另外,htop 根据不同类型的负载加以颜色区别(F2可以自定义)。比如 CPU 密集应用,它的负载颜色是绿色偏高,iowait 的操作,它的颜色是红色偏高。

最后附一张经典性能分析思路图:

image.png

简单概况,即操作系统(CPU/IO/Mem/Net)->进程->线程->堆栈->代码,如果 CPU 和 I/O 同时出现高的情况,先看 I/O。

目录
相关文章
|
1月前
|
Linux 定位技术
Linux系统中的cd命令:目录切换技巧
踏过千山,越过万水,人生就是一场不断前行的旅程,总充满了未知与挑战。然而,“cd”命令如同你的旅伴,会带你穿梭在如棋盘一般的文件系统中,探索每一处未知。希望你能从“cd”命令中找到乐趣,像是掌控了一种络新妙的魔法,去向未知进发,开始你的探索之旅。
119 24
|
26天前
|
Linux Shell
Linux系统下快速批量创建和删除文件的方法
总的来说,使用shell脚本来批量处理文件是一种非常强大的工具,只要你愿意花时间学习和实践,你会发现它能大大提高你的工作效率。
81 19
|
1月前
|
安全 Shell Linux
Linux系统之su命令的基本使用
Linux系统之su命令的基本使用
99 3
Linux系统之su命令的基本使用
|
28天前
|
Ubuntu Linux 编译器
在Ubuntu Linux系统下如何搭建并安装EDK2
以上就是在Ubuntu Linux系统下搭建并安装EDK2的过程。这个过程可能会有些复杂,但只要按照步骤一步步来,应该不会有太大问题。如果在过程中遇到任何问题,都可以在网上找到相应的解决方案。希望这个指南能对你有所帮助!
91 17
|
2月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
128 27
|
2月前
|
Linux
linux命令详细说明以及案例
本文介绍了常用的 Linux 命令及其详细说明和示例,包括:`ls`(列出目录内容)、`cd`(更改目录)、`rm` 和 `mv`(删除与移动文件)、`grep`(搜索文本)、`cat`(显示文件内容)以及 `chmod`(更改文件权限)。每个命令均配有功能描述、选项说明及实际案例,帮助用户更好地掌握 Linux 命令的使用方法。
171 56
|
25天前
|
Linux
Linux命令的基本格式解析
总的来说,Linux命令的基本格式就像一个食谱,它可以指导你如何使用你的计算机。通过学习和实践,你可以成为一个真正的“计算机厨师”,创造出各种“美味”的命令。
64 15
|
1月前
|
监控 数据可视化 Java
调试技巧 - 用Linux命令排查Java问题
总的来说,使用Linux命令来排查Java问题,需要一定的实践经验和理论知识。然而,只要我们愿意花时间深入了解这些工具,我们就能够熟练地使用它们来分析和解决问题。此外,这些工具只是帮助我们定位问题,真正解决问题需要我们对Java和JVM有深入的理解,并能够读懂和分析代码。
71 13
|
2月前
|
监控 Linux
Linux基础:文件和目录类命令分析。
总的来说,这些基础命令,像是Linux中藏匿的小矮人,每一次我们使用他们,他们就把我们的指令准确的传递给Linux,让我们的指令变为现实。所以,现在就开始你的Linux之旅,挥动你的命令之剑,探索这个充满神秘而又奇妙的世界吧!
86 19
|
2月前
|
Linux
Linux 常用文件查看命令
`cat` 命令用于连接文件并打印到标准输出,适用于快速查看和合并文本文件内容。常用示例包括:`cat file1.txt` 查看单个文件,`cat file1.txt file2.txt` 合并多个文件,`cat > filename` 创建新文件,`cat >> filename` 追加内容。`more` 和 `less` 命令用于分页查看文件,`tail` 命令则用于查看文件末尾内容,支持实时追踪日志更新,如 `tail -f file.log`。
87 5
Linux 常用文件查看命令