現在のビジネスではデータフローのリアルタイム分析機能を実装する必要があり、これは第 2 レベルまで正確である必要があります。当初は swoole タスクを使用してタスクサービスを実装する予定でしたが、現在実行する対応するマシンがありません。サーバーが壊れたので、一時的にswooleのマルチプロセスモデルの組み合わせを使用することにしました。 swooleのタイマーの実装中に、親プロセスが発生し、メモリ使用量が急増し続けました。解決してください。コードロジックは、親プロセスに 6 つの swoole_process を作成し、swoole_timer を通じてアイドル状態の子プロセスにタスクを毎秒分散し、子プロセスがタスクを完了した後、プロセスをビジーとしてマークし、パイプを介して親プロセスと通信します。現在のプロセスがアイドル状態であることを親プロセスに通知します。プロセスが一定期間以上アイドル状態である場合、「親プロセスが子プロセスのプールを維持する」と同様の効果があります。処理タスクが一定数を超えた場合、親プロセスはプロセスに通知して、新しい子プロセスを破棄して開始することができます。コードロジックはおおよそ次のとおりですが、親プロセスのメモリ使用量が徐々に増加しているという問題が発生しました。これを swoole マスターはどのように解決できるでしょうか。親プロセスがこの同様の子プロセス プールを維持しているためでしょうか?教えてください
返信内容:
現在のビジネスではデータフローのリアルタイム分析機能を実装する必要があり、これは第 2 レベルまで正確である必要があります。当初は swoole タスクを使用してタスクサービスを実装する予定でしたが、現在実行する対応するマシンがありません。サーバーが壊れたので、一時的にswooleのマルチプロセスモデルの組み合わせを使用することにしました。 swooleのタイマーの実装中に、親プロセスが発生し、メモリ使用量が急増し続けました。解決してください。コードロジックは、親プロセスに 6 つの swoole_process を作成し、swoole_timer を通じてアイドル状態の子プロセスにタスクを毎秒分散し、子プロセスがタスクを完了した後、プロセスをビジーとしてマークし、パイプを介して親プロセスと通信します。現在のプロセスがアイドル状態であることを親プロセスに通知します。プロセスが一定期間以上アイドル状態である場合、「親プロセスが子プロセスのプールを維持する」と同様の効果があります。処理タスクが一定数を超えた場合、親プロセスはプロセスに通知して、新しい子プロセスを破棄して開始することができます。コードロジックはおおよそ次のとおりですが、親プロセスのメモリ使用量が徐々に増加しているという問題が発生しました。これを swoole マスターはどのように解決できるでしょうか。親プロセスがこの同様の子プロセス プールを維持しているためでしょうか?教えてください
親プロセスのメモリがリークしました。これは、一部のグローバル変数配列がメモリをすぐに解放しないことが原因でした。コードを確認してください。