架构师_程序员_码农网

ユーザー名 パスワード取得
会員登録

QQ登录

ワンステップ

検索
閲覧数:26453|返信数: 1
打印 上一主题 下一主题

[プロファイル]Redis MISCONF RedisがRDBのスナップショットを保存するように設定されている

[コピーリンク]
StackExchange.Redisでredisキャッシュを操作すると、以下のエラーが発生します:

StackExchange.Redis.RedisServerException: MISCONF Redis は RDB スナップショットを保存するように設定されていますが、現在ディスク上に永続化できません。 データセットを変更する可能性のあるコマンドは無効になっています。エラーの詳細についてはRedisのログを確認してください。

一時的な解決策としては、redis.windows.confファイルを変更します。この場合、redisサービスを以下の設定で再起動する必要があります:
redisサービスを再起動したくない場合は、redis-cliコマンドを使って以下のように設定できます:



説明は以下の通り:
# デフォルトでは、RDBスナップショットが有効になっている場合、Redisは書き込み # を受け付けなくなります。
(少なくとも1つのセーブポイント)で、最新のバックグラウンド保存が失敗 # した場合、Redisは書き込みを受け付けなくなります。
# これにより, ユーザはデータが適切にディスクに保存されていないことを # (厳しい方法で)認識することになります.
そうでなければ, 誰もそれに気づかず, # 災害が起きてしまう可能性があります.
# 災難が起こるだろう。
# バックグラウンドで保存処理が開始される場合
# バックグラウンドでの保存処理が再開された場合.
# 自動的に書き込みが許可されます。
#
# しかし、Redisサーバーの適切な監視をセットアップしているのであれば # 永続化もセットアップしておくと良いでしょう。
# もしRedisサーバーの適切な監視と永続化をセットアップしているのであれば、 # ディスクに問題が発生してもRedisが通常通り動作し続けるように、 # この機能を無効にしたいかもしれません。
# ディスクやパーミッションなどに # 問題が発生しても、Redisは通常通り動作し続ける。
# パーミッションなど。
簡単に言うと、ハードドライブにデータを保存する際、Redisはメインプロセスが誤死しないようにメインプロセスのコピーをForkし、Forkプロセス内でハードドライブへのデータ保存操作を完了する必要がある。 メインプロセスが4GBのメモリーを使用し、Forkサブプロセスがさらに4GBを必要とする場合、メモリーが足りず、Forkは失敗し、ハードドライブへのデータ保存も失敗する。

redisのログを見るには、redis.windows.confを以下のように設定する必要がある:

また、'stdout'を使用することで、強制的に # Redisを標準出力にログ出力させることができます。
# ログファイル名を指定する.
ログファイル "E:/Redis-x64-3.2.100/redis.txt"

ログの例外は以下の通りです:

[8984] 14 May 14:05:09.060 * pid 8672によりバックグラウンド保存が開始されました。
[8672] 14 May 14:05:09.169 #.
Windows版のRedisは、システムのページングファイルからヒープメモリを確保します。
この時点では、Redisディレクトリに利用可能な連続した空き領域が不足しています。
システム・ページング・ファイルのサイズを増やすことができます。
現時点では、システム・ページング・ファイルの空き領域が不足しています。
システム・ページング・ファイルのサイズを増やすことができます。

Redis を続行できません。
[8984] 14 May 14:05:09.278 # フォーク操作に失敗しました



解析の結果、最大ヒープサイズ「maxheap」の設定に問題があり、使用可能なメモリが不足していることが判明しました。

解決方法

Redisの設定ファイル "redis.windows.conf "を開き、以下のコードセクションを見つけます:


# Redisのヒープはmaxmemoryフラグで指定された値よりも大きくなければならない。
ヒープアロケータには独自のメモリ要件があり、ヒープの断片化が # 発生するためです。
maxmemoryフラグのみが指定されている場合、maxheapは # maxmemoryフラグで指定された値よりも大きくなければなりません。
maxmemory # フラグのみが指定された場合, maxheapは1.5*maxmemoryに設定されます.
maxmemory とともに # 指定された場合, maxheapフラグは自動的に1.5*maxmemoryに # 設定されます.
# 1.5*maxmemoryより小さい場合は自動的に増加します.
#
# maxheap <バイト

この設定を増やすと、redisサービスが起動できなくなります!!! # # # maxheap <bytes
デフォルト値は: maxheap 1024000000≈976.56M

confファイルでこのコメントを探したわけではなく、以下のコメントを見つけました:
# 指定されたバイト数以上のメモリを使用しない。
# 指定されたバイト数以上のメモリを使用しないこと # メモリの上限に達すると、Redisはキーの削除を試みます。
# メモリ制限に達した場合、Redisは選択された消去ポリシーに従ってキーの # 削除を試みます(maxmemory-policyを参照)。
# Redisがキーを削除できない場合
# Redisがポリシーに従ってキーを削除できない場合、またはポリシーが
# ポリシーに従ってRedisがキーを削除できない場合、またはポリシーが # 'noeviction'に設定されている場合、Redisは以下のようなコマンドに # エラーを返すようになります。
# SETやLPUSHなどのような、より多くのメモリを消費するようなコマンド # に対してはエラーで応答し始めます。
# GETのような読み取りのみのコマンドには返事を返し続ける。
#
このオプションは通常, RedisをLRUキャッシュとして利用する場合や, # インスタンスにハードなメモリ制限を設定する場合に有用です.
このオプションは通常、RedisをLRUキャッシュとして利用する場合や、 # インスタンスにハードなメモリ制限を設定する場合(「noeviction」ポリシーを利用 # する場合)に有用です。
このオプションは通常, RedisをLRUキャッシュとして利用する場合や, # インスタンスに(「noeviction」ポリシーを利用して)ハードなメモリ制限を # 設定する場合に有用です.
# 警告: maxmemoryがオンのインスタンスにスレーブがアタッチされている場合、 # 出力バッファのサイズが制限されます。
スレーブに供給するために必要な出力バッファのサイズは # 使用メモリカウントから差し引かれます。
スレーブに供給するために必要な出力バッファのサイズは, # 使用メモリカウントから差し引かれます.
ネットワークの問題や再同期が発生しても, # キーが退避されるループが発生することはありません.
スレーブの # バッファが、追い出されたキーのDELによっていっぱいになり、さらに # キーの削除が繰り返される。
その結果、スレーブの出力バッファがいっぱいになり、 # 退去されたキーのDELがさらなるキーの削除を誘発する。
#
# 要するに... もしスレーブが接続されているのであれば, # maxmemoryの上限を低く設定することをお勧めします.
# スレーブの出力バッファのためにシステム上のRAMに空きがあるように # maxmemoryに下限を設定することが推奨されます。
# (ただし、ポリシーが 'noeviction' の場合は不要です)。
警告: # maxmemoryを設定しない
# 警告: maxmemoryを設定しないと、Redisが # メモリ不足例外で終了してしまいます。
警告: maxmemoryを設定しないと, ヒープ限界に達した場合に # メモリ不足例外が発生してRedisが終了します.
# #
# 注意: Redisはヒープメモリの確保にシステムページングファイルを利用するため, # ヒープメモリの確保にシステムページングファイルが示すワーキングセットの # メモリ使用量が使用されます.
# Windowsのタスクマネージャや, # ProcessExplorerのような他のツールで表示されるワーキングセットの # メモリ使用量は.
# Windowsタスクマネージャや, ProcessExplorerなどのツールで # 示されるワーキングセットのメモリ使用量は, 常に正確であるとは限りません.
# 例えば, RDBやAOFファイルをバックグラウンドで保存した直後, # 作業セットのメモリ使用量が大幅に減少することがあります.
redis-serverが使用するメモリの正確な量を確認するために, # # 作業セットの値が大幅に低下することがあります.
# INFOクライアントコマンドを使用します.
# コマンドは, redisデータの保存に使用されるメモリのみを表示します.
# INFOクライアントコマンドでは報告されない # 余分なメモリの量.
INFOコマンドによって報告されなかったメモリの # 余分な量は、クライアントコマンドによって報告されたメモリの # ピークワーキングセットを差し引いて計算することができる。
# を差し引くことで計算できる。
# を差し引くことで計算することができる.
#
# maxmemory <バイト

警告: maxmemoryを設定しないと、Redisがヒープ制限に達した場合に メモリ不足例外で終了してしまいます。

注意:Redisはシステムのページングファイルを使ってヒープメモリを割り当てます

Windowsタスク・マネージャやProcessExplorerなどのツールで表示されるワーキング・セットのメモリ使用量は、必ずしも正確ではありません。簡単に言うと、タスク・マネージャーで表示されるメモリ使用量は正確ではありません

infoコマンドを使用して、以下を照会してください:

# メモリ
used_memory:2011338768
used_memory_human:1.87G
used_memory_rss:2011279992
メモリ使用量:1.87G
used_memory_peak:2011338768
使用メモリーピーク:1.87G
合計システムメモリー:0
システム・メモリ合計:0B
used_memory_lua:37888
使用メモリー:37.00K
使用メモリー:37888使用メモリー:37.00K
使用メモリー:37888 使用メモリー:37.00K 最大メモリー:0
最大メモリポリシー:noeviction
メモリ断片化率:1.00
メモリアロケータ:jemalloc-3.6.0



設定は以下の通りです:

1073741824 バイト = 1G
これを設定すると、redis .net クライアントが新しいキャッシュを追加し、以下のエラーを報告する:

使用メモリ > 'maxmemory'の場合、OOMコマンドは許可されません。
# MAXMEMORY POLICY: maxmemory # に達したときにRedisが何を削除するかを選択する方法。
MAXMEMORY POLICY: maxmemory # に達した際にRedisが何を削除するかを選択する方法.
# maxmemoryポリシー.
# volatile-lru -> LRUアルゴリズムを使って期限切れのキーを削除する。
# allkeys-lru -> LRUアルゴリズムに従って任意のキーを削除する。
# volatile-random -> 期限切れのランダムなキーを削除する。
# allkeys-random -> 任意のランダムキーを削除する。
# volatile-ttl -> 有効期限が最も近い鍵を削除する (マイナーTTL)
# noeviction -> 期限を設定せず、書き込み時にエラーを返す。
# noeviction -> 期限を設定せず、書き込み時にエラーを返す
# noeviction -> 期限切れにせず、書き込み操作時にエラーを返す # 注意: 上記のいずれのポリシーでも、Redisは書き込み操作時にエラーを返します。
# 注意: 上記のどのポリシーでも、Redisは消去に適したキーがない場合、 # 書き込み操作に対してエラーを返します。
注意: 上記のいずれのポリシーでも、Redisは # 書き込み操作時にエラーを返します。
バックグラウンドでの保存処理が開始される場合. # この記事の執筆時点では, # 以下のコマンドが利用可能です: set setnx setex append
# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset msetnx exec sort
# exec sort
# デフォルトは
#
# maxmemory-policy noeviction
# MAXMEMORYポリシー: MAXMEMORYが

が # 到着した場合.5つの動作から選択できる:

#

#volatile lru-> lruアルゴリズムを使って期限切れのキーを削除する。

#allkeys lru->lruアルゴリズムに従って任意のキーを削除する。

#volatile random->有効期限付きのランダムなキーを削除する。

#allkeys random->任意のランダムキーを削除する。

#volatile ttl->有効期限が最も近い鍵を削除 (マイナーttl)

#noeviction-> 有効期限を設定せず、書き込み操作のエラーを返す。

#volatile ttl->直近に期限切れとなったキーを削除 (minor ttl)

# 注意: 上記のいずれのストラテジーでも、Redisは書き込み時に # エラーを返します。

# evictionに適したキーがない場合、Redisは書き込み時にエラーを返す # 注意: 上記のいずれの戦略でも、Redisは書き込み時にエラーを返す。

#

# この記事の執筆時点では, # 以下のコマンドを使用します: set setnx setex append

# インクリメント デクリメント rpush lpushx lpushx linsert lset rpoplpush sadd

#sdiff sdiffstore zadd zincrby

zdiff sdiffstore zadd zincrby #zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby hotel

#getset msetnx exec sort

#

# デフォルト値

#

# maxmemoryポリシーは無効
以下の設定も必要である:

デフォルトのredis設定は非常に保守的です。つまり、メモリを超過しても保存されません。ポリシーをLRUアルゴリズム(Least Recently Used Algorithm)に変更することもできます。

思い出してください:

Redis永続RDBとAOFの違い
https://www.itsvse.com/thread-9555-1-1.html

