我有一个具有 1GB 内存的 Linux 虚拟专用服务器,但是我不断收到以下错误:
fork failed: Cannot allocate memory
不过,我不认为我缺少内存。如果我运行 free:
root@server44:~# free -m
total used free shared buffers cached
Mem: 1024 133 890 0 0 0
-/+ buffers/cache: 133 890
Swap: 0 0 0
root@server44:~# man swapon
man: fork failed: Cannot allocate memory
我有 890 MB 可用空间,但 fork 失败了。知道原因吗?我的服务器是否内存不足?我的主机是运行 HyperVM 的 FsckVPS。
答案1
您使用的是哪种虚拟化技术?至少对于 OpenVZ/Virtuozo 来说,“free”命令不会显示实际可用内存。通常,它显示的内存量比实际分配给 VPS 切片的量大得多。
此外,还有几种不同的“内存”限制,用于限制不同类型的内存(在 OpenVZ 术语中,它们是 kmemsize、lockedpages、privvmpages、shmpages、vmguarpages、oomguarpages 等)。
如果您正在使用 OpenVZ,请检查 /proc/user_beancounters 以查看您达到的限制,并检查“failcnt”列。
答案2
是不是您的主机过度销售了运行虚拟机的主机上的 RAM?可能是您只有 128Mb 的“专用”RAM,如果当时没有其他虚拟机正在使用它,其余的 RAM 可供突发使用。如果您告诉我们有关您正在使用的环境的更多详细信息(哪种虚拟机技术,可能哪个托管提供商及其哪些产品),我们可能会告诉您必须检查这一点。
在虚拟机主机上过度销售 RAM 资源通常是一种坏的我认为这是一个想法,但如果技术允许,许多托管服务提供商都会这样做。