nginx reload - 効果的なメモリリーク

nginx reload - 効果的なメモリリーク

を実行すると、nginx -s reloadnginxはソフトリロード(古いプロセスの既存の接続を徐々に閉じ、新しいプロセスで新しい要求を処理する)を意味します。

これを行うには、(おそらく)以前のプロセスに対するアクティブな要求は完了していないようです。暴走状況が発生し、reload複数回試行すると、最終的にサーバーのメモリが不足します。

nginxが提供する接続をダンプする方法(おそらくC ++モジュール?)はありますか?特定Linux PID?
nginxがそれ自体で終了することを許可しないものが何であるかを正確に理解できない場合は、この問題を解決する方法がわかりません。
(分割して征服しようとサイトをただ閉じることはできず、200を超えるサイトがあるライブクライアントサーバーです)

ここに画像の説明を入力してください。

nginx バージョン: nginx/1.24.0

ベストアンサー1

nginxはワーカーをホストごとに分離しないと思います。ワーカープロセスが接続、TLS、HTTP / 2ハンドシェイクを処理するまで(要求がすでにワーカープロセスに「属している」)、どのホストを提供するかを知る方法はありません。 。

これらのプロセス()にgdbを接続すると、gdb -p {pid}どのスレッドがあり、どのスレッドが使用を待っているかを確認できますinfo threads。スレッドが一部のIOが完了するのを待っているのでしょうか?一部はパイプから読み、一部はIPCですか?スレッド(thread {number})を選択して逆追跡(bt)を実行します。ローカル変数を印刷print {variable name}し()使用する呼び出しスタックのレベルを選択できます(frame {stack frame nr.})。

おすすめ記事