2

PHP のメモリ使用量についていくつか質問があります。自力で色々テストしてみますが、色々とアドバイスいただけると助かります。

私は最近、PHP 関数 ignore_user_abort() について知りました。これにより、ユーザーがページを閉じてもスクリプトを実行し続けることができます。Cron ジョブの設定にはさまざまな落とし穴があるため、Cron ジョブの代わりにこれをメール ニュースレター ツールに使用することを考えていました。ユーザーをページにとどまらせ、AJAX リクエストを使用し、ページ コンテンツが配信された後にスクリプトの一部を実行するという別の方法にも問題があります。

私の解決策は、スクリプトの最初に call ignore_user_abort(true) を実行し、最後にコンテンツが生成された後、flush() を適切に呼び出してから、ニュースレター スクリプトを実行することです。または、AJAX でこれを行います。

まず第一に、そのアプローチに問題があると思う人はいますか?

次に、時間制限を設定せずにスクリプトを使用し、各電子メールを while ループで処理した場合、一度に実行した場合のメモリ使用量はどのようになりますか? 新しい変数を使用するのではなく、変数を上書きするので、それは低いと思います。

第 3 に、たとえば 1 回の実行で 1000 通など、大量のメールを送信する場合、メール サーバーに過負荷をかけたくないからです。私の cron ジョブでは、スクリプトを 5 分ごとに実行し、50 通の電子メールのバッチを送信します。これを 1 回のパスで行う場合、50 通のメールを送信し、たとえば 5 分間スリープを呼び出してから、さらに 50 通のメールを続けることはできますか? もしそうなら、スリープ期間中のスクリプトのメモリ使用量はどうですか? これは効率的な方法でしょうか?

ここで私が実際にやろうとしているのは、Cron ジョブを設定するという複雑な (技術に詳しくない人にとっては) タスクを必要としないニュースレター ツールを作成する方法を考え出すことです (これは Cron ジョブのオプションでさえありません)。共有ホスト)、ユーザーがブラウザーを 1 つのページで開いたままにしておく必要はありません。

アイデアの提案やフィードバックは大歓迎です。ありがとう!

4

1 に答える 1

1

以前の仕事で、PHP の重要な機能のためのデーモンを作成しました。これは、あなたが説明したものとまったく同じではありませんが、十分に類似しています。確かにループとスリープを使用します。長期的な安定性 (特にメモリ管理) について非常に疑問を持っていたため、非常に厳しいストレス テストを実施しました。結果は素晴らしく、コードは本番環境に置かれ、何年もの間、何ヶ月も問題なく実行されました。

警告:

  • IIRC、PHP にはカウンター ベースのガベージ コレクターがあります。これは、Java とは異なり、互いに参照している 2 つのオブジェクトが、プログラムからアクセスできなくてもメモリ内にとどまることを意味します。オブジェクトを「放棄」するときは、これに注意する必要があります。
  • 多くの場合、Web サーバーには、実行時間の長いスクリプトを強制終了するメカニズムがあります。これは、特にサーバーの構成を調整できない場合に、ここでの目的を無効にする可能性があります。
于 2011-03-20T23:35:52.810 に答える