Linux sunucularda bellek yönetimi, sistem performansını doğrudan etkileyen kritik bir unsurdur.
Linux sunucularda bellek yönetimi, sistem performansını doğrudan etkileyen kritik bir unsurdur. Memory overcommit ayarı, işletim sisteminin uygulamalara tahsis ettiği bellek miktarını aşmasına izin vererek kaynak kullanımını optimize eder. Bu özellik, fiziksel belleğin tamamını kullanmadan process’lere daha fazla sanal bellek tahsisine olanak tanır ve sunucu verimliliğini artırır. Özellikle yüksek yük altında çalışan kurumsal sunucularda, overcommit ayarını doğru yapılandırmak OOM (Out of Memory) killer olaylarını önler ve stabilite sağlar. Bu makalede, konuyu adım adım ele alarak pratik uygulamaları inceleyeceğiz.
Linux kernel’inde memory overcommit, /proc/sys/vm/overcommit_memory parametresiyle yönetilir. Bu parametre üç ana değere sahiptir: 0 (heuristik yaklaşım), 1 (her zaman overcommit) ve 2 (sıkı limitler). Varsayılan olarak 0 değeri kullanılır ve sistem, tahsis edilen belleğin fiziksel RAM + swap toplamını aşmayacağına dair tahminler yapar. Bu mekanizma, bellek taleplerini reddetmeden process’leri başlatır, ancak aşırı kullanımda OOM killer devreye girerek process’leri sonlandırır.
Overcommit’in avantajları arasında bellek kullanım oranını %50-80 oranında artırma potansiyeli yer alır. Örneğin, bir web sunucusu Apache veya Nginx gibi uygulamalar için ideal olup, kısa süreli bellek patlamalarını tolere eder. Dezavantajı ise, tüm process’ler aynı anda yüksek bellek talep ederse sistem çökmesidir. Kurumsal ortamlarda, bu ayarı üretim yüküne göre test etmek esastır.
Değer 0: Sistem heuristik kurallarla overcommit yapar; RSS (Resident Set Size) ve swap kullanımını dikkate alır. Küçük sunucular için uygundur. Değer 1: Her talebi kabul eder, fiziksel limitleri göz ardı eder; bellek yoğun uygulamalar (veritabanları) için risklidir. Değer 2: Tahsis toplamını RAM + swap ile sınırlar, overcommit_ratio ile oran belirlenir. Bu değer, büyük ölçekli sunucularda önerilir ve predictable davranış sağlar. Uygulamada, sysctl -a | grep overcommit komutuyla mevcut değeri kontrol edin.
vm.overcommit_ratio (varsayılan %50) ve vm.overcommit_kbytes parametreleri, değer 2 için kritik öneme sahiptir. Örneğin, 16 GB RAM’li bir sunucuda overcommit_ratio=75 yaparsanız, tahsis limiti 12 GB olur. Bu ayarlar /etc/sysctl.conf dosyasında tanımlanır ve sysctl -p ile uygulanır. Test senaryolarında, stress-ng –vm 4 –vm-bytes 1G komutuyla bellek yükü simüle ederek etkinliği doğrulayın.
Ayar yapmadan önce, mevcut bellek durumunu free -h ve cat /proc/meminfo ile inceleyin. Geçici değişiklik için sysctl vm.overcommit_memory=2 komutunu root olarak çalıştırın. Kalıcılaştırmak adına /etc/sysctl.conf dosyasına vm.overcommit_memory=2 ve vm.overcommit_ratio=70 ekleyin, ardından sysctl -p uygulayın. Bu işlem, sunucuyu yeniden başlatmadan geçerlidir ve loglarda (dmesg | grep oom) izlenebilir.
Bu adımlar, kurumsal sunucularda sıfır kesintiyle uygulanabilir. Örneğin, MySQL sunucusunda overcommit=1 ile query patlamalarını yönetebilirsiniz, ancak veritabanı boyutunu swap ile destekleyin.
Geçici ayar sysctl komutuyla anlık etki yaratır ve reboot’ta sıfırlanır; acil durumlar için idealdir. Kalıcı ayar sysctl.conf üzerinden yapılır ve dağıtım bağımsızdır (Ubuntu, CentOS). Değişiklik sonrası uptime -p ile sistemi doğrulayın. Hata durumunda, orijinal değerlere dönmek için sysctl vm.overcommit_memory=0 kullanın.
Yanlış ayar OOM’u tetikler; /var/log/messages’te “Out of memory: Kill process” logları görülür. Önlem olarak, earlyoom veya systemd-oomd gibi araçlar kurun. Ayrıca, ulimit -v ile process limitlerini belirleyin. Pratikte, staging ortamında 1-2 hafta test edin.
Sürekli izleme için Prometheus + Node Exporter veya Zabbix kullanın; vm.overcommit_memory metriğini grafiğe ekleyin. Haftalık raporlarla overcommit kullanım oranını %80 altında tutun. Optimizasyon adımı: Transparent Huge Pages (THP) devre dışı bırakın (echo never > /sys/kernel/mm/transparent_hugepage/enabled) ve swap’ı etkinleştirin. Bu kombinasyon, bellek fragmentation’ını azaltır.
Eğer yüksek trafikli bir sunucuda çalışıyorsanız, overcommit’i container’lar (Docker, Kubernetes) ile entegre edin; cgroup memory limitleri overcommit’i override eder. Düzenli bakımda, vm.swappiness=10 yaparak swap kullanımını minimize edin. Bu yaklaşımlar, kurumsal düzeyde %20-30 performans artışı sağlar.
Sonuç olarak, Linux sunucuda memory overcommit ayarını bilinçli yönetmek, kaynak verimliliğini maksimize eder ve beklenmedik kesintileri önler. Yukarıdaki adımları uygulayarak sisteminizi production-ready hale getirin; düzenli testler ve izleme ile uzun vadeli stabilite elde edin. Bu yapılandırma, ölçeklenebilirlik ihtiyaçlarınıza göre uyarlanabilir ve IT ekibinizin yükünü hafifletir.