5

構成管理を行うデーモンプロセスがあります。他のすべてのプロセスは、機能するためにこのデーモンと対話する必要があります。しかし、大規模なアクションを実行すると、数時間後にデーモン プロセスが 2 ~ 3 時間応答しなくなります。そして2~3時間後、正常に動作しています。

Linux プロセス ハングの問題のデバッグ ユーティリティ?

Linux プロセスがハングするポイントを取得する方法は?

4

3 に答える 3

9
  • straceは、最後のシステムコールとその結果を表示できます
  • lsofは開いているファイルを表示できます
  • システムログは、進行状況を追跡するためにログメッセージが書き込まれるときに非常に効果的です。小さな領域で問題をボックス化できます。また、ログメッセージを他のシステムからの他のメッセージに関連付けます。これにより、興味深い結果が得られることがよくあります。
  • アプリがソケットを使用してワイヤーチャタリングを表示する場合はwireshark。
  • ps ax + topは、アプリがビジーループにあるかどうか、つまり、常に実行されているか、IOでスリープまたはブロックされているか、CPUを消費しているか、メモリを使用しているかを示します。

これらのそれぞれは、一緒に問題の全体像を構築する少しの情報を与えるかもしれません。

gdbを使用する場合、アプリがブロックされたときにコアダンプをトリガーすると便利な場合があります。次に、静的スナップショットがあります。これは、事後デバッグを使用して自由に分析できます。これらをスクリプトでトリガーすることができます。理論をテストするために使用できるスナップショットのセットをすばやく作成します。

于 2010-06-14T05:53:32.030 に答える
1

1 つのオプションは、実行中のプロセスにアタッチするためにコマンドを使用gdbして使用することです。attach問題の実行可能ファイルのシンボルを含むファイルをロードする必要があります (fileコマンドを使用) 。

于 2010-06-14T05:39:03.367 に答える
0

さまざまな方法があります。

  1. ステータス要求を処理するために、UNIX ドメイン ソケットをリッスンします。次に、外部アプリケーションは、アプリケーションがまだ正常かどうかを問い合わせることができます。一定のタイムアウト期間内に応答がない場合は、クエリされているアプリケーションがデッドロックしているか、停止していると見なすことができます。

  2. 事前に選択されたパスを持つファイルに定期的にアクセスします。外部アプリケーションはファイルのタイムスタンプを調べることができ、ファイルが古い場合は、アプリケーションが停止しているかデッドロックしていると見なすことができます。

  3. alarmsyscall を繰り返し使用して、シグナルでプロセスを終了させることができます (それに応じて sigaction を使用してください)。呼び出し続ける限りalarm(つまり、プログラムが実行されている限り)、実行され続けます。そうしないと、信号が発火します。

この回答で説明されているように、プロセスが終了するforkと、プロセスをシームレスに再起動できます。OS がメモリ ページを共有するため、大きなリソースを消費しません。waitpid

于 2013-11-09T09:09:05.277 に答える