Linuxディスクバッファーの最小サイズを設定できますか?


8

私は2GBのRAM、スワップなしのかなり古いLinuxマシンを使用していますが、それは非常にうまく機能しており、システムは未使用のメモリをすべてキャッシュに使用して非常に効果的です。

ただし、メモリに負荷がかかりそうになると(たとえば、割り当てられた1950MBを超えると)、クロール速度が低下します。ディスクバッファーが残っていないためだと思います。OOMキラーがすぐに有効になることはわかっていますが、通常は有効になりません。ロードがシュートを30から40までロードするほど遅くなり、プロセスが進まないため(メモリが割り当てられません)、再起動する必要があります。

たとえばコンソールに移動して(Alt-F1を介してログインし、「killall badprocess」を実行するなどして)1つのプロセスを強制終了してマシンに応答させると、通常は機能しますが、待機する必要があります。ユーザー/パスワードを入力してからプロンプトが表示されるまでに約10分-ディスクアクティビティがある間はすべて

繰り返しになりますが、スワップは行われないため、スワップは行われません。バッファが残っていないため、スラッシングが発生しています。

私はディスクバッファー専用に100 MBほどを占有しているため、OOMキラーを早期にトリガーします(結局、プログラム用のメモリが少なくなります)一方で、マシンは常に応答性が高くなります。

それを行う方法はありますか?このようなことをする/ proc / kernelまたは/ sys / vmエントリを見つけることができませんでした。


私も同じ問題を抱えていますが、残念ながら、この日付に対する答えはどれもこの問題に役立ちません。
KrišjānisNesenbergs

回答:


1

見ていに/ proc / sys / vm / min_free_kbytesを。oom-killerをトリガーするのは、空きkbytesの制限です。また、{propablyあなたが殺されているかを知るために、キーワードOOMキラーのためのログをチェックするとよいでしょうSSHを殺すためにしたくないあなたはそれがすると良いでしょう、をreniceそれを}


ありがとう。私はそれを拡大しましたが、それは問題を解決するようには見えません-物理メモリが枯渇に近づくと、バッファメモリがなくなり、マシンはクロールするまで遅くなりました。

ここでも助けはありません、システムはまだ完全に応答しなくなります。
Tronic

これは実際に私に役立ちました。2GBのRAMもあり、これをほぼ
500 MBに

現在、自分のワークステーションでこの設定をテストしています。私は8 GBのRAMを持っていますが、ほとんどの場合5つを超えて使用しません...何らかの理由で約4 GBのRAMを必要とするWindows VMを起動する必要がある場合を除きます。ハードドライブが機械的であるため、ホストOSにZRAMを設定しましたが、ファイルシステムバッファーとキャッシュのRAMスペースが少ないため、RAMがほぼいっぱいになると、それでもかなり遅くなります。私はvm.min_free_kbytesを使用して、常に少なくとも2 GBの空き領域があり、残りが圧縮されたRAMにページングされるようにしました(通常のスワップ領域よりも高速です)。結果を後で掲載します。
RAKK 2017年

1

oom-killerがメモリを解放するのを待つのは、ガソリンタンクをいっぱいにするときが来たら、エンジンが停止するのを待つようなものです。oom-killerは、リソース不足のマシンに対する最後の手段と絶望のヘビーハンドツールです。アプリケーション、到達可能性、信頼性などにどのように影響するかを考慮せずに、次に処理するプログラムを強制終了します。oom-killerが呼び出されると、サーバーは息を切らしていて、危機的な状態にあります。

代わりに、アプリケーション環境内のメモリ使用量を管理する際に積極的なアプローチをとる方がはるかに優れています。/ proc / meminfoのトラブルを監視し、適切なアクションを実行して、深刻な状況が醜くなる前にワークロードを抑制できます。


私が発見した状況があるまさに私のサーバーは、息をして危険な状態にあえぎされた時刻。完全に応答するマシンからCtrl-Alt-F1(Xからコンソールに切り替える)への応答に1分かかるまで、20秒もかかりません。また、パスワードを要求することなく1分後にタイムアウトになるため、ログインは不可能です。これは、多くのプロセスが実行されているマシンです。それぞれが独立して問題ではありません。また、これは厳密にメモリの問題です。CPUに問題はなく、ディスクバッファが約50MB残っている限りディスクに問題はありません。

ulimitを使用し、アプリケーションがしきい値を超えてアクションを実行するとどうなりますか?
Nikolaidis Fotis

問題は、すべてのアプリケーションの合計です。20個ほどが実行されており、それぞれ20〜100 MBが割り当てられています。数週間、場合によっては数か月間は問題なく動作しますが、それらすべてが同時に100MB以下を割り当てたい場合、すべてがクラッシュして書き込みます。私は自分でマシンを再起動する必要があるよりも、oom_killerにそのうちの1つを殺してもらいたいです。とにかく、私は今のところスワップをオンにしています。ほとんどのアプリは常にすべてのメモリを使用するわけではないため、物理メモリの最後までストレスがかかっても、マシンは安定したままです。ただし、可能であれば、このマシンではスワップをまったく行わないほうがよいでしょう。

1
適切なメモリ使用制限を設定しないことの組み合わせである実際の問題は解決しません(ulimitはあまり有用ではありません)、メモリ割り当てでアプリケーションが簡単に混乱し、OOMキラーが十分に早く起動できず、大規模なディスクの破壊と応答性が低下します。それによって引き起こされます。私の雇用者の時間の30分を無駄にしたのは、コードをコンパイルしているときに、開発マシンがディスクをゴミ箱に入れて30分無駄にするからです。それで終わります。
Tronic

oom_adj正しく設定すれば、デスクトップシステムをAndroidのように機能させることができ、システムは実質的に常にOOMキラーに対して実行されます(技術的には「ローメモリキラー」があり、を介して調整されます/sys/module/lowmemorykiller)。ロジックは、重要でないバックグラウンドプロセスをOOMキラーの潜在的な犠牲者として継続的にマークし、強制終了されたプロセスを探して、システムの過負荷を避けるために必要な強制終了プログラムをゆっくり再起動することです。他のプロセスを再起動し続けるプロセスがOOMキラーの制限から外れていることを確認してください。
ミッコランタライネン2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.