2

我正在使用 dompdf 生成大约 700 个 PDF 并将它们保存到磁盘。每个都涉及一个数据库查询以获取 PDF 的信息。当我运行它时,我进入了大约 2 分钟,然后内存不足。

  1. 为什么我的内存不足?每个PDF生成不应该消耗x内存,然后在完成时释放它吗?

  2. 在 PHP 中进行这样的大型操作以避免扼杀您的服务器有什么好的做法?

更多信息:

  • 它会在内存不足之前生成许多 PDF(大约 100 个)
  • 它失败的 PDF 在任何方面都没有异常大或特殊。它们都在 4KB 到 ~500KB 之间
  • 在处理过程中观察内存使用情况,它只是慢慢地爬上来,然后开始直到用完。

我无法将所见即所得的代码正确格式化,所以这里是有问题的片段的粘贴:http: //pastie.org/3800751

4

4 回答 4

1

想法:

  • 增加内存限制ini_set
  • 使用 cron 作业,或者通常尝试使用队列异步运行每个 pdf 生成。
  • 批处理(拆分)处理成一个可以在一个页面加载内处理的数字/在每个批处理后使用重定向到同一页面/使用会话header跟踪您在每个脚本加载的位置/注意浏览器上的重定向限制
于 2012-04-16T21:55:39.803 回答
1

您的问题可能是您异步运行代码。尝试同步运行它,它可能需要很长时间,但它会起作用。此外,请确保在每个循环结束时处理您的对象。

于 2012-04-16T21:49:36.640 回答
0

尝试memory_limit改变php.ini

于 2012-04-16T21:53:23.423 回答
0

一般来说,像这样的大型操作应该分叉到子进程中,每个子进程处理生成一个 PDF。如果您的 PDF 或 DB 库泄漏内存,这应该可以避免内存不足的情况。

于 2012-04-16T21:47:51.340 回答