一个进程占用所有服务器资源(iowait?)

一个进程占用所有服务器资源(iowait?)

我在 CentOS 7 下的同一个盒子上同时运行多个进程(每个进程代表单独的 Linux 用户)。

我使用 Zabbix 进行监控。

有时 CPU 利用率图上会出现以下模式。

在此处输入图片描述

如果你放大它,它看起来就像

在此处输入图片描述

因此服务器会冻结一段时间,甚至 SSH 登录也不起作用(当然其他进程也没有按预期工作),并且 Zabbix 代理无法将其数据发送到 Zabbix 服务器(Zabbix 服务器位于单独的主机上)。

据我从 Zabbix 图例中理解,图表的黄色部分是等待

在此处输入图片描述

那么你能解释一下等待一个过程的改变能对整个系统产生如此大的影响吗?

以及如何防止和限制这种行为?

答案1

这不是一个过程,而是事物等待 IO 的时间。

我想说,你的硬盘可能在那些时候完全超载了。超载到荒谬的程度 - 可能是因为:

  • 极其糟糕的编程,没有在内存中缓冲内容。
  • 极其糟糕的硬件选择(即硬盘的 IO 预算根本不够,而需要 SSD)。
  • 严重故障的硬件(硬盘上的坏扇区)会使其进入某种需要一些时间的重试模式。
  • 标准用法。如果您有一个数据库,它会尝试尽快重新组织索引,并且无论您使用什么硬件,都可能导致严重的 IO 峰值。

显然,这也可能是驱动程序中的一些软件错误,但考虑到这是一个专业论坛,我认为您已确保更新了服务包。

您必须开始分析导致过多 IO 的情况。即您必须查看进程的 IO 等待统计数据,而不是系统总数。

鉴于很多东西都在进行 IO - 并且经常等待它完成 - 总 IO 过载导致各种奇怪的行为也就不足为奇了。

相关内容