web-dev-qa-db-ja.com

Cent OS:メモリのオーバーコミットをオフにしたり減らしたりするにはどうすればよいですか?それを行うのは安全ですか?

「マイ」サーバーは、メモリとスワップ領域の両方が不足するため、時々ストールします。 (pingに応答し続けますが、それ以外はsshでもありません)。

私が理解している限り、linuxは銀行がお金で行うのと同じであるメモリのオーバーコミットメントを行うと言われています:ほとんどのプロセスが実際に要求するすべてのメモリを使用しないと仮定すると、Linuxはプロセスに実際に利用可能なメモリよりも多くのメモリを許可します少なくとも同時にすべてではない。

これが実際にシステムが時々ハングする原因であると想定してください。これが原因であるかどうかについては、ここでは説明しません( を参照してください)サーバー上のすべてのサービスが停止し、それでも応答します。 pingするか?そしてどのように把握するか )。

そう、

  1. centOSでメモリのオーバーコミットを大幅に無効化または削減するにはどうすればよいですか?私はvm.overcommit_memory(値0、1、または2)とvm.overcommit_ratiomと呼ばれる2つの設定があることを読みましたが、それらをどこで見つけて変更する必要があるのか​​わかりません(うまくいけばいくつかの構成ファイル)。 、変更を有効にするためにサーバーを再起動する必要があるかどうか。

  2. 安全ですか?どのような副作用が予想されますか? overcommit_memoryを探していると、サーバーがもう起動できないと言っているような怖いものを見つけました...

Phpによって行われるクエリが原因でメモリ使用量が突然増加する原因はmysqlであるため、httpリクエストを処理している間に呼び出され、一部のphpスクリプトが完了せず、場合によっては500応答を返すことを期待します。サーバーがビジー状態であり、これは私が取るリスクです(サーバー全体にアクセスできなくなり、ハードリブートしなければならないことは確かに良いです)。

または、間違った設定を選択すると、サーバーが本当に再起動できなくなりますか?

20
matteo

メモリのオーバーコミットはvm.overcommit_memory=2で無効にできます

0はデフォルトのモードであり、カーネルは、行われている割り当て要求と比較して空きメモリを計算することにより、ヒューリスティックに割り当てを決定します。また、1に設定するとウィザードモードが有効になり、カーネルは常に、割り当てに十分な空きメモリがあることを通知します。 2に設定すると、プロセスはRAM)の構成可能な量(overcommit_ratio)までしか割り当てることができず、その量を超えると割り当てエラーまたはOOMメッセージの取得を開始します。

そうしても安全ですか?ワークロードとハードウェアの容量を100%確信していない限り、メモリのオーバーコミットを無効にすることが実際に役立つ適切な使用例はありません。興味がある場合は、kernel-docsパッケージをインストールし、/Documentation/sysctl/vm.txtにアクセスして詳細を確認するか、または online を参照してください。

vm.overcommit_memory=2を設定すると、物理的なパーセンテージまでのオーバーコミットRAM vm.overcommit_ratioで構成されます(デフォルトは50%))。

echo 0/1/2 > /proc/sys/vm/overcommit_memory 

これは再起動後は存続しません。永続化するために、これを/etc/sysctl.confファイルに入れます。

vm.overcommit_memory=X

sysctl -pを実行します。再起動する必要はありません。

30

完全に修飾されていないステートメント:メモリのオーバーコミットを無効にする方が、有効にするよりも「安全」です。

$ customerはそれを数百のWebサーバーに設定しており、安定性の問題を大いに助けました。無効化されていない場合、Nagiosのチェックで大声で発砲することもできます。

一方、小さなRAMをオーバーコミットしたいが実際には使用しない場合は、プロセスがメモリ不足になるのを "安全"とは見なさないかもしれません。 (つまり、SAPは非常に良い例です)

それで、あなたはそれがあなたのために物事を改善するかどうか見るために戻っています。あなたはすでに関連する問題を取り除くためにそれを調査しているので-私はそれがあなたのために役立つかもしれないと思います。

(私は不機嫌そうな人からの反対投票の危険を冒すことを知っています)

6
Florian Heigl

オーバーコミットを無効にする方が、状況によっては有効にするよりも安全であることに同意します。サーバーが少数の大きなメモリジョブ(私の場合は回路シミュレーションなど)のみを実行する場合は、OOMイベントを待つよりもアプリケーションのメモリ要求を事前に拒否する方がはるかに安全です(これは間もなく実行されます)かなり頻繁にサーバーが表示されますOOMキラーがその仕事をした後に問題を抱えています。

3
user185690