カーネルがリソース不足のプロセスを停止しないのはなぜですか?

カーネルがリソース不足のプロセスを停止しないのはなぜですか?

私はLinuxボックス(Ubuntu)を実行していますが、数ヶ月に1回停止して選択肢がなく(SysRq-Fや他のキーボードショートカットが機能しない)、再起動する必要があるため、すべてのデータが失われます。

なぜカーネルがメモリやCPUを大量に消費するプロセスを終了しないのか疑問に思います。

システムを停止/応答しない状態にしておくのはなぜですか?

答え1

システムが「停止」したときにSysRqキーの組み合わせが機能せず、システムが正常に実行されたときに動作することを確認した場合、問題はリソースの枯渇よりも深刻です。カーネルのバグ、または断続的なハードウェアの問題かもしれません。より多くの情報が必要です。

システムがサーバークラスのハードウェアの場合は、システムコンソールにリモートでアクセスしたり、ハードウェアの問題に関する警告を受けたり、システムの電源を入れたり切ったりするために使用できる別々の管理プロセッサがあります。より安価なサーバーシステムでも、ハードウェアエラーログの種類がある可能性があります。ipmitoolアクセスするには、ベンダー固有のツールが必要な場合と必要ない場合がありますが、より多くの情報を入手できます。

答え2

サーバーが何をしているのか、サーバーにどのリソースがあるのか​​を理解するのは興味深いでしょう。サーバーが応答しない状態、またはプロセスが頻繁に監視および再起動される問題を軽減するには、一部の構成を調整する必要があるか、追加のリソースが必要になる場合があります。一定期間が経過すると、これが最初のアプローチになることはあなたの投稿からは明らかではありません。

しかし、応答しないサーバーを回復するための対策として、いわゆるウォッチドッグがあります。

マシンが物理的な場合は、Linuxカーネルがサポートするハードウェアウォッチドッグを購入することもできます。

一部のIoTデバイスには、SoCに監視機能が組み込まれています。

物理サーバーまたは仮想マシンの場合は、ソフトウェア監視デバイス(生徒サーバー、計算を実行したり、コイン採掘から隠すマシン(自分自身ではありません!))を設定できます(過去に問題のあるサーバーに対してこれを行いました) 。これらのサービスを応答しないままにしないでください。再起動してください。

ソフトウェアウォッチドッグは、基本的にサーバーの特定のリソースとサーバーと通信するアプリケーションを監視する定期的な割り込みです。構成された検証が失敗した場合、またはアプリケーションがデータ転送を停止すると、サーバーは強制的に再起動されます。

バラよりLinuxカーネル/ソフトドックドライバ

ウォッチドッグタイマーとは何ですか?

ウォッチドッグタイマは、システム停止が検出された場合にシステムリセットをトリガするデバイスです。システムで実行されるプログラムは、「サービスパルス」を作成して監視タイマーを定期的にサービスする必要があります。ウォッチドッグが一定期間サービスされていない場合、ウォッチドッグはシステムが停止していると見なし、システムリセットをトリガします。

柔らかい犬とは何ですか?

一般に、監視タイマーは、マイクロコントローラ内の追加のカードまたはオンチップ周辺装置として実現される。ただし、ハードウェア監視デバイスがない場合、Linuxカーネルはカーネルタイマーを使用して実装されたソフトウェア監視デバイスを提供できます。

Linux監視メカニズム

Linuxでは、ウォッチドッグドライバはユーザースペースに文字ドライバインタフェースを提供します。一部のデータがウォッチドッグドライバに書き込まれると、ウォッチドッグドライバはウォッチドッグハードウェアにサービスを提供します。ユーザ空間アプリケーションは、監視タイムアウト期間に基づいて監視ドライバにいくつかのデータを定期的に書き込みます。何らかの理由でユーザ空間アプリケーションが中断されると、監視デバイスはサービスされず、システムリセットがトリガされます。

通常、ウォッチドッグドライバで書かれたアプリケーションはウォッチドッグデーモンで、システムのプロセスだけでなくCPU使用率、メモリ使用率などの他のパラメータも監視します。

柔らかい犬が働く方法

ソフトドッグドライバがオンになると、ソフトドッグは指定されたタイマーマージンの後にカーネルタイマーが期限切れになるようにスケジュールします。ソフトドックドライバは、一部のデータがドライバに書き込まれるとタイマーを再スケジュールします。ユーザー空間監視デーモンはドライバに定期的に記録し、タイマーは継続的に再予約されるため、タイマーコールバックは呼び出されません。監視デーモンがドライバへの書き込みを停止すると、タイマーが期限切れになり、コールバックが呼び出されます。タイマーコールバックでシステムが再起動されます。

また、見ることができますDebian - パッケージ: watchdog - システムヘルスチェッカーとソフトウェア/ハードウェア監視ハンドラ

watchdogプログラムは10秒ごとに/ dev / watchdogに書き込みます。デバイスの電源が入っているが1分以内に記録されない場合、マシンは再起動します。カーネルが「ソフトウェアウォッチドッグ」(Debian カーネルの標準)をサポートするように構築されている場合、またはマシンにハードウェアウォッチドッグが装備されている場合(この場合、このパッケージを使用してタイマーをリセットして「ペット」することもできます)と同じです。利用可能)。

カーネルソフトウェアウォッチドッグの再起動機能は、マシンの状態と割り込みによって異なります。

監視ツール自体はさまざまなヘルスチェックを実行し、システムが異常になった場合に適切なアクションを実行します。

また、システムが正常に動作しているかどうかに応じてログを読み取れるように、リモート syslog サーバーにログを送信するように syslog デーモンを構成することをお勧めします。

関連情報