Pom*_*oma 24 linux ubuntu performance web-server swap
最近我的朋友告诉我,在有足够内存的 linux 网络服务器上关闭交换是个好主意。我的服务器有 12 GB,目前在峰值负载下使用 4 GB(不包括缓存和缓冲区)。
他的论点是,在正常情况下,服务器永远不会使用其所有 RAM,因此它遇到 OutOfMemory 情况的唯一方法是由于某些错误/ddos/等。因此,如果关闭交换,系统将耗尽内存,最终会导致占用内存的程序(很可能是 Web 服务器进程)和其他一些进程崩溃。如果打开了交换它会同时占用 RAM 和交换空间,最终会导致同样的崩溃,但在此之前,它会卸载关键进程(如 sshd)进行交换,并开始执行大量交换操作,从而导致速度大幅下降。这样,当在 ddos 系统下可能会由于巨大的滞后而进入完全无法使用的状态时,我可能无法登录并终止网络服务器进程或拒绝所有传入流量(除了 ssh)。
这是正确的吗?我是否遗漏了什么(例如,即使我有足够的 RAM,交换分区在某些方面也非常有用)?我应该关掉它吗?
chu*_*utz 28
我会说这取决于您的用例,其余的答案已经很好地涵盖了这一点。4G 的交换毕竟是购买一些安全的廉价方式。而且我觉得这种便宜是让人们不想关闭它的原因。
但让我用一个反问句来回答。如果钱不是问题,并且您可以在两个系统之间进行选择——一个有 12G 的 RAM 和 4G 的交换区,另一个有 16G 的 RAM 并且没有交换区——你会选择哪一个?不幸的是,大多数人仍然会回答说他们会选择 16G 的 RAM 并仍然添加 4G 的交换,这与我的观点不符。
另一方面,我个人认为交换系统比崩溃的系统更糟糕。崩溃的系统会触发备用备份服务器更快地接管。在主动-主动(或负载平衡设置)中,崩溃的系统会更快地停止旋转。无交换系统再次获胜。
不,这不是一个好主意。“某些过程变得疯狂”意味着你应该已经主动打电话
ulimit -d
在进程创建时间或之前设置每个进程数据段内存的限制 - 并且可能限制线程数
ulimit -T
每个进程。ulimit 是你的朋友。在关闭交换之前,请考虑阅读其中一份内存调整指南。您也可以更改内核参数以尝试处理 DOS 攻击或坏程序。
这样看:系统上的总内存是 RAM + 交换。如果您有 12GB 的交换空间,您只需通过禁用交换空间就可以有效地将系统 VM 容量减少一半。馊主意。这不是辩论,实际上,它只是阅读其他人多年来从以前的糟糕经历中了解到的内容。您的朋友也可能需要阅读一些书。
小智 5
正如其他人所说,您可以通过修改“swappiness”参数有效地停止服务器,除非绝对必要。这控制了内核换出内存页面的积极程度。
您可以看到它当前的设置:
cat /proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)
您可以使用(以 root 用户身份)“实时”编辑它:
# echo "10" > /proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)
并使其持久化,将以下内容添加到 /etc/sysctl.conf:
vm.swappiness=10
Run Code Online (Sandbox Code Playgroud)