0

時々メモリ不足になり (プロセスが不足して)、異常終了する PHP スクリプトがあります。スクリプトの終了時に「クリーンアップ」操作を実行できる機能が PHP にあるかどうかを知りたいです。「シャットダウン ハンドラ」を試しましたが、呼び出されないようです。

使用できる「シグナル ハンドラ」や「シャットダウン コールバック」などはありますか? スクリプトの終了時 (正常または異常) に何らかの処理を行う関数を呼び出したいと考えています。

4

1 に答える 1

0

PHP には、期待どおりに動作するクリーンアップ機能はありません。あなたができる/すべきことは、コードを見て、メモリを使い果たすことなく必要な操作を完了するために最適化する方法を確認することです。

PHP には、現在 PHP に割り当てられているメモリ量を取得できるmemory_get_usageという関数が組み込まれています。これにより、PHP が現在使用しているメモリの量を確認し、php.iniファイル内に割り当てられているメモリの量と比較できます。これに近づいたら、後退するか、このスレッドが中断した別のスレッドに戻ることができます。

PHP を微調整し、おそらくメモリを節約するためにできることをいくつか示します。そのうちのいくつかは、おそらく既にご存知でしょうが、同じ問題が発生した場合に私が見たものです。

  • php.ini可能であればファイル内のメモリ量を増やすか、 ini_setを使用して PHP のメモリ サイズを増やしてみてください。メモリの量を増やすと、問題が一時的に解決する可能性があります
  • unset関数を使用すると、変数の割り当てが解除/削除され、PHP が使用するメモリの一部が復元されます。
  • 可能な限り変数を再利用します。これには、再利用可能なメソッド/関数内にコードをカプセル化すること、および for/foreach/for..in ループをうまく利用することが含まれます。
  • 大きなデータ (テキストまたはバイナリ) をメモリに長期間保存しないようにしてください。
  • メインコードの実行がタイムアウトしないように、メモリまたはプロセッサを集中的に使用する操作をオフロードするサービスを作成する
  • 必要なものすべてを処理するために、1 つのスレッドに縛られたり、スクリプトのタイムアウトに縛られたりしないように、キューイングを使用します。おそらくrabbitMQまたは別のパッケージがあなたのために働くでしょう

PHP は、大量のデータと大量の変換を処理できる必要がありますが、効率を上げるためにできることはすべて、その過程で役立つだけです。

これがお役に立てば幸いです、リアム-

于 2012-06-20T06:15:51.387 に答える