2

Linux のバックグラウンドで数日間実行されているアプリ (C++ で作成) があり、このアプリに信号を送信して (を使用kill -MYSIG)、アプリに定義された操作を実行するように要求すると、システムが応答しなくなる可能性があります。正常。正常に応答しないということは、この信号をアプリに送信した後、システム シェル ( ) が Linux コマンド ( ...) にbash応答できないことを意味します。これは、システムがダウンしているときと同じです。ls,ps,top数分待つと、システムが再び戻ってきます。

システムがダウンしたり、正常に応答しなくなったりする原因は何でしょうか。アプリの CPU やメモリの使用量が多すぎますか? では、システムはどのように戻ってくるのでしょうか?

4

2 に答える 2

1

Linuxスケジューラには、プロセスがシグナルに応答しない状態があります(TASK_UNINTERRUPTIBLE状態)。そのようなプロセスに送信されたシグナルは、プロセスが中断不可能な状態を離れるまでキューに入れられたままになります。これが、シグナルを強制終了/送信できない理由だと思いますこの場合は、アプリの状態が D であるかどうかを使用ps -Aして確認します。その場合、アプリ/プロセスは TASK_UNINTERRUPTIBLE にあります。

可能性 RAM が不足しているため、システムが応答しません。を使用して、アプリが消費する RAM/リソースの量を確認します。列topを参照してください%CPU%MEMまた、システム モニター ツール (例: Gkrell) を使用して、システム全体のリソースの使用状況を確認することもできます。アプリの優先度を下げて、リソースの消費を減らすことができます。

アプリに読み取り/書き込み/選択ソケット呼び出しがある場合は、strace/coredump を使用して、アプリがほとんどの時間を費やしている場所を確認する必要があります。これは通常、選択がタイトなループにある場合、またはアプリがブロッキング システム コールを実行した場合に発生します。ソケットでの読み取り/書き込みのように

于 2013-01-31T09:22:39.080 に答える
0

アプリの優先度がすでに最低で、それでも問題が発生しない限り、アプリの優先度を低くしてみてください。

Linux で優先度を下げる

于 2013-01-31T06:12:09.223 に答える