今天早上在我去办公室的路上,我们共享 VPS 上的每个网站都开始出现同样的错误(几次,不是典型的致命的 memory_limit 错误):
Warning: Unknown: Unable to allocate memory for pool. in Unknown on line 0
共享服务器是一个运行 cPanel 的 64 位 OpenVZ 容器。主机上只有大约 6 个 VPS——这是最大的一个,只有 4GB。主机本身有 24GB RAM。如下图所示,主机和 VPS 的内存使用率都相当低。CPU 使用率/磁盘/主机似乎都正常。RlimitMem 设置为583653034
,但内存使用率与平常差不多。
Apache 2.2,PHP 5.2(mod_php)
重新启动 Apache 暂时解决了这个问题。但是,我想防止这种情况再次发生,我不确定是什么限制了内存。RlimitMem 设置为583653034
,但内存使用量与平常差不多。似乎内存充足:是什么导致了这个错误?
VPS 内存使用情况
主机内存使用情况
APC 信息
apc.ttl=0
apc.shm_size=0
apc.mmap_file_mask=(blank)
1 个段,大小为 32.0 MB(mmap 内存,pthread 互斥锁定)
答案1
这绝对是 APC 内存不足时出现的错误。当我(重新)构建服务器时,我经常忘记将此值增加到 128 M(适合我的应用程序),这就是您看到的确切错误。
答案2
/proc/bc/resources 中有任何失败计数吗?
所有失败计数应为 0 或自上次事件以来保持不变。
你需要:
vzct set <CTID> ... --save
增加具有失败计数的资源的资源限制(请man vzctl
参阅放部分)。您还可以直接在 中修改资源限制/etc/vz/conf/
。可能在所有情况下,增加限制后您都需要重新启动容器。为了安全起见,将有问题的资源的设置(障碍和限制)增加到最大持有量的 x2(两倍)。
写下当前的失败次数并密切关注它们,以免它们进一步增加。
有关控制各种资源的更多信息,您可以使用http://wiki.openvz.org/Resource_shortage作为起点。
答案3
您能否告诉我们更多关于主机已占用内存的信息?(例如,您为虚拟机分配了多少总内存,主机上每个虚拟机的内存是多少)我知道您最大的内存是 4GB,但如果其他内存都是 3GB,并且系统已占用 19GB,则应该显示有 5GB 内存可供托管操作系统使用。我的计算、假设或其他因素与上面的主机内存图(显示已占用 94% 的内存)不一致。
答案4
共享内存分配 sysctl 限制?查看 /etc/sysctl.conf 中的 shmmax 和相关项。
或者,您是否在 64 位操作系统上运行 32 位 PHP 和/或 Apache?我们在 64 位 Linux 上的高内存使用率 32 位应用程序中看到了奇怪的“天哪,我的内存不够了,我要填满交换空间了,尽管有 16GB 的可用物理内存”行为。