Redisキャッシュを実行するDockerインストール
https://www.itsvse.com/thread-8995-1-1.html

Redis Cache Penetration、Cache Avalanche、Cache Knockdownとはどのようなものかの例。
https://www.itsvse.com/thread-8968-1-1.html

Redisワイルドカード一括削除キー
https://www.itsvse.com/thread-7957-1-1.html

Redis 5.0.3 on CentOS 7 チュートリアル
https://www.itsvse.com/thread-7201-1-1.html

CentOSのphp 5.5.7用のredis拡張のインストール。
https://www.itsvse.com/thread-7200-1-1.html

redisの1つのインスタンスに格納できるキーの数と、キーと値の最大数は?
https://www.itsvse.com/thread-6848-1-1.html

redisの1つのインスタンスに格納できるキーの数と、キーと値の最大数を教えてください。
https://www.itsvse.com/thread-5032-1-1.html

redisをリモートアクセスに使用するには?
https://www.itsvse.com/thread-5011-1-1.html

Windows で Redis サービスを開始できません。エラー 1067: プロセスが予期せず終了しました。
https://www.itsvse.com/thread-5010-1-1.html

redis4.0.8をcentosにインストールする。
https://www.itsvse.com/thread-4614-1-1.html

redisのリモート接続とアクセスパスワードのセットアップ
https://www.itsvse.com/thread-4101-1-1.html

redisがデータキャッシュをクリアする
https://www.itsvse.com/thread-4027-1-1.html

redisの永続化設定と永続化の停止
https://www.itsvse.com/thread-4012-1-1.html

redisにおけるsaveとbgsaveの違い
https://www.itsvse.com/thread-4010-1-1.html

redisにおける2種類の永続性とその仕組み
https://www.itsvse.com/thread-4009-1-1.html

Redisを起動する3つの方法
https://www.itsvse.com/thread-4008-1-1.html

Redisのコマンドラインウィンドウを隠す方法
https://www.itsvse.com/thread-2988-1-1.html

Redisのハッシュ(Hash)フェッチの問題
https://www.itsvse.com/thread-2587-1-1.html

Redisを使う前に知っておくべき5つのこと
https://www.itsvse.com/thread-2580-1-1.html

Redis デフォルトポート番号の変更とアクセスパスワードの設定
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64 ビット版ダウンロード、公式ダウンロードアドレス
https://www.itsvse.com/thread-2576-1-1.html

Luaスクリプトを使用したRedis
https://www.itsvse.com/thread-9634-1-1.html

Redisのベンチマーク
https://www.itsvse.com/thread-9645-1-1.html

終了






前の記事:NPOIセル日付型判定
次の記事:NPOI操作 エクセル 詳細
.NET/C#でRedisを使ってBitMapに基づくブルームアルゴリズムを実装し、実践の過程で遭遇した技術的な苦労を、誤解を招かない程度に公開する。
ソファー
オーナー|发表于2023-7-12 21:08:55只看该作者
Redisメモリ8つの消去戦略
https://www.itsvse.com/thread-10626-1-1.html
(´・ω・`)ゞ(´・ω・`)ゞ(´・ω・`)ゞ(´・ω・`)ゞ(´・ω・`)ゞ(´・ω・`)ゞ(´・ω・`)ゞ(´・ω・`)ゞ
投稿するにはログインが必要です ログイン会員登録

このバージョンのインテグラルルール


免責事項:Code Farmerによって公開されたすべてのソフトウェア、プログラミング教材や記事は、学習と研究の目的のみに使用するために制限されています。上記のコンテンツは、商業的または違法な目的のために使用してはならない、そうでなければ、すべての結果は、ユーザー自身が負担するものとします。本サイトはネットワークからの情報であり、著作権紛争は本サイトとは関係ありません。上記のコンテンツはダウンロード後24時間以内にコンピュータから完全に削除する必要があります。もしあなたがこのプログラムを気に入ったら、正規のソフトウェアをサポートし、登録を購入し、より良い正規のサービスを受けてください。もし著作権侵害があれば、メールでご連絡ください。

メール To:help@itsvse.com

QQ|( 鲁ICP备14021824 号-2)|サイトマップ

GMT+8, 2024-9-19 01:23

クイック返信トップに戻る一覧に戻る