システムメモリが少なくてもUbuntuがフリーズするのを防ぎます


24

処理のためにメモリに保存したい大量のデータのダンプを扱うこともあります。プログラムが生成するメモリ量を誤って計算したり、デバッガがメモリ使用量に使用可能なメモリを超える係数を掛けたりすることがあります。

メモリを大量に消費するプロセスを開始するたびに、これは正常なオペレーティングシステムに期待するものです。すべての空きメモリを消費し、他の重要でないプロセスに必要のないメモリを適切に放棄してみてください。スワップに書き込みます。

Ubuntuが私にできることは次のとおりです。すべてのメモリを消費し、オペレーティングシステムにすべての重要なサービス(gnomeセッション、端末、キーボード)を交換し、フリーズして電源プラグを抜くのを待ちます。

2つの質問:

  1. オペレーティングシステムは、ユーザー入力のリッスンを停止しても問題ないほど重要だと想定できるのでしょうか。
  2. 何らかの愚かなプロセスがシステムが提供するよりも多くのリソースを消費しようとしても、Ubuntuに重要なサービスを決して交換せず、常にユーザー入力に反応するように指示するにはどうすればよいですか。

どのくらいのRAMをインストールしましたか?スワップのサイズはswaponどれですか(ターミナルで入力して確認してください)?乾杯、アル
ヘイネマ

3
16GB RAMおよび16GBスワップ。しかし、それはここでのポイントではありません。この問題は、メモリを追加しても解決できません。
クラマン

1
2つのことのいずれかを試してください。1)swappiness設定を10に変更します(例:vm.swappiness = 10/etc/sysctl.conf)。詳細については、swappinessを検索してください。2)swappinessが役に立たない場合...したくない場合でも... swapfileのサイズを1.5x16Gに増やし、それが役立つかどうかを確認します。投稿してください。乾杯、アル
ヘイネマ

1
@Klamannスワップを追加しても問題は解決しないことに同意します。壊れたプログラムがすべてのRAM + SWAPを消費すると、余分なSWAPを追加しても避けられないものが遅れます。
WinEunuuchs2Unix

1
@ WinEunuuchs2Unixは、私が言ったように、sysctl.conf vm.swappiness=10追加する必要があります。経験豊富な人は、sysctlコマンドをオンザフライで使用して、sysctl.confファイルを編集せずにvm.swappiness = 10を設定することもできます。乾杯、アルps:OPが応答するのを待っています。
ヘイネマ

回答:


5

私はまだ問題の解決策を持っていませんが、他の人にとって興味深いかもしれない2つの回避策を提供できます:

1)Earlyoom

これは、メモリ使用量を監視し、特定のしきい値に達したときに最もメモリを消費するプロセスを強制終了するサービスです(LinuxカーネルのOOMキラーに関するこれこの質問も参照してください)

メモリを小さな塊で無制限に要求するデモプロセスでテストしました。最初の印象は次のとおりです。不正なプロセスを開始すると、すべてのRAMがすぐに消費されます。その後、スワッピングが開始され、システムが応答しなくなります。数秒後、システムはオンラインに戻ります。earlyoomのログは、メモリとスワップの両方の使用率が90%に達した後、メモリイーティングプロセスを強制終了したことを示しています。

スワップが開始され、プロセスが強制終了された後、他のプロセスの一部は通常、要求されるまでスワップのままになりますが、それは開始です。

2)スワップを無効にします

これは議論の余地のあるトピックであることは知っていますが、デスクトップシステム、特にプロセスがメモリをすべて食い尽くそうとすることが時々発生する可能性のある開発マシンのために、それは理にかなっています:スワップがなければ、OOMキラーはただ動作します意図した通り。メモリが不足すると、強制終了するのに最適なプロセスが検出され、削除されます。遅延も遅延もありません。

現在のセッションのスワップを無効にするsudo swapoff -a、変更を永続的にすることができます。


もちろん、問題の適切な解決策は、メインメモリが枯渇してもシステムが応答し続け、明日がないようにメモリのスワップを開始することですが、それはすぐには発生しないようです。


1
スワップを無効にし、システムが低メモリ(<100MB)からフリーズに直接移行します。OOMキラーが実際に有効になっているかどうかを確認するにはどうすればよいですか?
マイケル

0

次の2つのいずれかを試してください。

1)swappiness設定をデフォルト設定の60から10に変更します。つまり、/ etc / sysctl.confにvm.swappiness = 10を追加し(ターミナルで、タイプしますsudo gedit /etc/sysctl.conf)、システムを再起動します。詳細については、swappinessを検索してください。

2)swappinessが役に立たない場合...したくない場合でも...スワップファイルのサイズを1.5x16Gに増やし、それが役立つかどうかを確認します。

投稿してください。乾杯、アル


OSを数秒ごとに再起動するのは本当に面倒なので、いくつかのテストを実行するようにVMをセットアップしました。Ubuntu 16.04、2GB RAM、3GBスワップ、20GBディスク。次に、大量のメモリを消費するスクリプトを実行しました。デフォルトのswappiness(60)で、システムがフリーズし、数分後に、復旧までの時間が許容できないためシャットダウンしました。swappiness 10では、システムが数秒間フリーズし、入力を受け入れますが、プロセスを開始できません(例:topメモリホッグを強制終了するなど)。数分後、プロセスは強制終了されます。完璧ではありませんが、近づいています。
クラマン

投稿してください。VMは実際に動作するOSを真にエミュレートしませんが、設定で遊ぶことができます。swappinessがあなたの問題に役立つかどうか興味があります。乾杯、アル
ヘイネマ

あぁ、いいね。進捗!swappinessについて少し読んでください。値を少し試してみてください。乾杯、アル
ヘイネマ

システムがフリーズしたときに使用されたスワップはどれくらいですか?乾杯、アル
ヘイネマ

2
なぜ、その点は何ですか?メモリを増やしてもシステムがスタックするのを防ぐことはできません。
クラマン

0

同様の問題を解決しました。私の経験があなたに適しているかどうかはわかりません...

最近、USBから起動するループバックLVMデバイスにLinuxをインストールする方法に関するガイドを公開しました(したがって、内部ディスクにgrubをインストールする必要はなく、元のままにしておきます)。ここでガイドは次のとおりです。https://github.com/DareDevil73/linux-on-loopback-usb

その後、高メモリ負荷でフリーズの問題に陥り、異常なスワップスペース使用量(すべてのRAMが消費され、スワップ使用量がゼロに近い)を観察しました。明らかに、LVMスワップパーティションはマウントされ、正常に動作していましたが、カーネルが期待どおりに使用しなかった理由はわかりません。

別の解決策を試しました。スワップループバックファイル(LVMではない)を作成しましたが、フリーズがなくなりました。これで、スワップファイルがそのまま使用され、OSがフリーズすることはありません!

見てください より詳細な情報を取得するには https://github.com/DareDevil73/linux-on-loopback-usb#known-issuesご覧


リンクを回答に展開してください。
Konrad Gajewski
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.