我在相对较小的虚拟服务器(512MB RAM)上有一个基于 Drupal 的网站。最近该网站开始返回 php out of memory 消息,如下所示:
Fatal error: Out of memory (allocated 17039360) (tried to allocate 77824 bytes) in /home/...
所有 php.ini 内存限制参数都设置为关闭 (-1)。
可能网站已经变得复杂、内容等。但我无法很好地解释该消息:这是否意味着整个请求现在已经分配了 17MB(?),并且无法从操作系统获得更多的 7KB(?)。是 Web 服务器用完了所有内存还是操作系统没有更多内存可供分配?
我不确定内存开销是来自 Web 服务器还是其他服务,因为当我收到内存不足消息时,我无法使用 ssh 进入服务器。一段时间后,一切再次正常运行。
在 php.ini 中设置以下内容,
此外,值得注意的是,如果您通过 GD 发送库上传图像,那么您发送的图像将在内存中解压缩。因此,例如,如果它是一个 3000x3000 文件,则使用 GD 时的实际大小为:
宽度 * 高度 * 位深度,例如 3000*3000*32 = 288000000 位 = 34 MB
还值得一提的是,如今任何 Linux 构建的 512mb 对于 LAMP 来说都是一个很小的数量,即使该站点很小并且每天只有少数访问者,内存使用量也接近其最大值,并且取决于您的上传内容一个问题。许多 VPS 禁用 SWAP,因为 VPS 所有者不希望 CONSTANT 磁盘写入会减慢其他 VPS 的速度(磁盘会导致启用 SWAP 的 VM 服务器滞后)。
所以变化是文件太大,内存不足,假设你使用一个好的 vps 提供商,你应该能够将内存扩展到 1gb,看看它是否仍然记得这个错误。
您是否向站点添加了任何新模块?它可能是脚本中的内存泄漏或无限循环。但它们通常会产生高 CPU 使用率。
你应该考虑安装 xdebug ( http://www.xdebug.org/ ) 你会得到关于应用程序的详细错误信息来找出问题区域。不过,这主要由开发人员使用。
在Stackoverflow及其答案上找到可能的重复项
您是否尝试过杀死以前的 apache 线程?