几天以来,我的服务器上出现以下错误:
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 中存在内存泄漏。