- Konu sahibi
- #1
Disk cache terimi bağlama göre, disk verisinin RAM’de önbelleğe alınmasını veya bir uygulamanın önbellek verisini diskte saklamasını anlatabilir. İkisini ayırmak gerekir. Bu rehberin sunucu bölümünde işletim sisteminin dosya verisini RAM’de tuttuğu sayfa önbelleği ele alınıyor. Aynı dosya yeniden istendiğinde veri fiziksel diskten okunmak yerine RAM’den verilebildiği için erişim süresi ve disk üzerindeki okuma yükü azalır.
Disk cache bir yedek değildir. Önbellekteki veri gerektiğinde silinebilir ve RAM başka işler için kullanılabilir. Ayrıca “boş” görünen RAM’in tamamı kullanılmıyor anlamına gelmez; Linux, boş belleği disk verilerini önbelleğe almak için değerlendirebilir.
Bir web sunucusu bir dosyayı ilk kez okuduğunda işletim sistemi ilgili blokları diskten alır ve RAM’de tutabilir. Aynı dosya tekrar okunursa işletim sistemi önce RAM’deki kopyayı kontrol eder. Kopya geçerliyse disk erişimi yapılmadan sonuç döndürülür. RAM yetmezse daha az kullanılan cache verileri çıkarılır ve alan yeni veriler için kullanılır.
Bu nedenle cache hit olarak düşünülebilecek tekrar okumalar hızlıdır; ancak ilk okuma, büyük dosyalar, düşük RAM, yoğun disk yazma işlemleri veya verinin cache’ten çıkarılması hâlinde disk erişimi yine gerçekleşir. Cache, yavaş bir diski sınırsız biçimde hızlandırmaz ve ağ gecikmesi, uygulama kodu veya veritabanı sorgusu gibi diğer darboğazları ortadan kaldırmaz.
“Disk cache” tek bir bileşeni ifade etmeyebilir. Teşhis yaparken aşağıdaki ayrımı korumak gerekir:
Bu türler birlikte çalışabilir fakat birbirinin yerine geçmez. Örneğin işletim sistemi bir görsel dosyasını RAM’de tutsa bile uygulamanın her istekte aynı pahalı veritabanı sorgusunu çalıştırması, uygulama katmanında ayrı bir optimizasyon ihtiyacı olduğunu gösterir.
Linux sunucuda önce genel bellek görünümünü kontrol edin:
Komutlar beklenen şekilde çıktı veriyorsa sonuç, sistemin belleği cache için kullandığını gösterir; tek başına “cache’i temizlemek gerekir” anlamına gelmez. Çıktı alınamıyorsa araç kurulu olmayabilir veya yetki eksik olabilir. Önce izleme aracının mevcut olup olmadığını ve ilgili işletim sistemi yetkilerini kontrol edin.
Genellikle hayır. Cache’i elle temizlemek, kısa süreli teşhis dışında kalıcı performans çözümü değildir; temizlenen veriler sonraki erişimlerde yeniden diskten okunacağı için performans geçici olarak düşebilir. Üretim sunucusunda sırf
Gerçek bir bellek baskısı varsa sonraki karar, cache’i silmek değil nedenini bulmaktır: gereğinden büyük süreçler, sınırlı RAM, yoğun veritabanı işlemleri, aşırı yazma veya uygulamanın kendi cache ayarları incelenmelidir. Yazma cache’i ve donanım cache’iyle ilgili ayarlar değiştirilmeden önce veri bütünlüğü ve güç kesintisi davranışı ayrıca değerlendirilmelidir.
Disk cache bir yedek değildir. Önbellekteki veri gerektiğinde silinebilir ve RAM başka işler için kullanılabilir. Ayrıca “boş” görünen RAM’in tamamı kullanılmıyor anlamına gelmez; Linux, boş belleği disk verilerini önbelleğe almak için değerlendirebilir.
Nasıl çalışır?
Bir web sunucusu bir dosyayı ilk kez okuduğunda işletim sistemi ilgili blokları diskten alır ve RAM’de tutabilir. Aynı dosya tekrar okunursa işletim sistemi önce RAM’deki kopyayı kontrol eder. Kopya geçerliyse disk erişimi yapılmadan sonuç döndürülür. RAM yetmezse daha az kullanılan cache verileri çıkarılır ve alan yeni veriler için kullanılır.
Bu nedenle cache hit olarak düşünülebilecek tekrar okumalar hızlıdır; ancak ilk okuma, büyük dosyalar, düşük RAM, yoğun disk yazma işlemleri veya verinin cache’ten çıkarılması hâlinde disk erişimi yine gerçekleşir. Cache, yavaş bir diski sınırsız biçimde hızlandırmaz ve ağ gecikmesi, uygulama kodu veya veritabanı sorgusu gibi diğer darboğazları ortadan kaldırmaz.
Sunucuda hangi cache kastedilebilir?
“Disk cache” tek bir bileşeni ifade etmeyebilir. Teşhis yaparken aşağıdaki ayrımı korumak gerekir:
| Tür | Nerede bulunur? | Temel amacı |
|---|---|---|
| İşletim sistemi page cache | RAM ve çekirdek | Dosya okuma ve yazma erişimini hızlandırmak |
| Disk veya RAID denetleyici cache’i | Disk donanımı ya da denetleyici belleği | Disk komutlarını ve veri aktarımını geçici olarak düzenlemek |
| Tarayıcının disk önbelleği | Cihazdaki kalıcı depolama | HTTP yanıtlarını daha sonraki kullanımlar için tutmak; RAM içi tarayıcı cache’inden ayrıdır |
| Uygulama cache’i | Web uygulaması, veritabanı veya ayrı cache servisi | İşlenmiş sonuçları tekrar üretmeden sunmak |
Bu türler birlikte çalışabilir fakat birbirinin yerine geçmez. Örneğin işletim sistemi bir görsel dosyasını RAM’de tutsa bile uygulamanın her istekte aynı pahalı veritabanı sorgusunu çalıştırması, uygulama katmanında ayrı bir optimizasyon ihtiyacı olduğunu gösterir.
Durumu nasıl kontrol edilir?
Linux sunucuda önce genel bellek görünümünü kontrol edin:
free -hkomutunu çalıştırın ve özellikleavailabledeğerine bakın.buff/cachedeğerinin yüksek olması tek başına bellek sorunu değildir; düşük available ve devam eden swap giriş/çıkışı daha anlamlı uyarılardır. Önceden swapte kalmış verinin bulunması tek başına o anda bellek baskısı olduğunu göstermez.cat /proc/meminfoçıktısındaCached,Buffers,DirtyveWritebackalanlarını inceleyin. Dirty henüz diske yazılmayı bekleyen, Writeback ise aktif olarak yazılmakta olan belleği gösterir. Süreklilik, değişim hızı ve disk gecikmesi birlikte değerlendirilmelidir; tek bir yüksek örnek darboğaz kanıtı değildir.- Disk darboğazı şüphesinde
iostatgibi sistem izleme araçlarıyla bekleme süresini, işlem yoğunluğunu ve aktarım hızını izleyin. Yalnızca RAM cache büyüklüğüne bakarak disk performansı hakkında karar vermeyin. - Sorun yalnız belirli bir uygulamada görülüyorsa web sunucusu, veritabanı ve uygulama günlüklerini birlikte inceleyin. Cache hit oranı düşükse dosyanın sürekli değişmesi, çalışma kümesinin RAM’e sığmaması veya asıl darboğazın disk dışındaki bir katman olması mümkündür.
Komutlar beklenen şekilde çıktı veriyorsa sonuç, sistemin belleği cache için kullandığını gösterir; tek başına “cache’i temizlemek gerekir” anlamına gelmez. Çıktı alınamıyorsa araç kurulu olmayabilir veya yetki eksik olabilir. Önce izleme aracının mevcut olup olmadığını ve ilgili işletim sistemi yetkilerini kontrol edin.
Cache’i temizlemek gerekir mi?
Genellikle hayır. Cache’i elle temizlemek, kısa süreli teşhis dışında kalıcı performans çözümü değildir; temizlenen veriler sonraki erişimlerde yeniden diskten okunacağı için performans geçici olarak düşebilir. Üretim sunucusunda sırf
buff/cache yüksek görünüyor diye temizlik komutu çalıştırmak yerine önce bellek baskısını, swap kullanımını ve disk beklemesini doğrulayın.Gerçek bir bellek baskısı varsa sonraki karar, cache’i silmek değil nedenini bulmaktır: gereğinden büyük süreçler, sınırlı RAM, yoğun veritabanı işlemleri, aşırı yazma veya uygulamanın kendi cache ayarları incelenmelidir. Yazma cache’i ve donanım cache’iyle ilgili ayarlar değiştirilmeden önce veri bütünlüğü ve güç kesintisi davranışı ayrıca değerlendirilmelidir.