Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 47166|Yanıt: 1

[Kaynak] Redis MISCONF Redis, RDB anlık görüntülerini kaydedecek şekilde yapılandırılmıştır

[Bağlantıyı kopyala]
2021-5-14 tarihinde 21:18:50 tarihinde yayınlandı | | | |
Redis önbelleğini StackExchange.Redis kullanarak hata şu şekildedir:

StackExchange.Redis.RedisServerException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

Geçici çözüm, redis.windows.conf dosyasını değiştir,Redis servisi yeniden başlatılmalıdır, aşağıdaki gibi ayarlanmıştır:
Redis servisini yeniden başlatmak istemiyorsanız, redis-cli komutunu kullanarak aşağıdaki şekilde ayarlayabilirsiniz:



Açıklama şöyledir:
# Varsayılan olarak, RDB anlık görüntüleri etkinleştirilirse Redis yazma kabul etmeyi durdurur
# (en az bir kayıt noktası) ve en son arka plan kaydı başarısız oldu.
# Bu, kullanıcının verinin kalıcı olmadığını (zor bir şekilde) fark etmesini sağlar
# diskte düzgünce bulunur, aksi takdirde muhtemelen kimse fark etmez ve bazıları
# felaket olacak.
#
# Arka plan kaydetme işlemi tekrar çalışmaya başlarsa Redis çalışacak
# otomatik olarak tekrar yazma izni ver.
#
# Ancak, Redis sunucusunu doğru şekilde izlemeyi kurduysanız
# ve ısrar, bu özelliği devre dışı bırakmak isteyebilirsiniz ki Redis
# diskle ilgili sorunlar olsa bile her zamanki gibi çalışmaya devam et,
# izinler ve benzeri.
Basitçe söylemek gerekirse: Redis, ana sürecin veri kaydederken sahte ölüm yapmasını önlemek için ana süreci çatallaması gerekir ve ardından veri kaydetme işlemini çatal sürecinde sabit diske kaydetme işlemini tamamlamalıdır; ana süreç 4GB bellek kullanıyorsa, çatal alt süreci gerektiğinde ek 4GB gerekir, bu anda bellek yeterli değildir, çatal başarısız olur ve veri kaydeden sabit disk de arızalanır.

Redis loglarını görüntülemek için redis.windows.conf'u aşağıdaki şekilde yapılandırmanız gerekir:

# Log dosyası adını belirt. Ayrıca 'stdout' zorlamak için kullanılabilir
# Standart çıkışa giriş yapmak için Redis var.
logfile "E:/Redis-x64-3.2.100/redis.txt"

Log istisnaları şunlardır:

[8984] 14 Mayıs 14:05:09.060 * Arka plan kaydı pid 8672 tarafından başlatıldı
[8672] 14 Mayıs 14:05:09.169 #
Redis'in Windows sürümü, sistem sayfalama dosyasından yığın belleği ayırır
Süreklilik işlemleri için kullanılan çatallanmış süreçle paylaşmak için. Şu anda bölgede yeterli bitişik boş alan bulunmamaktadır.
sistem sayfa dosyası. Sistem sayfalama dosyasının boyutunu artırabilirsin.
Bazen yeniden başlatma işlemi, sistem sayfalama dosyasını yeterince parça parçalarından ayırır
bu operasyonun başarıyla tamamlanması sağlandı.

Redis devam edemez. Çıkıyorum.
[8984] 14 Mayıs 14:05:09.278 # çatal işlemi başarısız oldu



Analizle, maksimum yığın boyutu "maxheap" konfigürasyonundaki sorunun yetersiz bellek nedeniyle olduğu ortaya çıktı.

Çözüm

Redis'in yapılandırma dosyası "redis.windows.conf"u açın ve aşağıdaki kod bölümünü bulun:


# Redis yığını, maxmemory tarafından belirtilen değerden büyük olmalıdır
# bayrağı, çünkü hep alyatıcısının kendi bellek gereksinimleri vardır ve
# Yığının parçalanması kaçınılmazdır. Sadece maxmemory bayrağı
# Belirtildi, MaxHeap 1.5*maxmemory olarak ayarlanır. Eğer maxheap bayrağı
# Maxmemory ile birlikte belirtilirse, maxheap bayrağı otomatik olarak
# 1.5*maxmemory'den küçükse artırılır.
#  
# Maxheap <bytes>

Bu ayarı eklemek iyi,Redis servisi çalışmadı!!!!!!!
Varsayılan değer: maxheap 1024000000≈976.56M'dir

