处理php内存不足的错误

我有一个相对较小的虚拟服务器(512MB RAM)基于Drupal的网站。 最近该网站开始返回内存消息这样的PHP

Fatal error: Out of memory (allocated 17039360) (tried to allocate 77824 bytes) in /home/... 

所有的php.ini内存限制参数都设置为off(-1)。

显然这个网站已经变得复杂了,内容等等,但是我不能解释这个消息:这意味着整个请求现在已经分配了17MB(?),并且不能从操作系统获得更多的7KB(?)。 Web服务器是否花费所有内存,或者操作系统没有更多的内存来分配?

如果内存开销来自Web服务器或其他服务,我不确定,因为当我收到Mem-Out消息时,我无法通过ssh进入服务器。 过了一段时间,再次运行良好。

在php.ini中设置如下,

 memory_limit = 100M post_max_size = 100M 

此外,值得注意的是,如果您通过GD发送库文件上载图像,则发送的图像将在内存中解压缩。 所以例如,如果它的一个3000×3000文件的实际大小,如果使用GD是:

宽度*高度*位深度,例如3000 * 3000 * 32 = 288000000位= 34MB

值得一提的是,对于任何Linux版本而言,512MB这些日子对于LAMP来说是一个很小的数目,即使这个站点很小,每天只有几个访问者的内存使用量接近其最大值,并且取决于你的上传是什么一个问题。 许多VPS禁用SWAP,因为VPS所有者不希望使用CONSTANT磁盘写入操作来减慢其他VPS的速度(磁盘在启用SWAP的VM服务器上导致延迟)。

所以这个改变就是文件很大,而且内存不足,假设你使用一个好的vps提供程序,你应该能够把内存扩展到1GB,看看它是否还记得这个错误。

你有没有添加任何新的模块到网站? 这可能是一个脚本内存泄漏或无限循环。 但是他们通常会产生较高的CPU使用率。

你应该考虑安装xdebug( http://www.xdebug.org/ ),你会得到有关应用程序的详细错误,找出问题所在。 这是开发人员最常用的。

在Stackoverflow和它的答案find一个可能的重复

你有没有尝试杀死以前的Apache线程?