iowait较高,交换几乎总是处于完全使用状态

iowait较高,交换几乎总是处于完全使用状态

我经常会遇到大型服务器运行缓慢的情况,该服务器由多个用户同时使用,具有许多 CPU(72 个)和大量 RAM(125GB)。

当然,服务器运行很多东西,因此负载很高,但几乎从来不会出现几乎所有 CPU 同时使用的情况。内存使用率经常上升到 80% 左右。我注意到 iowait 经常会变高(大多数时候约为 15%,我见过最高约为 20%),而且 swap 似乎总是 100% 的利用率。Swap 是 4gb。

为了解决速度慢的问题,您有什么建议?

以下是我考虑过的一些选择:

  1. 增加 swap

  2. 将交换容量降低到例如 10(目前设置为 60),这样至少在有足够的 RAM 时,交换空间不会一直满的

非常希望听听您对这些选项的看法。

我远不是这个领域的专家,所以也非常欢迎任何其他建议。

编辑:根据评论中的讨论添加详细信息。见下文:

vmstat显示交换量非常高,使用时glances,我看到一个警告(ongoing) MEMSWAP (100.0)

答案1

首先,我会安装 Performance Co-Pilot 之类的东西,这样你就可以了解服务器上的利用率趋势。此外,我还会在上面坐一会儿,了解哪些进程最活跃以及它们使用了多少内存。

其次,增加交换空间甚至消除交换空间似乎也非常合理。对于如此大的服务器来说,4GB 几乎毫无价值。人们会永久关闭交换空间,这样在内存压力下,VM 就无法开始处理页面并为此使用过多的 CPU。当然,当内存不足时,VM 可以开始清除大量不需要的脏页和缓冲区缓存,但这些将进入文件系统。如果内核没有不断终止内存不足的进程,那么内存利用率可能主要是文件系统缓存。

总结一下,删除交换设备,添加 pcp,尝试控制内存的使用情况,如果重新添加交换,请确保其大小合适。理想情况下,您希望休眠进程处于交换状态,并且所有活动进程都能够放入可用的 RAM 中。如果活动进程都在长时间内交换页面,那么更多的交换只会使服务器超出其能力运行。

答案2

然而,有一点是清楚的,那就是当至少还剩余 20/30gb 的 RAM 时,交换空间就会始终被填满(100%),通常还会更多。

不要删除交换。你的交换空间已经用完了虚拟的内存。将交换大小增加到 1-2 x RAM。交换用于将当前不需要的虚拟内存页面从 RAM 交换到磁盘。

您可以免费身体的RAM 但同时虚拟的记忆

比较

# The amount of memory presently allocated on the system. The committed memory is a sum of all of the memory which has been allocated by processes, even if it has not been “used” by them as of yet. 
cat /proc/meminfo | grep Committed_AS

# This is the total amount of memory currently available to be allocated on the system, expressed in kilobytes. 
cat /proc/meminfo | grep CommitLimit

如果 Committed_AS 持续接近 CommitLimit 且 swap io 较高 - 请添加更多 RAM。

还有压力失速信息

https://docs.kernel.org/accounting/psi.html

https://facebookmicrosites.github.io/psi/docs/overview

相关内容