Bu yorumu conf dosyasında bulamadım, şöyle bir şey buldum:
# Belirtilen bayt miktarından fazla bellek kullanmayın.
# Bellek sınırına ulaşıldığında Redis anahtarları kaldırmaya çalışacak
# Seçilen tahliye politikasına göre (bkz. maxmemory-policy).
#
# Redis anahtarları politikaya göre kaldıramazsa ya da politika
# 'noeviction' olarak ayarlandığında, Redis komutlara hatalarla yanıt vermeye başlar
# daha fazla bellek kullanacak, mesela SET, LPUSH gibi ve devam edecek
# GET gibi sadece okunabilir komutlara yanıt vermek için.
#
# Bu seçenek genellikle Redis LRU önbelleği olarak kullanılırken veya ayarlarken faydalıdır.
# bir örnek için sabit bellek sınırı ('noeviction' politikası kullanılarak).
#
# UYARI: Maxmemory açık bir instance'a bağlı slave'leriniz varsa,
# Slave'leri beslemek için gereken çıkış tamponlarının boyutu çıkarılır
# kullanılan bellek sayısından, böylece ağ sorunları / yeniden senkronizasyonlar
# tuşların çıkarıldığı bir döngüyü tetiklememek, böylece çıkış
# Slave tamponu çıkarılmış anahtarların DEL'leriyle dolu ve silinmeyi tetikliyor
# daha fazla anahtar ve benzeri devam eder, veritabanı tamamen boşalana kadar.
#
# Kısacası... Eğer köleler bağlıysa, daha düşük bir ayar ayarlamanız önerilir
# maksimum bellek için limit verin, böylece sistemde slave için biraz boş RAM kalsın
# çıkış tamponları (ancak politika 'eviction' ise bu gerekli değildir).
#
# UYARI: maxmemory ayarlanmazsa, Redis'in bir
# Heap sınırına ulaşılırsa hafıza dışı istisna.
#
# NOT: Redis, heap belleği tahsis etmek için sistem sayfalama dosyasını kullandığından,
# Windows Görev Yöneticisi veya diğer kişiler tarafından gösterilen Çalışma Seti bellek kullanımı
# ProcessExplorer gibi araçlar her zaman doğru olmayacaktır. Örneğin, doğru
# RDB veya AOF dosyalarının arka plan kaydından sonra, çalışma kümesi değeri
# önemli ölçüde düşebilir. Doğru kullanılan bellek miktarını kontrol etmek için
# redis-server tarafından veriyi depolamak için INFO istemci komutunu kullanın. The INFO
# komutu sadece redis verilerini depolamak için kullanılan belleği gösterir, ekstra veri değil
# Windows sürecinin kendi gereksinimleri için kullandığı bellek. Th3 ekstra miktar
INFO komutu tarafından bildirilmeyen bellek # hesaplanarak
# Windows Görev Yöneticisi ve used_memory_peak tarafından bildirilen Zirve Çalışma Seti
# INFO komutası tarafından bildirildi.
#
# Maxmemory <bytes>

Uyarı: Heap sınırına ulaşılırsa, maxmemory ayarlanmaması Redis'in bir hafıza dışı istisna ile sonlanmasına neden olur.

Not: NedeniRedis, heap belleği tahsis etmek için sistem sayfalama dosyalarını kullanır

Windows Görev Yöneticisi veya ProcessExplorer gibi diğer araçlar her zaman doğru iş seti bellek kullanımını göstermez. Basitçe söylemek gerekirse,Görev Yöneticisi'nin gösterdiği bellek kullanımı doğru değil!!!

Bilgi komutunu kullanarak aşağıdaki şekilde sorgulayın:

# Hafıza
used_memory:2011338768
used_memory_human:1.87G
used_memory_rss:2011279992
used_memory_rss_human:1.87G
used_memory_peak:2011338768
used_memory_peak_human:1.87G
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:Noeviction
mem_fragmentation_ratio:1.00
mem_allocator:jemalloc-3.6.0



Ayarlar şu şekildedir:

1073741824 bayt = 1G
Ayardan sonra, redis .net istemcisi aşağıdaki gibi bir önbellek hatası ekler:

'maxmemory' bellek kullanıldığında OOM komutu > izin verilmiyor.
# MAXMEMORY POLITIKASI: Redis'in maxmemory olduğunda neyi kaldıracağını nasıl seçeceği
# ulaşıldı. Beş davranış arasından seçim yapabilirsiniz:
#
# volatile-lru -> LRU algoritması kullanılarak süresi dolmuş bir setle anahtarı kaldırın
# allkeys-lru -> LRU algoritmasına göre herhangi bir anahtarı kaldırın
# volatile-random -> süresi dolmuş bir anahtarı kaldır
# allkeys-random -> rastgele bir anahtarı kaldır, herhangi bir anahtarı
# volatile-ttl -> en yakın son kullanma süresine sahip anahtarı kaldır (küçük bir zaman çizelgesi)
# Noeviction -> hiç süresi dolmuyor, sadece yazma işlemlerinde hata döndür
#
# Not: Yukarıdaki politikalardan herhangi biriyle Redis yazma hatası döndürecektir
# tahliye için uygun anahtar olmadığı operasyonlar.
#
# Bu komutların yazıldığı tarihte şöyledir: 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 mset msetnx yönetici sıralaması
#
# Varsayılan şudur:
#
# maxmemory-politika evilasyonu
#MAXMEMORY策略: MAXMEMORY

