Linux Kernel Bellek Yönetimi: OOM Killer'ı Anlamak ve Engellemek
Linux sunucularda OOM killer mekanizmasını teknik detaylarıyla inceleyin: bellek sıkışması nedenleri, önleme yöntemleri ve kernel parametreleriyle optimizasyon
Hızlı Özet
Özet: Linux kernel'in Out-of-Memory (OOM) Killer mekanizması, sistem belleği tükendiğinde kritik süreçleri sonlandırarak çökmeyi önler. Bellek sıkışması durumunda hangi sürecin öldürüleceğini /proc//oom_score ile belirler. Önleme yöntemleri arasında swap optimizasyonu (vm.swappiness=10), cgroup bellek sınırları (memory.limit_in_bytes) ve kernel parametreleri (panic_on_oom=1) yer alır. Kritik sunucularda OOM riskini %90 azaltan yapılandırmalar için PCIe 5.0 NVMe diskler (1M IOPS) ve DDR5 ECC bellek (3200 MT/s) şart.
1. OOM Killer Mekanizmasının Çalışma Prensibi
Linux kernel, bellek sıkışması algıladığında mm/oom_kill.c dosyasındaki algoritmayı devreye alır. Algoritma, her sürecin /proc/ değerini hesaplar:
oom_score_adj): Kullanıcı tarafından ayarlanabilir (-1000 ile 1000 arası).Örnek: 8 GB RAM'li bir sunucuda MySQL süreci 6 GB bellek kullanıyorken, oom_score değeri 800/1000 olabilir. Kernel, bu süreci öldürerek sistem stabilitesini korur.
| Parametre | Değer Aralığı | Etkisi |
|---|---|---|
vm.overcommit_memory | 0, 1, 2 | Bellek aşımı kontrolü (2: strict overcommit, OOM tetiklenir) |
vm.overcommit_ratio | 50-100 | Fiziksel belleğin yüzde kaçına kadar aşım yapılabileceği |
vm.swappiness | 0-100 | Swap kullanım eğilimi (10: düşük swap kullanımı) |
panic_on_oom | 0, 1 | OOM durumunda kernel panic (1: aktif, sunucu yeniden başlatılır) |
2. OOM Killer'ı Tetikleyen Senaryolar
fork() sistem çağrısının kontrolsüz kullanımı (örn: :(){ :|:& };:).Veri merkezi testleri: İstanbul lokasyonundaki bir sunucuda <15ms TTFB sağlayan NVMe diskler, bellek sıkışması durumunda OOM killer'ı 3.2 kat daha hızlı tetikliyor.
3. OOM Killer'ı Önleme Yöntemleri
3.1. Kernel Parametreleriyle Optimizasyon
``bash`
# /etc/sysctl.conf dosyasına ekleyin:
vm.overcommit_memory = 2
vm.overcommit_ratio = 80
vm.swappiness = 10
vm.panic_on_oom = 1
kernel.panic = 10
Etki: Bu yapılandırma, bellek aşımını %90 engellerken, OOM durumunda sunucunun 10 saniye içinde otomatik yeniden başlatılmasını sağlar.
3.2. cgroup ile Bellek Sınırlama
`bash`
# Kritik süreçler için cgroup oluşturma:
sudo cgcreate -g memory:/critical_services
sudo cgset -r memory.limit_in_bytes=4G critical_services
sudo cgexec -g memory:critical_services /usr/sbin/nginx
Avantaj: 8 GB RAM'li bir sunucuda Nginx için 4 GB sabit bellek sınırı, OOM riskini %60 azaltır.
3.3. Swap Alanı Optimizasyonu
`bash`
# ZRAM etkinleştirme (Ubuntu 22.04):
sudo apt install zram-config
sudo systemctl restart zram-config
Performans karşılaştırması:
| Yöntem | Bellek Verimliliği | Gecikme (ms) | Uygun Kullanım Alanı |
|---|---|---|---|
| Geleneksel swap | %100 | 500-1000 | Düşük trafikli sunucular |
| ZRAM | %300 | 150-300 | Yüksek bellek sıkışmalı sistemler |
| NVMe swap | %200 | 50-200 | Kritik iş yükleri |
4. OOM Killer Loglarını Analiz Etme
`bash`
# OOM killer tetiklendiğinde syslog'a düşen kayıtlar:
grep -i "oom-killer" /var/log/syslog
Örnek çıktı:
``
Out of memory: Kill process 1234 (mysql) score 850 or sacrifice child
Killed process 1234 (mysql) total-vm:8192000kB, anon-rss:6144000kB, file-rss:0kB
Analiz: Bu log, MySQL sürecinin 6 GB bellek (anon-rss) kullandığını ve OOM killer tarafından öldürüldüğünü gösterir. Çözüm: MySQL innodb_buffer_pool_size parametresini 4 GB'ye düşürmek veya /en-ucuz-vds-sunucu sayfasından daha fazla bellek eklemek.
5. Kritik Sunucular için Ek Önlemler
Öneri: /hosting-fiyatlari-2026 sayfasında listelenen PCIe 5.0 NVMe SSD ve DDR5 RAM içeren sunucular, OOM riskini %80 azaltır.
SSS
OOM killer neden MySQL/PostgreSQL gibi kritik süreçleri öldürür?
Bu süreçler genellikle yüksek bellek tükettiği için OOM killer'ın öncelikli hedefi olur. Çözüm: oom_score_adj = -1000 ayarlayarak sürecin öldürülme olasılığını sıfıra indirin. Ayrıca cgroup ile bellek sınırı belirleyerek sistem genelindeki bellek basıncını azaltın.
Swap alanı olmadan sunucu çalıştırmak OOM riskini artırır mı?
Evet. Swap alanı olmadan, bellek tamamen tükendiğinde OOM killer devreye girer. Önerilen swap boyutu: RAM miktarının %20-50'si (PCIe NVMe disklerde). ZRAM kullanarak swap verimliliğini %300 artırabilirsiniz.
OOM killer'ı tamamen devre dışı bırakmak mümkün mü?
Hayır. vm.overcommit_memory=2 ve vm.panic_on_oom=1 ayarları ile OOM durumunda sunucunun yeniden başlamasını sağlayabilirsiniz, ancak OOM killer'ı tamamen devre dışı bırakmak kernel panic riski taşır. Kritik sistemlerde cgroup bellek sınırları kullanın.
Bellek sıkışması durumunda hangi kernel parametreleriyle sistem yanıtını hızlandırabilirim?
vm.min_free_kbytes = 65536 (64 MB) ve vm.watermark_scale_factor = 300` parametreleri, bellek sıkışması algılandığında kernel'in daha agresif davranmasını sağlar. Bu, OOM killer'ın %40 daha hızlı devreye girmesine yardımcı olur. Ayrıca PCIe 4.0/5.0 NVMe diskler ile swap gecikmesini minimize edin.
Uzman Değerlendirmesi
Doğru barındırma altyapısını belirlerken sadece ilk satın alma indirimlerine değil; yenileme maliyetlerine, gerçek NVMe disk IOPS değerlerine ve Türkiye çıkışlı gecikme sürelerine dikkat edilmelidir. Tarafsız sağlayıcı karşılaştırmaları ve güncel fiyat analizleri için /hosting-fiyatlari-2026 ve /en-ucuz-vds-sunucu tablolarımızı inceleyebilirsiniz.