Giriş: Çekirdek Bellek Savaşları ve Görünmez Düşman
Modern bilgi işlem sistemlerinin kalbinde, kaynakların verimli kullanımı ve performansı doğrudan etkileyen bir dizi karmaşık mekanizma yatar. Bu mekanizmalar arasında bellek yönetimi, özellikle Linux çekirdeğinin bu alandaki stratejileri, sisteminizin tepki süresinden uygulama kararlılığına kadar her şeyi belirleyebilir. Ancak bu karmaşık yapının içinde, çoğu zaman gözden kaçan ve sistem performansını sinsi bir şekilde düşüren bir “Gizli Swap Tuzağı” bulunmaktadır.
Bu blog yazısında, “Çekirdek Bellek Savaşları: Gizli Swap Tuzağı” konseptini derinlemesine inceleyeceğiz. Sanal bellek, swap alanı ve çekirdeğin bellek yönetimi algoritmalarının nasıl çalıştığını anlayarak, sistemlerinizin neden yeterli fiziksel belleğe sahipken bile beklenmedik şekilde yavaşladığını keşfedeceğiz. Amacımız, bu tuzaktan kaçınmak ve sistem performansınızı en üst düzeye çıkarmak için size pratik bilgiler ve uygulanabilir stratejiler sunmaktır.
Sanal Bellek ve Swap’in Kısa Tarihi
Bilgisayar biliminin ilk günlerinden itibaren, programların ihtiyaç duyduğu bellek miktarı, fiziksel olarak mevcut olan RAM’den çok daha fazla olmuştur. Bu sorunu çözmek için sanal bellek kavramı geliştirildi. Sanal bellek, bir programın fiziksel belleği doğrudan ele almak yerine, adres alanını soyutlamasına olanak tanır.
Bu soyutlama, işletim sistemine programların bellek taleplerini daha esnek bir şekilde yönetme gücü verir. Sanal bellek sisteminin ayrılmaz bir parçası olan swap alanı ise, fiziksel bellek (RAM) dolduğunda veya çekirdek daha az kullanılan bellek sayfalarını disk üzerine taşımak istediğinde devreye girer. Bu mekanizma, sistemin daha fazla uygulama çalıştırmasına olanak tanırken, disk I/O hızlarının RAM’den kat kat yavaş olması nedeniyle performans düşüşlerine yol açabilir.
Bellek Yönetimine Genel Bakış: RAM, Sanal Bellek ve Çekirdeğin Rolü
Bilgisayar sistemlerinde performansın temel taşlarından biri olan bellek yönetimi, işletim sisteminin en kritik görevlerinden biridir. Bu bölümde, RAM’in temel işlevinden başlayarak sanal bellek mimarisine ve Linux çekirdeğinin bu süreçteki hayati rolüne kadar geniş bir çerçevede bellek yönetimini inceleyeceğiz.
Herhangi bir uygulamanın verimli çalışabilmesi için hızlı ve yeterli belleğe erişim sağlaması gerekir. Ancak bu erişim, yalnızca donanımsal kapasite ile sınırlı değildir; aynı zamanda işletim sisteminin bu kapasiteyi ne kadar akıllıca yönettiğine de bağlıdır.
RAM (Random Access Memory) ve Disk Depolama Arasındaki Fark
RAM, işlemcinin doğrudan erişebildiği, yüksek hızlı geçici bir depolama birimidir. Veriler ve çalışan program kodları burada tutulur. RAM’in temel özelliği, çok hızlı olması ve işlemciye milisaniyeler içinde veri sağlayabilmesidir. Ancak RAM, uçucudur; yani güç kesildiğinde üzerindeki tüm veriler kaybolur.
Disk depolama (HDD veya SSD) ise, verileri kalıcı olarak saklar ve RAM’e göre çok daha yavaştır. Bir diskten veri okumak veya yazmak, RAM’den veri okumaktan veya yazmaktan binlerce kat daha uzun sürebilir. Bu hız farkı, bellek yönetiminde kritik bir rol oynar. İşletim sistemi, hızlı erişim gerektiren verileri RAM’de tutmaya çalışırken, daha az acil veya kullanılmayan verileri diske (swap alanına) taşıyarak RAM’i boşaltma eğilimindedir.
Sanal Bellek Kavramı ve Paging Mekanizması
Sanal bellek, her programın kendi özel ve kesintisiz bellek alanına sahip olduğu yanılsamasını yaratan bir mekanizmadır. Programlar, fiziksel adresler yerine sanal adreslerle çalışır. Bu sanal adresler, bir Memory Management Unit (MMU) tarafından fiziksel adreslere çevrilir.
Sanal bellek, işletim sistemine aşağıdaki avantajları sağlar:
- Bellek Koruması: Her programın kendi sanal adres alanı olduğundan, bir program başka bir programın belleğine doğrudan erişemez, bu da sistem kararlılığını artırır.
- Bellek Soyutlaması: Programcıların fiziksel bellek düzeni hakkında endişelenmesine gerek kalmaz.
- Daha Büyük Adres Alanı: Programlar, fiziksel olarak mevcut olandan daha büyük bir bellek alanı kullanabilir.
Bu sistemin temel taşı paging (sayfalama) mekanizmasıdır. Bellek, sabit boyutlu bloklara (page’lere) ayrılır. Sanal bellek sayfaları, fiziksel bellek çerçevelerine (page frame’lere) eşlenir. Bir sayfa fiziksel bellekte değilse, bir sayfa hatası (page fault) meydana gelir ve işletim sistemi o sayfayı diskten fiziksel belleğe yükler.
Swapping Mekanizmaları ve Çekirdeğin Rolü
Swapping, fiziksel belleğin yetersiz kaldığı durumlarda, az kullanılan bellek sayfalarını diskteki özel bir alana (swap alanı) taşıma işlemidir. Bu işlem, RAM’de yer açar ve sistemin daha fazla program çalıştırmasına olanak tanır.
Linux çekirdeği, bellek yönetimi konusunda merkezi bir rol oynar:
- Bellek Ayırma ve Serbest Bırakma: Uygulamalara ve çekirdek bileşenlerine bellek tahsis eder, işleri bittiğinde serbest bırakır.
- Sanal Bellek Haritalaması: Sanal adresleri fiziksel adreslere dönüştürür.
- Sayfa Yönetimi: Hangi sayfaların RAM’de kalacağını, hangilerinin diske taşınacağını (swap out) veya diskten RAM’e geri getirileceğini (swap in) yönetir.
- Önbellek (Cache) Yönetimi: Disk I/O’sunu hızlandırmak için dosya sistemleri ve diğer veriler için önbellek (page cache) tutar.
Çekirdek, bu süreçlerde çeşitli algoritmalar ve heuristikler kullanır. En önemlilerinden biri, Least Recently Used (LRU) algoritmasıdır. Bu algoritma, en uzun süredir kullanılmayan sayfaların önce diske taşınması prensibine dayanır. Ancak bu, her zaman en optimal çözüm olmayabilir ve “Gizli Swap Tuzağı”na yol açabilir.
Swap Alanı Nedir ve Neden Kullanılır?
Swap alanı, bir Linux sisteminde fiziksel RAM’in bir uzantısı olarak işlev gören özel bir disk alanıdır. Genellikle sistem performansı için kritik öneme sahip olan bu alan, doğru yapılandırılmadığında ciddi performans sorunlarına yol açabilir. Bu bölümde, swap alanının tanımını, amacını, farklı türlerini ve avantajları ile dezavantajlarını detaylıca ele alacağız.
Swap alanının varlığı, sistemin bellek kaynaklarını daha esnek bir şekilde yönetmesine olanak tanır. Ancak, bu esneklik genellikle bir maliyetle gelir: disk I/O’nun RAM I/O’suna göre çok daha yavaş olması.
Swap Alanının Tanımı ve Amacı
Swap alanı, işletim sisteminin fiziksel bellekte yer kalmadığında veya belirli bellek sayfalarını RAM’den boşaltmak istediğinde kullandığı bir bölümdür veya dosyadır. Temel amacı şunlardır:
- Bellek Taşması (Memory Overflow) Yönetimi: RAM dolduğunda, işletim sistemi daha az aktif olan bellek sayfalarını swap alanına taşır. Bu, yeni uygulamaların başlatılmasına veya mevcut uygulamaların çalışmaya devam etmesine olanak tanır.
- Uykudan Devam Etme (Hibernation): Sistem uyku moduna girdiğinde, tüm RAM içeriği swap alanına yazılabilir, böylece sistem kapatıldığında bile mevcut oturumun durumu korunur.
- Güvenlik ve İzolasyon: Bazı durumlarda, çekirdek belirli hassas verileri RAM’den diskteki şifreli bir swap alanına taşıyarak daha fazla güvenlik sağlamak isteyebilir.
Swap Partition ve Swap File
Linux sistemlerinde iki ana swap alanı türü bulunur:
- Swap Partition (Takas Bölümü): Bu, disk üzerinde tamamen swap için ayrılmış özel bir bölümdür. Geleneksel ve genellikle daha hızlı bir yöntemdir çünkü çekirdek diskin belirli bir bölümüne doğrudan erişebilir. Kurulum sırasında oluşturulur ve
fstabdosyası ile sisteme tanıtılır. - Swap File (Takas Dosyası): Bu, dosya sistemi üzerinde oluşturulmuş normal bir dosyadır. Esneklik açısından daha avantajlıdır, çünkü sistem çalışırken boyutu kolayca değiştirilebilir veya yeni bir swap dosyası eklenebilir. Özellikle disk bölümleme yapısını değiştirmeden swap alanı eklemek istendiğinde kullanışlıdır. Performans açısından, bir swap bölümü kadar hızlı olmayabilir, çünkü dosya sistemi katmanının ek yükü vardır.
Swap Alanının Avantajları
- Sistem Kararlılığı: Bellek yetersizliği durumunda sistemin çökmesini engeller, daha fazla uygulamanın çalışmasına izin verir.
- Kaynak Esnekliği: Fiziksel bellek sınırlarını aşarak daha büyük iş yüklerinin veya daha fazla uygulamanın barındırılmasını sağlar.
- Hibernation Desteği: Dizüstü bilgisayarlar gibi cihazlarda, sistemin mevcut durumunu kaydederek uykudan hızlıca devam etme imkanı sunar.
Swap Alanının Dezavantajları
- Performans Düşüşü: Disk I/O, RAM I/O’suna göre çok yavaş olduğu için, sık sık swap kullanımı sistemin genel performansını dramatik şekilde düşürür.
- Disk Aşınması: Özellikle SSD’lerde sık swap kullanımı, yazma ömrünü kısaltabilir.
- Gecikme (Latency): Bir sayfa swap’ten geri yüklendiğinde, uygulama bu süre boyunca beklemek zorunda kalır, bu da kullanıcı deneyimini olumsuz etkiler.
Gizli Swap Tuzağı Nedir?
Linux sistemlerde bellek yönetimi genellikle yeterli RAM varken bile performans sorunlarına yol açabilir. Bu sorunların başında “Gizli Swap Tuzağı” gelir. Bu tuzak, sistemin fiziksel belleği dolmamış olmasına rağmen, aktif bir şekilde swap alanını kullanmaya başlaması durumunu ifade eder. Sonuç olarak, sistem beklenmedik bir şekilde yavaşlar, disk I/O artar ve kullanıcı deneyimi olumsuz etkilenir.
Bu durum, özellikle yüksek performans beklenen sunucularda veya geliştirme ortamlarında kafa karıştırıcı olabilir. free -h çıktısında bol miktarda “available” bellek görünürken, sistemin neden bu kadar yavaş çalıştığını anlamak güçleşir.
Yeterli RAM Varken Bile Sistemin Neden Swap Kullanmaya Başladığı
Gizli Swap Tuzağı’nın temel nedeni, Linux çekirdeğinin bellek yönetim stratejileri ve özellikle swappiness parametresinin varsayılan değeri ile ilgilidir. Çekirdek, her zaman RAM’i tamamen doldurmayı beklemez. Bunun yerine, gelecekteki olası bellek taleplerini tahmin etmeye ve dosya önbelleği (page cache) için yer açmaya çalışır.
İşte bu duruma yol açan başlıca faktörler:
swappinessParametresi: Bu parametre, çekirdeğin anonim bellek (uygulama verileri) sayfalarını mı yoksa dosya önbelleği sayfalarını mı RAM’de tutma eğiliminde olduğunu belirler. Yüksek birswappinessdeğeri (varsayılan 60), çekirdeği dosya önbelleği için yer açmak amacıyla uygulama verilerini swap’e taşımaya daha yatkın hale getirir.- Page Cache ve Bellek Basıncı: Linux çekirdeği, disk I/O’yu hızlandırmak için okunan veya yazılan dosyaları RAM’de önbellek olarak tutar (page cache). Bu önbellek, sistemin “boş” belleğini tüketir ancak hız için gereklidir. Çekirdek, bu önbelleği büyütmek istediğinde veya bellek basıncı algıladığında, uygulama verilerini swap’e taşıyarak page cache için yer açabilir.
- Least Recently Used (LRU) Algoritması: Çekirdek, hangi bellek sayfalarının swap’e taşınacağına karar verirken genellikle LRU benzeri algoritmalar kullanır. Ancak, bir sayfanın “az kullanılmış” olması, onun tamamen önemsiz olduğu anlamına gelmez. Özellikle uzun süre çalışan ancak anlık olarak aktif olmayan servislerin bellek sayfaları, aktif olarak kullanılan ancak diskten gelen yeni bir sayfa (page cache) nedeniyle swap’e taşınabilir.
Gizli Swap Tuzağı’nın İşaretleri
Bir sistemde gizli swap tuzağının varlığını gösteren bazı belirtiler şunlardır:
- Yüksek Disk I/O:
iostat,iotopgibi araçlarla disk kullanımına bakıldığında, beklenmedik derecede yüksek I/O değerleri görülmesi, özellikle swap bölümünde veya dosyasında yoğun aktivite. - Artan Gecikme (Latency): Uygulamaların veya sistem komutlarının yanıt verme süresinde belirgin bir artış.
vmstatÇıktısında YükseksivesoDeğerleri:si(swap in) veso(swap out) sütunları, sırasıyla swap’ten RAM’e ve RAM’den swap’e taşınan bellek miktarını gösterir. Bu değerlerin sürekli olarak yüksek olması, aktif swap kullanımına işaret eder.free -hÇıktısında DüşükavailableAma Yüksekused swap: Sistemin hala kullanılabilir belleği olduğunu gösterse de, swap alanının önemli bir kısmının kullanılıyor olması.
Bu belirtileri gözlemlediğinizde, sisteminizin “Gizli Swap Tuzağı”na düşmüş olma ihtimali yüksektir ve detaylı bir inceleme yapılması gerekmektedir.
Swappiness Parametresi ve Etkileri
Linux çekirdeğinin bellek yönetiminde kritik bir rol oynayan swappiness parametresi, sistemin ne kadar agresif bir şekilde swap alanını kullanacağını belirler. Bu parametrenin doğru anlaşılması ve yapılandırılması, “Gizli Swap Tuzağı”ndan kaçınmak ve sistem performansını optimize etmek için hayati öneme sahiptir.
swappiness değeri, bir denge noktasıdır: yüksek bir değer, çekirdeğin daha fazla uygulama verisini swap’e taşıyarak dosya önbelleği için daha fazla yer açmasına neden olurken, düşük bir değer çekirdeği uygulama verilerini RAM’de tutmaya zorlar ve dosya önbelleği daha az yer kaplayabilir.
swappiness Nedir? (/proc/sys/vm/swappiness)
swappiness, Linux çekirdeğinin diskteki dosya önbelleğini (page cache) boşaltmak yerine, çalışan süreçlerin anonim bellek sayfalarını (uygulama verileri, yığın, stack vb.) diske (swap alanına) ne kadar istekli bir şekilde taşıyacağını belirleyen bir parametredir.
Bu değer 0 ile 100 arasında bir tamsayıdır:
swappiness = 0(Linux kernel 5.8 ve sonrası için 1): Çekirdek, mümkün olduğunca az swap kullanmaya çalışır. Yalnızca OOM (Out Of Memory) durumuna çok yakın olduğunda veya belirli bellek bölgelerine ihtiyaç duyulduğunda swap yapar. Uygulama verilerini RAM’de tutmaya öncelik verir.swappiness = 100: Çekirdek, çok agresif bir şekilde swap kullanır. Uygulama verilerini hızla swap’e taşıyarak dosya önbelleği için mümkün olduğunca fazla RAM ayırmaya çalışır.
Varsayılan swappiness değeri genellikle 60’tır. Bu, çekirdeğin RAM’in %40’ı dolduğunda swap yapmaya başlaması gerektiği anlamına gelmez, daha çok hangi tür sayfaların swap’e taşınacağı konusunda bir “eğilim” göstergesidir. Daha kesin ifadeyle, çekirdeğin page cache’i mi yoksa anonim belleği mi RAM’de tutmayı tercih edeceğini belirler.
Yüksek swappiness Senaryoları ve Etkileri
Varsayılan swappiness = 60 değeri, çoğu masaüstü sistemi için kabul edilebilir olabilir, ancak sunucular ve bellek yoğun uygulamalar için ciddi performans sorunlarına yol açabilir.
Yüksek swappiness (örn. 60-100) durumunda:
- Çekirdek, dosya önbelleğini büyütmek için daha fazla eğilim gösterir.
- Uygulama verileri (anonim bellek sayfaları) daha sık swap’e taşınır.
- Bu durum, özellikle uygulamaların aktif olarak kullandığı verilere ihtiyaç duyulduğunda, disk I/O’yu artırır ve gecikmeye neden olur.
- Veritabanları, sanal makineler veya büyük veri işleme araçları gibi uygulamalar için performans düşüşleri gözlemlenir.
Örnek: Bir veritabanı sunucusu düşünün. Veritabanı, sık erişilen verilerini RAM’de tutarak hızlı yanıt vermeyi hedefler. Eğer swappiness yüksekse, çekirdek veritabanının bellek sayfalarını swap’e taşıyıp, bunun yerine daha az kritik olan dosya sisteminin önbelleğini (örneğin, log dosyaları) RAM’de tutmayı tercih edebilir. Bu da veritabanı sorgularının yavaşlamasına yol açar.
Düşük swappiness Senaryoları ve Etkileri
Düşük swappiness değeri (örn. 1-10), çekirdeği uygulama verilerini RAM’de tutmaya daha fazla öncelik vermeye teşvik eder.
Düşük swappiness (örn. 0-10) durumunda:
- Çekirdek, anonim bellek sayfalarını mümkün olduğunca RAM’de tutar.
- Swap kullanımı minimuma iner.
- Bu durum, uygulamaların daha hızlı yanıt vermesini sağlar çünkü verileri RAM’den okunur.
- Ancak, dosya önbelleği için daha az yer kalabilir. Çok sayıda küçük dosya erişimi olan sistemlerde bu durum, dosya I/O performansını bir miktar etkileyebilir.
- En büyük risk, RAM’in tamamen dolması durumunda OOM Killer’ın daha erken devreye girmesi ve uygulamaları sonlandırmasıdır.
Örnek: Bir web sunucusu düşünün. Web sunucusu, sıkça erişilen statik dosyaları (HTML, CSS, JS, resimler) page cache’te tutarak hızlı yanıt verir. Eğer swappiness çok düşükse ve sunucuda çok sayıda uygulama çalışıyorsa, bu uygulamalar RAM’i doldurabilir ve page cache için yer kalmayabilir. Bu durumda, statik dosyalara erişim yavaşlayabilir. Ancak, eğer web sunucusu dinamik içerik üretiyor ve veritabanı ile yoğun etkileşim halindeyse, düşük swappiness genellikle daha iyi performans sağlar.
Bellek Basıncı ve OOM Killer
Linux sistemlerinde bellek kaynakları sınırsız değildir. Uygulamaların bellek talepleri arttıkça, sistem “bellek basıncı” altına girer. Bu durum, çekirdeğin bellek kaynaklarını yönetmek için daha agresif kararlar almasına neden olur. En kritik sonuçlardan biri, Out Of Memory (OOM) Killer’ın devreye girmesi ve süreçleri sonlandırmasıdır.
Gizli swap tuzağı, bellek basıncının yanlış yönetilmesiyle doğrudan ilişkilidir ve OOM Killer’ın beklenmedik anlarda tetiklenmesine yol açabilir.
Bellek Basıncı Nedir?
Bellek basıncı, sistemdeki toplam kullanılabilir belleğin (hem fiziksel RAM hem de swap) uygulama taleplerini karşılamakta zorlanması durumunu ifade eder. Bu durum, aşağıdaki şekillerde kendini gösterebilir:
- Düşük Boş RAM:
free -hçıktısındafreeveavailabledeğerlerinin düşmesi. - Yüksek Swap Kullanımı:
sivesodeğerlerinin artması, aktif swap işlemlerinin gerçekleştiğini gösterir. - Artan Sayfa Hataları (Page Faults): Uygulamaların sık sık diskten bellek sayfalarını yüklemek zorunda kalması.
Çekirdek, bellek basıncını azaltmak için çeşitli stratejiler kullanır. Bunlar arasında en önemlileri, az kullanılan sayfaları swap’e taşımak (swapping) ve dosya önbelleğini temizlemektir (dropping caches). Ancak, bu stratejiler yetersiz kaldığında veya yanlış yapılandırıldığında, sistem daha ciddi sorunlarla karşılaşır.
OOM Killer’ın Rolü ve Tetiklenme Mekanizması
OOM (Out Of Memory) Killer, Linux çekirdeğinin son çare olarak kullandığı bir mekanizmadır. Amacı, sistemin tamamen donmasını veya çökmesini engellemek için bellek yetersizliği durumunda bellek tüketen süreçleri otomatik olarak sonlandırmaktır.
OOM Killer, sistem belleği kritik seviyelere düştüğünde devreye girer. Hangi sürecin sonlandırılacağına karar verirken, çekirdek her sürece bir oom_score atar. Bu skor, sürecin ne kadar bellek kullandığını, ne kadar süredir çalıştığını ve diğer faktörleri dikkate alır. En yüksek oom_score’a sahip süreç, genellikle OOM Killer tarafından sonlandırılan ilk hedeftir.
Aşırı Swapping’in OOM Killer’ı Nasıl Tetiklediği
Gizli swap tuzağının tehlikeli yönlerinden biri, aşırı swap kullanımının OOM Killer’ı tetikleyebilmesidir, hatta sistemde teorik olarak hala “boş” swap alanı varken bile. Bu paradoks şu şekilde ortaya çıkar:
- Disk I/O Sıkışıklığı: Sistem yoğun bir şekilde swap kullanmaya başladığında, disk I/O’su tavan yapar. Bu, diskten bellek sayfalarını geri okuma (swap-in) işleminin çok uzun sürmesine neden olur.
- Bellek Ayırma Taleplerinin Zaman Aşımı: Yeni bir uygulama bellek talep ettiğinde veya mevcut bir uygulama yeni bir bellek alanı istediğinde, çekirdek bu talebi karşılamak için RAM’de yer açmaya çalışır. Eğer RAM’deki kullanılabilir bellek çok düşükse ve swap-in/swap-out işlemleri disk I/O sıkışıklığı nedeniyle yavaşlarsa, bellek ayırma talepleri zaman aşımına uğrayabilir.
- Çekirdek Tarafından Algılanan Bellek Yetersizliği: Çekirdek, aslında fiziksel RAM’de yer açmak için diskteki swap alanını kullanmaya çalışırken, disk I/O’nun aşırı yavaşlaması nedeniyle bu işlemi hızlı bir şekilde gerçekleştiremez. Bu durum, çekirdek için “bellek yetersizliği” sinyali olarak algılanır, çünkü yeni bellek taleplerini karşılayamaz.
- OOM Killer’ın Tetiklenmesi: Çekirdek, diskteki swap alanında yer olsa bile, uygulamaların bellek taleplerini hızlı bir şekilde karşılayamayacağını anladığında, sistemin donmasını engellemek için OOM Killer’ı devreye sokar. Bu, “swap cehennemi” veya “thrashing” olarak bilinen durumu da beraberinde getirir.
oom_score_adj ile OOM Killer Kontrolü
Linux, her sürecin OOM Killer tarafından hedeflenme olasılığını ayarlamak için oom_score_adj parametresini sağlar. Bu değer, /proc/[PID]/oom_score_adj dosyasında bulunur ve -1000 ile 1000 arasında değişir:
- -1000: Sürecin OOM Killer tarafından asla sonlandırılmamasını sağlar (çekirdek süreçleri hariç).
- 0 (varsayılan): Normal OOM skorunu kullanır.
- 1000: Sürecin OOM Killer tarafından en yüksek öncelikle sonlandırılmasını sağlar.
Bu parametre, kritik uygulamaların (örneğin, veritabanları veya temel sistem servisleri) OOM Killer tarafından yanlışlıkla sonlandırılmasını önlemek için kullanılabilir. Ancak dikkatli kullanılmalıdır, çünkü kritik bir uygulamayı korumak, başka bir uygulamanın veya tüm sistemin çökmesine neden olabilir.
Swap Tuzağını Tespit Etme Yöntemleri
Gizli swap tuzağının farkına varmak, sistem performansını optimize etmenin ilk adımıdır. Bu bölümde, sisteminizdeki swap kullanımını ve bellek basıncını izlemek için kullanabileceğiniz çeşitli komut satırı araçlarını ve yöntemlerini inceleyeceğiz. Bu araçlar, sorunun kökenini anlamanıza ve uygun çözümleri uygulamanıza yardımcı olacaktır.
Temel Bellek İzleme Araçları
free -h
Bu komut, sistemin toplam, kullanılan ve boş fiziksel belleğini (RAM) ve swap alanını insan tarafından okunabilir birimlerle (-h, yani “human-readable”) özetler. Bir sunucuya bağlandığımda durumu anlamak için ilk baktığım yer çoğu zaman burasıdır; Swap satırındaki used değeri sıfırdan belirgin şekilde yüksekse, gizli swap tuzağının izini sürmeye buradan başlarım.
$ free -h
total used free shared buff/cache available
Mem: 15Gi 9.2Gi 512Mi 128Mi 5.6Gi 5.4Gi
Swap: 4.0Gi 1.8Gi 2.2Gi
Burada dikkat edilmesi gereken sütun, son sütundaki available değeridir: bu, sistemin swap’e başvurmadan yeni uygulamalara ayırabileceği tahmini belleği gösterir. buff/cache yüksek görünse bile bu bellek çoğunlukla geri kazanılabilir olduğundan paniğe gerek yoktur; asıl gösterge available’ın kritik seviyeye inmesi ve Swap satırındaki used değerinin sürekli tırmanmasıdır.
Sonuç
Çekirdeğin bellek yönetimi, dışarıdan bakıldığında sessizce çalışan ama sistemin kararlılığını doğrudan belirleyen görünmez bir mekanizmadır. Yıllar içinde gördüm ki en sinsi performans sorunları, RAM tükendiği için değil, sistemin fark ettirmeden swap’e kaymasıyla başlar. Bu yüzden swap’i tamamen düşman gibi görmek yerine, ne zaman ve ne kadar devreye girdiğini anlamak çok daha değerlidir. free -h gibi basit araçlarla belleği düzenli olarak izlemek, gizli swap tuzağını büyümeden yakalamanın ve sistemlerinizi öngörülebilir bir performansta tutmanın en sağlam yoludur.