在 Ubuntu 14.04 上,由于内存和交换使用率已达到 100%,因此必须增加交换文件。
在实时生产服务器上,是否可以在对服务造成最小干扰的情况下增加交换量?
输出free -h
:
total used free shared buffers cached
Mem: 3.9G 3.4G 435M 24K 1.2M 7.5M
-/+ buffers/cache: 3.4G 443M
Swap: 8.0G 6.6G 1.4G
答案1
我同意关于更多 RAM 的评论。回答您的问题:您可以创建额外的交换分区(如果您的硬盘上有额外的空间)或创建交换文件。
dd if=/dev/zero of=/path/to/swap_file bs=1024 count=${size_of_additional_swap}
mkswap /path/to/swap_file
swapon /path/to/swap_file
使用的交换空间越多,硬盘的负载就越大,系统运行速度肯定会越慢。
答案2
正如迈克尔·汉普顿在他的评论中提到的,你需要更多的 RAM,而不是交换。
交换空间通常仅在您的应用程序无法容纳可用 RAM 时才使用 - 这通常与 Windows 的使用模式不同,在 Windows 中,页面文件通常用于不经常访问的页面。
如果你的交换空间不在闪存上,那么它可能会执行很多比实际 RAM 更差。
但是要回答这个问题,您无法实时扩展交换。您需要卸载/交换,扩展底层存储,然后重新安装/交换。
答案3
忘记真正的操作系统对动态调整大小的支持:你没有使用WINDOWS®! :-)
更严重的是:您可以在使用交换文件时增加其大小,但您需要再次运行 mkswap,这意味着要先将其卸载。
我还想说,如果您使用碎片文件系统,使用文件而不是分区通常会增加访问时间,从而使本来就很慢的系统变得更慢。
由于您使用的交换大小,我会将其设置/proc/sys/vm/swappiness
为 100,这可能会减少磁盘活动,但代价是更高的交换空间使用率。
我不知道您的 RAM/已使用交换的比率;但考虑到已使用的交换大小,我怀疑它太高了。如果这是真的,您应该真正考虑在服务器开始出现严重停滞之前添加一些内存模块。