我经常会遇到大型服务器运行缓慢的情况,该服务器由多个用户同时使用,具有许多 CPU(72 个)和大量 RAM(125GB)。
当然,服务器运行很多东西,因此负载很高,但几乎从来不会出现几乎所有 CPU 同时使用的情况。内存使用率经常上升到 80% 左右。我注意到 iowait 经常会变高(大多数时候约为 15%,我见过最高约为 20%),而且 swap 似乎总是 100% 的利用率。Swap 是 4gb。
为了解决速度慢的问题,您有什么建议?
以下是我考虑过的一些选择:
增加 swap
将交换容量降低到例如 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。
还有压力失速信息