2

dompdf で約 700 個の PDF を生成し、それらをディスクに保存しています。それぞれに、PDF の情報を取得するためのデータベース クエリが含まれます。実行すると、約2分でメモリが不足します。

  1. メモリ不足になるのはなぜですか? 各 PDF 生成が x メモリを消費し、終了したら解放するべきではありませんか?

  2. サーバーの首を絞めるのを避けるために、このような大規模な操作を行うためのPHPの良い習慣は何ですか?

いくつかの詳細情報:

  • メモリが不足する前に多くの PDF を生成します (数百)
  • 失敗したPDFは、異常に大きくも特別でもありません。それらはすべて4KBから〜500KBの間です
  • 処理中のメモリ使用量を監視すると、ゆっくりと収まり始め、使い果たされるまで始まります。

wysiwyg を適切にコード形式にすることができないため、問題のスニペットのパスティーを次に示します: http://pastie.org/3800751

4

4 に答える 4

1

おそらく、コードを非同期で実行していることが問題です。同期的に実行してみてください。非常に長い時間がかかる場合がありますが、動作します。また、各ループの最後にオブジェクトを必ず破棄してください。

于 2012-04-16T21:49:36.640 に答える
1

アイデア:

  • メモリ制限を増やすini_set
  • cron ジョブを使用するか、通常は各 PDF 生成をキューで非同期に実行してみてください。
  • 1 回のページ読み込み内で処理できる数にバッチ (分割) 処理 / 各バッチの後に同じページにリダイレクト /セッションheaderを使用して各スクリプト読み込みの現在地を追跡/ ブラウザのリダイレクト制限に注意
于 2012-04-16T21:55:39.803 に答える
0

一般に、このような大規模な操作は、それぞれが 1 つの PDF の生成を処理する子プロセスにフォークする必要があります。これにより、PDF または DB ライブラリでメモリ リークが発生した場合のメモリ不足の状況を回避できます。

于 2012-04-16T21:47:51.340 に答える
0

memory_limitで変更してみてくださいphp.ini

于 2012-04-16T21:53:23.423 に答える