![当 RAM 几乎有一半可用时使用交换](https://linux22.com/image/658403/%E5%BD%93%20RAM%20%E5%87%A0%E4%B9%8E%E6%9C%89%E4%B8%80%E5%8D%8A%E5%8F%AF%E7%94%A8%E6%97%B6%E4%BD%BF%E7%94%A8%E4%BA%A4%E6%8D%A2.png)
今天我注意到,我发现了以下的事情:
如您所见,RAM 几乎是半空闲的,而交换空间的使用率非常高。根据我的课本知识,我过去认为 Linux 操作系统会尽力利用 RAM,当 RAM 不足时,它会将一些最少使用的页面从 RAM 移动到交换空间。
有人可以解释一下我的理论知识是否正确,并向我解释一下它在 Linux 世界中实际上是如何运作的。
答案1
尽管即使还有剩余内存,内核也会使用交换空间,但使用超过三分之二的交换空间可能表明服务器可能曾经耗尽内存,因此才开始使用交换空间。我会将交换空间使用情况与 sar 报告中的内存使用情况关联起来,以推断系统是否有足够的 RAM。我还会检查 dmesg 或日志,以确定服务器是否确实耗尽了内存,并且 oom-killer 是否启动。
答案2
即使您有大量可用 RAM,Linux 内核也会开始交换内存页面。您可以通过设置自定义交换量来微调此行为。
http://en.wikipedia.org/wiki/Swappiness
对于服务器,如果您的内存始终足以满足工作负载,我建议将 swappiness 设置为 1。对于工作站,我建议使用默认值 60。
# check the current value
cat /proc/sys/vm/swappiness
60
# swappiness = 1 (swap only if necessary)
echo 1 > /proc/sys/vm/swappiness
# or use sysctl
sysctl -w vm.swappiness=1
通过设置使 /etc/sysctl.conf 中的设置永久生效
vm.swappiness=1
然后重新加载
sysctl -w
答案3
不幸的是,有些应用程序会直接占用交换空间,故意跳过 RAM。Chrome(以及 Photoshop)就是一个例子。让这些应用程序不进行交换的唯一方法是在没有交换分区的情况下运行。即使 swappiness 为 0 IIRC,它们仍会获得访问权限,因为它们明确要求这样做。
不过,按照上述方法更改 swappiness 对其他所有操作都有效。不过,我建议使用 10-20 而不是 1。