致命错误:内存不足(已分配...)(试图分配...字节)不是由于 memory_limit 设置造成的

致命错误:内存不足(已分配...)(试图分配...字节)不是由于 memory_limit 设置造成的

几天以来,我的服务器上出现以下错误:

Fatal error: Out of memory (allocated 262144) (tried to allocate 393216 bytes)

通常,此错误是由于内存消耗超出了配置的 memory_limit 而导致的,但就我而言,两者无关。memory_limit设置为128MB,在本例中,我们甚至没有达到 1MB。

而且服务器的负载也不大,其实它是一个内网服务器,只有少数人连接到它。

系统:Windows Server 2003,1Go RAM,仅使用 600 MB。Apache 2.2.4 PHP 5.2.3

此错误是随机出现的。内存限制也随机地在几 kB 到几 MB 之间。有时需要重新启动 Apache 才能消除错误,有时错误会自动消失。
重新启动 Apache 或整个服务器会暂时有所帮助。

这个问题可能出在哪里?我该如何缩小错误源的范围?

答案1

此外,它是根据请求进行的(如果我错了,请纠正我),因此可能会超越硬限制并出错,特别是在与一堆处理共享内存的服务器上。

你可以使用以下命令创建一个 phpinfo.php 文件

<?php

// Show all information, defaults to INFO_ALL
phpinfo();

?>

在其中显示正在使用的实际设置。并可能使用 PHP顶部

向您显示正在运行的可能归因的任务查询。(有时,如果对 SQL 的大小判断错误或在调用后增长,则 POSTS 会绕过内存限制。)

答案2

后来我在 SO 上发现了同样的问题随机“PHP 致命错误:内存不足”错误并且更加完整致命错误:内存不足,但我有足够的内存(PHP)

此问题是由于物理内存限制造成的。出现这种情况的可能性有多种,例如其他进程占用了所有内存,Apache/PHP 中存在内存泄漏。

相关内容