【发布时间】:2018-10-16 09:28:58
【问题描述】:
我们在 Windows 上将 Apache(32 位)与 PHP 7.2.9 结合使用。它大部分时间都有效,但经过大量刷新(每次重新启动 apache 时都是随机次数),我们收到此错误:致命错误:内存不足(分配 27262976)试图在 [random] 中分配 4096 个字节文件,总是一个不同的]在第 x 行。
奇怪的是它一直给出完全相同的错误,直到我们重新启动 Apache,然后它工作了几个小时。
同样奇怪的是,我们在 php.ini 中设置了 512M 作为内存限制,但它说分配了 27262976,即(正好)26MB。我们有 2GB+ RAM 可用,所以这不是问题。
如果有人知道如何解决这个问题,那就太好了。
谢谢, 拉尔斯
【问题讨论】:
-
第一步 - 在新的浏览器选项卡中运行新文件 (phpinfo.php) 中的 phpinfo,查看正在加载的 php.ini 以及每个选项设置的值。第二步 - 你没有释放内存,我猜一个大脚本已经到位并且相当耗费资源,这占用了你所有的内存。大量执行这些脚本 = 内存增加 = 泄漏。
-
您是否有任何未正确终止的延迟或长时间运行的进程?
-
你有内存泄漏。确保关闭脚本并释放资源(例如打开的数据库连接/文件)。还要确保您的 GarbageCollector 正常工作。
-
同意以上所有。使用
unset()指导 GC 以更好地管理资源。您也可以尝试调用memory_get_usage()来检查内存使用情况。通常只是逐步调试以查找泄漏 -
不要忘记
memory_limit指的是 EACH 和 EVERY 脚本,因此如果您有 5 个同时连接并且其中 4 个分配每个 400 MB - 那么第五个可能无法分配您的服务器上的相同数量(2GB RAM)
标签: php out-of-memory fatal-error