查明 PHP 内存不足错误的确切原因( ...它是 var_dump() )

Pinpoint exact cause of PHP out of memory error ( ...it was var_dump() )

几个月来,我在一个一直在持续开发中并且到目前为止拥有大约 20 个用户的应用程序上偶尔会出现内存不足错误。

它似乎没有任何我能检测到的负面影响,但最终我找到了罪魁祸首。

我不知道怎么做,但我有一个默认的 404 错误视图,奇怪的代码已经找到了它,我不确定我是怎么做到的。如果使用 findOrFail() 并且数据库没有找到记录,框架会自动调用这个默认的 404 错误视图。当某个页面在我的应用程序中不可用时(这是应该的,因为某些内容可能 published/unpublished),就会触发此错误视图。

奇怪的代码是:

<!-- <div><?php var_dump($exception); ?></div> -->
<div class="text">{{$exception->getMessage()}}</div>

我知道这很奇怪。

首先,html 注释,因为它是一个 blade 文件,所以不适用,所以 var_dump 尽管是 'commented out' 却被调用了。

所以我用这个替换了它:

{{ var_dump($exception) }}

并且可以可靠地重现内存不足错误(以及浏览器中的 500 错误)。

删除它,404 视图呈现正常。

将其替换为 {{ dd($exception) }} 也能正常工作 - 我得到了轨迹的渲染图。

那么, 为什么var_dump行会导致内存不足错误?

我应该怎么做才能进一步调查?

我在 Laravel 5.3

这很可能是因为 $exception 变量的内容很大。当您转储变量时,PHP 将尝试将其转换为字符串表示形式。这会占用大量内存。

我不明白您为什么需要输出整个异常对象。您很可能只需要消息(您通过 $exception->getMessage() 获取消息)。其余的只是回溯和对相关对象和实例的引用。