処理のためにメモリに保存したい大量のデータのダンプを扱うこともあります。プログラムが生成するメモリ量を誤って計算したり、デバッガがメモリ使用量に使用可能なメモリを超える係数を掛けたりすることがあります。
メモリを大量に消費するプロセスを開始するたびに、これは正常なオペレーティングシステムに期待されます。すべての空きメモリを消費し、他の非必須プロセスに必要のないメモリを適切に放棄するように依頼します。スワップに書き込みます。
Ubuntuが私にできることは次のとおりです。すべてのメモリを消費し、オペレーティングシステムにすべての重要なサービス(gnomeセッション、端末、キーボード)を交換するように依頼し、フリーズして電源プラグを抜くのを待ちます。
2つの質問:
私はまだ問題の解決策がありませんが、他の人にとって興味深いかもしれない2つの回避策を提供できます:
1) earlyoom
これは、メモリ使用量を監視し、特定のしきい値に達すると最もメモリを消費するプロセスを強制終了するサービスです(LinuxのOOMキラーに関する this および this の質問も参照してください)カーネル)
メモリを小さな塊で無制限に要求するデモプロセスでテストしました。最初の印象は次のとおりです。不正なプロセスを開始すると、すべてのRAMがすぐに消費されます。その後、スワッピングが開始され、システムが応答しなくなります。数秒後、システムはオンラインに戻ります。 earlyoomのログは、メモリとスワップの両方の使用率が90%に達した後、メモリイーティングプロセスを停止したことを示しています。
スワップが開始され、プロセスが強制終了された後、他のプロセスの一部は通常、要求されるまでスワップのままになりますが、それは開始です。
2)スワップを無効にします
これは 物議を醸すトピック であることは知っていますが、デスクトップシステム、特にプロセスがメモリをすべて食い尽くそうとすることが時々発生する可能性のある開発マシンの目的には、意味がありません:なしスワップ、OOMキラーは意図したとおりに動作します。メモリが不足すると、 killするのに最適なプロセス が検出され、削除されます。遅延も遅延もありません。
Sudo swapoff -a
または 変更を永続的にする を使用すると、現在のセッションのスワップを無効にできます。
もちろん、問題の適切な解決策は、メインメモリが使い果たされてもシステムが応答し続け、明日がないようにメモリのスワップを開始することですが、それはすぐには起こらないようです。
同様の問題を解決しました。私の経験があなたに適しているかどうかはわかりません...
最近、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 を参照して、詳細な情報を入手してください。
Ubuntu 16.04にはカーネルバージョン4.4が付属しています。カーネルバージョン4.6では、OOMキラー(Out of Memory Task Killer)があなたのような苦情に対処するために大幅にオーバーホールしました。カーネルバージョン4.6は廃止され、現在のUbuntuカーネルバージョン4.7.2はWebサイトにあります。 oom_reaperモジュールのアップグレード以外にも多くの問題を修正します。
先週RAM + SWAPをいっぱいにするテストを行いましたが、入力は安定していました。また、最小の遅延だけでアクティブなウィンドウを切り替えることができました。 「alt」+「print screen」などの新しいプロセスを呼び出すことはできませんでしたが、正常なシャットダウンを呼び出すことはできました。
次の2つのいずれかを試してください。
1)swappiness設定をデフォルト設定の60から10に変更しますie:add vm.swappiness = 1 to /etc/sysctl.conf(端末でSudo gedit /etc/sysctl.conf
と入力)、システムを再起動します。詳細については、swappinessを検索してください。
2)swappinessが役に立たない場合...したくない場合でも... swapfileのサイズを1.5x16Gに増やし、それが役立つかどうかを確認します。
投稿してください。乾杯、アル