处理 php 内存不足错误

处理 php 内存不足错误

我有一个基于 Drupal 的网站,位于一个相对较小的虚拟服务器(512MB RAM)上。最近,该网站开始返回如下 php 内存不足消息:

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

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

该网站可能已经增加了复杂性、内容等。但我无法很好地解释该消息:这是否意味着整个请求现在已分配了 17MB(?),并且无法从操作系统获得更多 7KB(?)。Web 服务器是否已经用尽所有内存,或者操作系统是否没有更多内存可分配?

我不确定内存开销是来自 Web 服务器还是其他服务,因为当我收到内存不足消息时,我无法使用 ssh 进入服务器。过了一会儿,一切又恢复正常。

答案1

在 php.ini 中设置以下内容,

memory_limit = 100M
post_max_size = 100M

此外,值得注意的是,如果您通过 GD 发送库上传图像,那么您发送的图像将在内存中解压缩。例如,如果文件尺寸为 3000x3000,则使用 GD 时的实际大小为:

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

还值得一提的是,对于任何 Linux 版本来说,512MB 对于 LAMP 来说都是一个很小的容量,即使网站很小,每天只有少数访问者,内存使用量也接近最大值,并且根据您上传的内容可能会出现问题。许多 VPS 禁用 SWAP,因为 VPS 所有者不希望持续的磁盘写入,这会减慢其他 VPS 的速度(启用 SWAP 后,磁盘会导致 VM 服务器延迟)。

因此,变化是文件太大并且内存不足,假设您使用好的 vps 提供商,您应该能够将内存扩展到 1gb,看看它是否仍然会回忆起这个错误。

答案2

您是否在网站上添加了任何新模块?这可能是脚本中的内存泄漏或无限循环。但它们通常会产生高 CPU 使用率。

您应该考虑安装 xdebug (http://www.xdebug.org/)您将获得有关应用程序的详细错误,以找出问题区域。不过这主要是由开发人员使用的。

答案3

发现可能重复的堆栈溢出它的答案

您是否尝试过终止以前的 Apache 线程?

相关内容