前言

通过命令和输出掌握Linux服务器的运行状态,不仅是一名合格系统管理员的基本技能,更是排查故障、评估系统运行风险的重要手段。
兴趣是最好的老师,精通Linux系统管理,需要我们持续学习,不断将理论应用于实践,随着时间积累,厚积薄发。
本文重点探讨检测Linux服务运行状态的方法和手段,为系统和运维人员提供参考。

系统平均负载
1
2
3
4
5
6
7
8
9
uptime
# or
w
# or
cat /proc/loadavg
# or
top
# or
sudo apt install glances && glances

执行以上命令,会展示三条数据,以逗号分隔,表示最近1分钟、5分钟、15分钟系统平均负载。

如何理解?
简单讲,”平均负载”表示特定时间间隔内CPU的平均负载,平均负载高低,具体取决于服务器集成的物理CPU数量、每颗CPU包含的子核心数以及当前系统正在运行、等待中的任务数量。
刚接触系统管理的人,很容易混淆平均负载和CPU百分比。
“CPU百分比”是一个具体时刻度量系统性能的有效指标,而平均负载则指出随时间流逝,系统整体性能变化趋势。
前者是瞬时值,后者是统计值,可以帮助我们预判未来一段时间,系统出现某种风险的概率。

如何使用?
Linux正常平均负载取决于系统的CPU数量和总核心数量。
双 CPU 系统可以处理更多并发进程,因此平均负载较低。
但是,如果系统运行的进程多于 CPU 数量,则平均负载会增加。
核心数也会影响平均负载。核心数少而平均负载高表明系统不堪重负。
另一方面,核心数多而平均负载低则意味着系统有空闲容量,能够管理更多进程。
通常,平均负载低于 CPU 核心数是正常的,因为这意味着有足够的资源让所有进程顺利运行。

例如,在四核 CPU 系统中,平均负载小于 4 是正常的。但是,如果平均负载始终高于 CPU 核心数,则表明系统负载过重。
另一方面,平均负载为 0 并不意味着系统处于空闲状态。系统可能正在运行后台进程或任务。

如何查看CPU核心数量?

1
lscpu

系统平均负载高于CPU核心数,一般有哪些原因?

  • 服务器中执行的线程数量过多
    服务器上可能运行着一个使用 Akka 或 goroutines 等并发模型实现的应用程序。一方面,这将提高应用程序的性能,因为它可以同时处理多个请求。

  • 缺少 RAM 迫使服务器使用交换内存
    平均负载过高的另一个可能原因是 RAM 不足。当系统检测到没有足够的内存来运行进程时,它会转而使用交换内存。使用交换内存的问题是处理器队列中必然有多个进程需要等待,这将导致平均负载过高。
    为了解决这个问题,我们必须找到优化服务器中运行的应用程序以节省内存的方法。如果这没有帮助,唯一剩下的解决方案就是为服务器添加更多 RAM。

  • 大量 I/O 流量
    系统中 I/O 请求数量过多也可能导致平均负载过高。如果 I/O 请求过多,系统必然会出现高延迟,进而导致平均负载过高。要查看这是否是导致平均负载过高的根源,我们可以使用命令行工具 iostat 并确定 I/O 流量过多的分区。这样我们就可以安全地停止导致问题的进程。

Linux系统如何增加平均负载?
增加 Linux 系统的平均负载可能会带来不利影响,因为这会使系统工作更加困难。然而,在特定情况下,提高平均负载是理想的结果,例如进行系统压力测试时。

如果想增加 Linux 中的平均负载,请尝试以下方法之一:

  • 通过运行更多应用程序或启动使用更多资源的进程来增加进程数量。
  • 优化代码或并行运行进程以减少每个进程完成所需的时间。
  • 增加并发用户数量。
  • 使用 cron 等调度程序安排更多任务自动运行。
  • 运行更多 CPU 密集型任务,例如执行数学计算、加密或压缩的程序。
  • 增加进程用于工作的线程数。

如何降低 Linux 中的平均负载?
大多数 Linux 服务器的设计负载平均值低于 CPU 核心数。但是,如果负载较高,系统可能会承受巨大压力。

要降低 Linux 系统上的平均负载,首先使用 top、htop 和 ps 等工具确定高负载的来源。

确定原因后,有几种方法可以降低平均负载:

  • 使用性能更强大的 CPU 升级系统。
  • 增加 RAM 以减少交换(将数据从 RAM 移动到硬盘驱动器)并提高系统性能。
  • 通过微调配置、减少内存使用量或以较低优先级运行任务来优化正在运行的进程的性能。
  • 使用 cron、anacron 或 at 等调度程序安排后台任务在特定时间运行,减少同时运行的进程数。
  • 使用 Docker 或 Kubernetes 等容器化技术来隔离和管理进程。
  • 终止不必要的进程。使用 top 或 ps 命令打印正在运行的进程列表,并使用 kill 命令终止它们。
  • 限制并发用户数量或鼓励他们在不同时间使用系统。

参考文献:

https://phoenixnap.com/kb/linux-average-load
https://www.site24x7.com/blog/load-average-what-is-it-and-whats-the-best-load-average-for-your-linux-servers