使用 dompdf 呈现报告时,Apache / PHP 内存限制已耗尽

使用 dompdf 呈现报告时,Apache / PHP 内存限制已耗尽

我正在开发一个 Web 应用程序,并使用典型的 lamp 堆栈。我正在使用 dompdf 生成一些 pdf 报告。在一种情况下,我有一个简单的表格列表(想想客户列表),其中包含一些简单的信息(姓名、电话号码、电子邮件等...),但用户在这个列表中有近 400 个客户。当尝试将报告呈现为 pdf 时,超出了允许的内存大小并发生错误。我的问题是如何解决这个问题?如果一个运行报告的用户占用了我所有的 CPU,我只能想象当 100 个用户尝试在生产服务器(rackspace 云服务器)上同时运行报告时会发生什么

确切的错误是:

[2013 年 4 月 24 日,星期三 01:06:54] [错误] [客户端 127.0.0.1] PHP 致命错误:/home/redacted/redacted/v2/application/libraries/dompdf/include/style.cls.php 第 863 行中允许的内存大小 134217728 字节已用尽(试图分配 83 字节),引用者:http://redacted.v2/报告

我是否需要为每次报告运行生成一个单独的进程?我不太清楚该怎么做(我想我需要通过 PHP 来完成)。基本上,我不希望我的服务器在每次运行大型报告时突然停止运行。任何想法或建议都非常感谢!

答案1

您可以运行一个单独的进程来处理所有报告,这样只有一个进程需要占用资源,而不是很多。尤其是在多用户环境中,这将是一个好主意。是的,您可以从 php 运行进程,例如检查 popen() 的文档。

另一方面,还应该考虑一下这(使用 php 的 dompdf)是否是处理大型报告的最佳方式。还有其他 pdf 创建服务的实现,运行速度更快,资源利用效率更高。

编辑:为了快速修复当前的错误,您可以将 PHP 的内存限制扩大到 256M,但这只是一种解决方法,而不是真正的解决方案。

相关内容