Linux排除系统性能问题 — CPU 负载

系统到底是什么?

系统有 4 个核心元素

  • CPU ( Central Processing Unit)
  • Memory
  • Core
  • Network Manager

CPU 负载问题:

CPU 状态指示器:

 中央处理器负载: 从数学上讲,CPU 负载是 CPU 执行的工作量占总容量的百分比。每个等待 CPU 的进程将负载递增 1,而提供的进程将负载递减 1。负载平均值是一段时间内内核运行队列中等待的任务数(不仅是 CPU 时间,还包括磁盘活动)的度量。

中央处理器利用率(使用率): 它是 CPU 不空闲时间的度量。它也可以定义为衡量 CPU 现在的繁忙程度。

CPU 负载 CPU 利用率是两个不同的东西。这些数字通常具有相互关联的模式,但它们并不相同。

场景 1 - 高 CPU 负载和低 CPU 利用率:

  • 当进程由于磁盘繁忙而在 I/O 中保持阻塞时。例如,如果一个简单的 mkdir 调用由于 I/O 繁忙或停止而在 I/O 中被阻塞,则可能会导致高 CPU 负载。
  • 当你有一个进程进入不间断的睡眠状态时。进程可以进入不间断睡眠状态的原因是驱动程序是否正在等待网络或磁盘 I/O

场景 2 — 高CPU利用率和低 CPU 负载: 

  • 当有一个线程/进程消耗整个内核并且你没有大量进程正在运行或等待 CPU 时。

系统故障排除工具:

有一些工具和指令可以帮助你理解和解决 CPU 负载问题。 

  • uptime
  • ps
  • top

uptime: uptime提供有关系统启动时间活动用户数以及 1 分钟5 分钟和 15 分钟内负载平均值的信息。最后三个数字可帮助你了解使用高峰是长期还是短期。小数表示请求 CPU 资源以执行操作的活动任务数。如果最后一个数字太高,那么这是一个应该解决的问题。如果您有 1 个内核,其值大于 1(1.5),则差值 (0.5) 表示排队等待执行的进程数的百分比 

要正确理解和分析这些数字,你应该首先知道机器上有多少处理器。可以查询文件 cpuinfo 以获取处理器数量。

cat /proc/cpuinfo | grep processors
processor : 0
processor : 1
processor : 2
processor : 3

 上面的代码和截图取自具有 4 个内核的系统。从上面的指标可以理解,在过去 1 分钟内,每个 CPU 的使用时间为 70% (2.83/4),在过去 5 分钟内,每个 CPU 的使用时间超过 79% (3.17/4),在过去 15 分钟内,每个 CPU 的使用时间超过 71%(2.84/4)。这意味着可以解释为在过去 5 分钟内,CPU 负载已减少,因为提供了一些进程或进程的等待时间减少了。

ps : 进程状态 (ps) 命令是我经常用来获取系统上运行的处理状态的东西,并查看是否有任何进程被重复生成或进入奇怪的状态,如不间断睡眠状态、僵尸状态。(我将在另一篇文章详细解释一下有关ps进程状态)

ps -afx

top: top提供了丰富且自我更新的过程信息布局。top 提供类似于正常运行时间输出的负载平均值,它还包括在运行 top 命令后键入“1”时的每个 CPU 指标。由于我们正在尝试解决性能问题,因此首先应该关注的是 %CPU 列。另请注意,默认情况下,具有高 %CPU 使用率的进程是显示在顶部的进程。应检查这些进程,如果不再需要,则应终止这些进程。

killall <process>

但大多数时候,你不能仅仅终止进程来优化系统性能,可以使用 nice 命令限制它获得的 CPU 资源,下面我列出了有关其使用的一些场景。

使用 nice调整Linux系统中程序或进程的调度优先级: nice 确定进程的优先级是一个命令,它能够执行具有更改调度优先级的实用程序。默认情况下,新进程以nice值 0 开始。nice值应介于 -19 和 20 之间。nice值越高,表示程序或进程更“友好”,即它愿意让出CPU时间给其他的程序或进程。与此相反,nice值越低,表示进程或程序更“自私”,因为它会抓住它所能获得的所有资源,即占用更多的CPU时间。

假设你正在运行一个脚本 mytest.sh。如果它不是任务关键型脚本,您可以给它一个更高的 nice 值并按如下方式执行它

nice -10 /home/test_user/mytest.sh

如果你想优先考虑它并投入更多的资源,你可以设置如下 nice 值

nice --15 /home/test_user/mytest.sh

使用 yes 命令进行压力测试:

你可以用yes命令来为自己制造一个高CPU负载的环境。yes命令会持续地输出“y”(或者你自定义的内容),直到你中断这个进程。你可以把这些输出导向/dev/null,并用(&)符号让进程在后台运行。你可以多次启动同样的命令来提高系统负载。这样会让系统忙碌起来,你可以用top命令来查看系统的负载和利用率。你也可以运行其他应用程序来检查它们的运行情况和CPU占用率。

最后,你可以用killall命令来结束所有的yes进程。

yes > /dev/null &
killall yes

通过这篇博客,我想让你了解Linux系统中CPU负载和利用率的概念和区别,以及如何使用uptime、ps和top等工具来监测和分析系统状态。我也向你展示了如何使用yes命令来进行压力测试。我希望你能在阅读这篇博客后,能够更好地理解和管理Linux系统。现在,我想问你一个问题:你是如何优化Linux系统性能的?请在下面分享你的经验和心得。期待你的回答!

猜你喜欢

转载自blog.csdn.net/qq_61813593/article/details/130367019