Redis için Azure Cache istemci tarafı sorunlarını giderme
Bu bölümde, redis istemcisinde uygulamanın kullandığı bir koşul nedeniyle oluşan sorunları giderme ele almaktadır.
- Redis istemcisi üzerinde bellek baskısı
- Trafik patlaması
- Yüksek istemci CPU kullanımı
- İstemci tarafı bant genişliği sınırlaması
Redis istemcisi üzerinde bellek baskısı
İstemci makinesi üzerindeki bellek baskısı, önbellekten gelen yanıtların işlemesini geciktiren her türlü performans sorununa yol açabilir. Bellek baskısı isabet edinca sistem verileri diske sayfalar. Bu sayfanın hatalı olması sistemin önemli ölçüde yavaşlamasına neden olur.
İstemci üzerindeki bellek baskısını algılamak için:
- Kullanılabilir belleği aşmay olduğundan emin olmak için makinede bellek kullanımını izleme.
- İstemcinin performans
Page Faults/Secsayacını izleme. Normal çalışma sırasında sistemlerin çoğunda bazı sayfa hataları olur. İstek zaman aşımlarını ifade eden sayfa hatası artışları bellek baskısı olduğunu gösterebilir.
İstemci üzerindeki yüksek bellek baskısı çeşitli yollarla azaltabilirsiniz:
- İstemcide bellek tüketimini azaltmak için bellek kullanım düzenlerinizi araştırabilirsiniz.
- İstemci VM'nizi daha fazla belleğe sahip daha büyük bir boyuta yükseltin.
Trafik patlaması
Kötü ayarlarla birlikte trafik serileri, Redis Sunucusu tarafından gönderilen ancak henüz istemci tarafında tüketilemeyen verilerin işlemesinde gecikmelere ThreadPool neden olabilir.
Örnek bir kullanarak ThreadPool istatistiklerinizin zaman içinde nasıl değiştiklerini izleme. ThreadPoolLogger Daha fazla araştırma TimeoutException yapmak için aşağıdaki gibi StackExchange.Redis'den gelen iletileri kullanabilirsiniz:
System.TimeoutException: Timeout performing EVAL, inst: 8, mgr: Inactive, queue: 0, qu: 0, qs: 0, qc: 0, wr: 0, wq: 0, in: 64221, ar: 0,
IOCP: (Busy=6,Free=999,Min=2,Max=1000), WORKER: (Busy=7,Free=8184,Min=2,Max=8191)
Yukarıdaki özel durumla ilgili bazı ilginç sorunlar vardır:
- bölümünde ve
IOCPbölümünde değerindenWORKERbüyük birBusydeğere sahip olduğunu farkMinedin. Bu fark, ayarlarınızınThreadPoolayarlanmasını istediğiniz anlamına gelir. - ayrıca
in: 64221bkz. . Bu değer, istemcinin çekirdek yuva katmanında 64.211 bayt alınmıştır ancak uygulama tarafından okunmamıştır. Bu fark genellikle, uygulamanın (örneğin StackExchange.Redis) sunucu tarafından size gönderdiği kadar hızlı bir şekilde ağdan veri okumay olduğu anlamına gelir.
İş parçacığı havuzu ThreadPool Ayarlar hızlı bir şekilde seri durumda ölçeklendirin emin olmak için yapılandırmayı yapılandırabilirsiniz.
Yüksek istemci CPU kullanımı
Yüksek istemci CPU kullanımı, sistemin istenilen çalışmaya devam ede olmadığını gösterir. Önbellek yanıtı hızlı bir şekilde gönderse de, istemci yanıtı zamanında işleyene kadar başarısız olabilir.
İstemcinin sistem genelindeki CPU kullanımını, makinede veya Azure portal sayaçları aracılığıyla kullanılabilir ölçümleri kullanarak izleyebilirsiniz. İşlem CPU'larını izleme konusunda dikkatli olun çünkü tek bir işlem düşük CPU kullanımına sahip olabilir ancak sistem genelindeKI CPU yüksek olabilir. Cpu kullanımında zaman aşımına karşılık gelen ani artışları izleyin. Yüksek CPU, Trafik seri in: XXX akışı bölümünde açıklandığı gibi hata TimeoutException iletisinde yüksek değerlere de neden olabilir.
Not
StackExchange.Redis 1.1.603 ve sonrası hata local-cpu iletisinde TimeoutException ölçümü içerir. StackExchange.RedisNuGet paketinin en son sürümünü NuGet olun. Kodda sürekli düzeltilen hatalar vardır ve bu nedenle en son sürüme sahip olmak önemlidir.
bir istemcinin yüksek CPU kullanımını azaltmak için:
- CPU'da ani artışlara neyin neden olduğunu araştır.
- İstemcinizi daha fazla CPU kapasitesine sahip daha büyük bir VM boyutuna yükseltin.
İstemci tarafı bant genişliği sınırlaması
İstemci makinelerinin mimarisine bağlı olarak, kullanılabilir ağ bant genişliğine ilişkin sınırlamaları olabilir. İstemci, ağ kapasitesini aşırı yüklenerek kullanılabilir bant genişliğini aşarsa, veriler sunucu tarafından gönderiliyor kadar hızlı bir şekilde işlenmez. Bu durum zaman aşımına neden olabilir.
Bant genişliği kullanımınızı zaman içinde nasıl değiştiklerini bir örnek kullanarak BandwidthLogger izleyebilirsiniz. Bu kod, kısıtlı izinlere sahip bazı ortamlarda (Azure web siteleri gibi) başarıyla çalıştırılamaz.
Azaltmak için ağ bant genişliği tüketimini azaltın veya istemci VM boyutunu daha fazla ağ kapasitesine sahip bir vm boyutuna artırın.
Yüksek istemci bağlantıları
Önbellek için en yüksek düzeye ulaşan istemci bağlantıları, bağlantı isteklerinde maksimum değeri aşan hatalara neden olabilir ve yinelenen yeniden bağlanma denemelerini işleme nedeniyle önbellekte yüksek sunucu CPU kullanımına neden olabilir.
Yüksek istemci bağlantıları, istemci kodunda bağlantı sızıntısı olduğunu gösteriyor olabilir. Bağlantılar düzgün şekilde yeniden kullanılmamış veya kapatılamayabilirsiniz. Bağlantı kullanımı için istemci kodunu gözden geçirme.
Yüksek bağlantıların hepsi geçerli ve gerekli istemci bağlantıları ise, önbelleğinizi daha yüksek bağlantı sınırına sahip bir boyuta yükseltmeniz gerekebilir.