ホームページ  >  記事  >  データベース  >  Linux で Redis データベースの overcommit_memory エラーを解決する方法

Linux で Redis データベースの overcommit_memory エラーを解決する方法

WBOY
WBOY転載
2023-05-27 20:55:532694ブラウズ

Background

会社の Redis がデータベースのバックグラウンド保存に失敗することがあります。次のアラームがログで見つかります。これが原因であると考えられます:

[13223] 17 Mar 13:18 :02.207 # 警告 overcommit_memory は 0 に設定されています! メモリ不足状態ではバックグラウンド保存が失敗する可能性があります。この問題を解決するには、「vm.overcommit_memory = 1」を /etc/sysctl.conf に追加してから再起動するか、コマンド「sysctl vm.overcommit_memory」を実行してください。 =1 ' を実行すると有効になります。

したがって、検索を通じて、何人かの人々が私と同じ問題に遭遇しており、それが原因であることは基本的に確実です。

カーネル パラメーター overcommit_memory

これは メモリ割り当て戦略です

オプションの値: 0、1、2。

  • 0 は、アプリケーション プロセスが使用できる十分なメモリがあるかどうかをカーネルがチェックすることを意味します。十分なメモリがある場合はメモリ アプリケーションが許可され、そうでない場合はメモリ アプリケーションが許可されます。失敗し、アプリケーション プロセスにエラーが返されます。

  • 1 は、現在のメモリの状態に関係なく、カーネルがすべての物理メモリの割り当てを許可していることを示します。

  • 2、カーネルがすべての物理メモリとスワップ領域の合計を超えるメモリの割り当てを許可していることを示します

オーバーコミットと OOM とは

Linux は、より多くのより大きなプログラムを実行できるように、ほとんどのメモリ要求に「はい」と応答します。メモリを申請しても、すぐにメモリが使用されるわけではないからです。この手法はオーバーコミットと呼ばれます。 Linux がメモリ不足を検出すると、OOM キラーの動作をトリガーします (OOM はメモリ不足の略です)。メモリを解放するために、カーネル スレッドではなく、一部のユーザー モード プロセスを強制終了することが優先されます。

oom-killer が発生した場合、Linux はどのプロセスを強制終了することを選択しますか?プロセスを選択する関数は oom_badness 関数 (mm/oom_kill.c 内) で、各プロセスのポイント数 (0 ~ 1000) を計算します。スコアが高いほど、プロセスが強制終了される可能性が高くなります。プロセスあたりのポイント数は oom_score_adj に関連しており、oom_score_adj を設定できます (-1000 が最低、1000 が最高)。

解決策:

これは非常に簡単です。プロンプトに従うだけです (vm.overcommit_memory を 1 に設定します):

カーネル パラメーターを変更するには 3 つの方法がありますが、必ず変更する必要があります。 Root 権限がある:

  • # (1) /etc/sysctl.conf を編集し、vm.overcommit_memory=1 を変更してから、sysctl -p を実行して構成ファイルを有効にします

  • (2)sysctl vm.overcommit_memory=1

  • (3)echo 1 > /proc/sys/vm/overcommit_memory

以上がLinux で Redis データベースの overcommit_memory エラーを解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。