#到达. Beş davranıştan birini seçebilirsiniz:

#

#volatile LRU->, süresi dolmuş anahtarları kaldırmak için LRU algoritmasını kullanır

#allkeys LRU-> LRU algoritmasına göre herhangi bir anahtarı silir

#volatile rastgele - > süresi dolmuş anahtarları kaldır

#allkeys rastgele > rastgele anahtarları, keyfi anahtarları sil

#volatile TTL-> En yakın son kullanma süresine sahip anahtarı sil (Küçük TTL)

#noeviction-> hiç süresi dolmaz, sadece yazma işlemi hatalarını döndürür

#

#注意: Yukarıdaki stratejilerden herhangi biri için, Redis yazma sırasında hata döndürür

#操作, tahliye için uygun bir anahtar olmadığında.

#

#在编写之日 bu komutlar şunlardır: setnx setex ekle

#递增递减rpush lpushx lpushx linsert lset rpoplpush sadd

#烧结店sunion sunionstore sdiff sdiffstore zadd zincrby

#zunionstore Zinterstore Hset Hsetnx HMSET Hincrby Incrby Decrby

#getset MSET MSETNX yönetici sıralaması

#

#默认值为:

#

#maxmemory策略无效
Ayrıca aşağıdaki yapılandırmaları kurmanız gerekir:

Varsayılan redis ayarı çok muhafazakardır; yani, bellek sınırı aşıldıktan sonra saklanmaz ve politika LRU algoritmasına (son zamanlarda en az kullanılan algoritma) değiştirilebilir - yeni depolanan bilgiler eski bilginin yerini alır.

Eleştiri:

RDB ile AOF arasındaki Redis Sürekliliği Farkı
https://www.itsvse.com/thread-9555-1-1.html

Docker kurulumu Redis önbelleğini çalıştırıyor
https://www.itsvse.com/thread-8995-1-1.html

Örnekler, Redis önbellek penetrasyonu, önbellek çığı ve önbellek dağılımının ne olduğunu açıklar
https://www.itsvse.com/thread-8968-1-1.html

Anahtarları toplu olarak silmek için kırdas joker kartlar
https://www.itsvse.com/thread-7957-1-1.html

CentOS 7 kurulumu Redis 5.0.3 eğitimi
https://www.itsvse.com/thread-7201-1-1.html

Redis uzantısını php 5.5.7 altında CentOS altında kur
https://www.itsvse.com/thread-7200-1-1.html

Bir redis örneğinde kaç anahtar depolanabilir ve maksimum anahtarlar ve değerler nelerdir?
https://www.itsvse.com/thread-6848-1-1.html

Redis Chinese numarası düzgün şekilde gösterilemiyor
https://www.itsvse.com/thread-5032-1-1.html

Redis uzaktan erişim sağlıyor
https://www.itsvse.com/thread-5011-1-1.html

Windows, Redis servisini başlatamıyor, hata 1067: Süreç beklenmedik şekilde sonlanıyor.
https://www.itsvse.com/thread-5010-1-1.html

CentOS Redis 4.0.8'i yükledi
https://www.itsvse.com/thread-4614-1-1.html

Redis uzaktan bağlantı ve erişim şifreleri kurar
https://www.itsvse.com/thread-4101-1-1.html

Redis veri önbelleğini boşaltıyor
https://www.itsvse.com/thread-4027-1-1.html

Redis persistence yapılandırması ve kapalı persistence
https://www.itsvse.com/thread-4012-1-1.html

Redis'te save ile bgsave arasındaki fark
https://www.itsvse.com/thread-4010-1-1.html

Redis iki süreklilik yöntemi ve ilkesi
https://www.itsvse.com/thread-4009-1-1.html

Redis'in başlaması için üç yol var
https://www.itsvse.com/thread-4008-1-1.html

Komut satırı pencerelerini gizlemek için Redis yöntemi
https://www.itsvse.com/thread-2988-1-1.html

Redis Hash Hash Hash Değeri Problemi
https://www.itsvse.com/thread-2587-1-1.html

Redis Kullanmadan Önce Bilmeniz Gereken 5 Şey
https://www.itsvse.com/thread-2580-1-1.html

Redis, varsayılan port numarasını değiştirir ve erişim şifresini ayarlar
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit indirme, resmi indirme adresi
https://www.itsvse.com/thread-2576-1-1.html

Redis, ayrıntılı açıklamalar için Lua betanlarını kullanır
https://www.itsvse.com/thread-9634-1-1.html

Redis Benchmark performans testi
https://www.itsvse.com/thread-9645-1-1.html

(Son)






Önceki:Hücre tarih türüne dair NPOI kararı
Önümüzdeki:NPOI Operasyonu Excel Detaylı Açıklaması
 Ev sahibi| 2023-7-12 tarihinde 21:08:55 tarihinde yayınlandı |
Redis hafıza sekiz eleme stratejileri
https://www.itsvse.com/thread-10626-1-1.html
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com