Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Memcached İçin Item Büyüklüğü ve Slab Dağılımını Optimize Etme (stats slabs Komutu ile Analiz)

codrix

Üye
Katılım
14 Mart 2026
Mesajlar
50
Merhaba arkadaşlar, bugün sizlere özellikle yüksek trafikli sunucularda Memcached performansını gözle görülür şekilde artırabilecek, çok önemli bir optimizasyon konusundan bahsedeceğim: Slab dağılımı ve item büyüklüğü ayarı. Cache'lenen verileriniz eğer yanlış slab'lara (bellek bloklarına) dağılıyorsa, ciddi bellek israfı ve performans düşüşü yaşayabilirsiniz. Bu rehberde, bu sorunu nasıl teşhis edeceğinizi ve nasıl düzelteceğinizi adım adım anlatacağım.

🔍 Sorunu Anlamak: Slab Nedir ve Neden Önemli?

Memcached, belleği farklı boyutlardaki "slab" adı verilen bloklara ayırır. Her slab sınıfı (slab class), belirli bir büyüklükteki item'ları (cache nesnelerini) saklamak için ayrılmıştır. Örneğin, 96 byte'lık bir slab, 100 byte'lık bir item'ı saklayamaz. O item bir üst slab'a (örneğin 128 byte'lık) yerleşir. Bu durumda 28 byte boşa gider. Buna "internal fragmentation" (dahili parçalanma) diyoruz. Eğer cache'lediğiniz verilerin boyutu sizin slab boyutlarınıza uygun değilse, inanılmaz miktarda bellek boşu boşuna kullanılabilir.

📊 Teşhis Koymak: stats slabs Komutu ile Analiz

İlk adım, mevcut durumunuzu analiz etmek. Memcached'e telnet veya `nc` (netcat) komutu ile bağlanarak detaylı slab istatistiklerini alacağız.

Bash:
echo "stats slabs" | nc localhost 11211

Bu komutun çıktısı biraz karmaşık gelebilir. Daha anlaşılır bir özet için şu komutu kullanabilirsiniz:

Bash:
echo "stats slabs" | nc localhost 11211 | grep -A 1 "chunk_size\|total_chunks\|free_chunks" | head -30

Asıl odaklanmamız gereken kısım, her bir slab sınıfının (örneğin `STAT 7:chunk_size 16416`) "chunk_size" (blok boyutu) ve o slab'ta kullanılan chunk sayısı (`mem_requested` gibi) ile boşta duran chunk sayısı (`free_chunks`) arasındaki ilişki. Eğer bir slab sınıfında `free_chunks` değeri çok yüksek, ama `mem_requested` düşükse, o slab boyutu için çok fazla bellek ayırmışsınız demektir ve bu bellek verimsiz kullanılıyor olabilir.

⚙️ Çözüm: -f (Growth Factor) Parametresini Ayarlamak

Memcached, slab boyutlarını bir "büyüme faktörü" (growth factor) ile belirler. Varsayılan değer `1.25`'tir. Bu, her bir slab sınıfının boyutunun bir öncekinin 1.25 katı olduğu anlamına gelir. Optimizasyonun özü, cache'lediğiniz item'ların ortalama boyutuna daha uygun bir büyüme faktörü belirlemektir.

Öncelikle, item boyutlarınızı anlamak için `stats items` komutunu inceleyebilir veya uygulama tarafında loglama yapabilirsiniz. Diyelim ki item'larınız çoğunlukla 300-500 byte arasında, ama slab boyutlarınız 256, 512, 1024 şeklinde atlıyor. 500 byte'lık bir item 1024 byte'lık slaba giderek 524 byte boşluk bırakır.

Bu sorunu çözmek için Memcached'i başlatırken `-f` parametresini kullanın. Daha küçük bir faktör, slab boyutları arasındaki artışı azaltır ve bellek kullanımını verimli hale getirir.

Bash:
memcached -u memcache -m 1024 -f 1.05 -l 127.0.0.1 -p 11211 -d

Yukarıdaki komutta `-f 1.05` büyüme faktörünü 1.05 olarak ayarladık. Bu, slab boyutlarının birbirine çok daha yakın olmasını sağlayacak ve item'ların daha uygun slotlara yerleşmesine izin verecektir. Dikkat: Çok küçük bir faktör (ör. 1.01) çok fazla sayıda slab sınıfı oluşturarak memory overhead'ini artırabilir. `1.04` ile `1.10` arası genelde iyi bir başlangıçtır.

⚠️ Kritik Uyarılar ve Test Süreci

Bu ayarı canlı sisteme hemen uygulamayın! Önce bir test/ staging ortamında deneyin.

1. Ayarları değiştirdikten sonra Memcached'i yeniden başlatmanız gerekir. Bu, tüm cache'in boşalması anlamına gelir. Canlı sistemde bunu yapmak için uygun bir bakım penceresi planlayın veya cache miss'lerin tolere edilebileceği bir zamanda yapın.
2. Yeni `-f` değerinizi belirledikten sonra, bir süre `stats slabs` komutu ile takip edin. `free_chunks` sayılarının düştüğünü ve bellek kullanımının daha verimli hale geldiğini görmelisiniz.
3. Uygulamanızın performans metriklerini (cache hit rate, response time) mutlaka izleyin. Amacımız cache hit oranını artırmak.

💎 Sonuç ve Tavsiyeler

Memcached, varsayılan ayarlarla genelde iyi çalışır, ancak iş yükünüz özel bir dağılıma sahipse bu optimizasyon altın değerindedir. Özellikle bellek sınırının zorlandığı sunucularda, aynı RAM ile çok daha fazla item cache'leyebilir ve uygulama hızınızı artırabilirsiniz.

Ben kendi sunucularımda, önce birkaç günlük `stats slabs` verisini loglayıp bir histogram çıkarırım. Item boyut dağılımını gördükten sonra `-f 1.07` veya `-f 1.08` gibi bir değerle başlar, test ortamında stres testi yaparım. Siz bu konfigürasyonu kendi sunucularınızda nasıl yapıyorsunuz? Farklı bir yönteminiz veya sorunuz varsa aşağıya yazmaktan çekinmeyin, beraber tartışalım.
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri