VDS (Sanal Özel Sunucu) üzerinde çalışan uygulamalar, özellikle trafiği yüksek saatlerde aniden kapanıyor, hata vermeden sistem resetleniyor ya da kritik süreçler birdenbire öldürülüyorsa, muhtemelen Linux'un OOM Killer mekanizmasıyla karşı karşıyasınız. Bu sistem, RAM tükenmek üzere olduğunda işletim sistemi kilitlenmesini önlemek için çalışan işleri rastgele sonlandırır. Sonuç: veri tabanı bağlantıları kopu oluyor, web sitesi tamamen erişilemez hale geliyor ve kullanıcılar hatayla karşılaşıyor.

OOM Killer Nedir ve Nasıl Tetiklenir?

Linux sistemlerde fiziksel RAM ve swap alanı tamamen dolduğunda, çekirdek (kernel) hangi işlemin sonlandırılacağını belirlemek için OOM Killer mekanizmasını devreye sokar. Bu karar otomatik değildir; sistem her sürecin bellek kullanımını ve sistem için önemini analiz ederek bir oom_score hesaplar. Yüksek skor alan işlemler ilk hedef olur.

Özellikle şu durumlarda OOM Killer tetiklenir:

  • Web uygulaması bellek sızıntısı içeriyorsa
  • Veritabanı sorguları çok fazla tablo taraması yapıyorsa
  • Yedekleme işlemleri sırasında RAM geçici olarak doluyorsa
  • Çok sayıda PHP-FPM worker süreci açıksa

OOM Killer Aktivitesini Tespit Etmek

İlk adım, OOM Killer'ın gerçekten çalışıp çalışmadığını doğrulamaktır. Sistem loglarını kontrol edin:

sudo dmesg | grep -i "oom\|killed process"

Ya da /var/log/syslog dosyasında arayabilirsiniz:

grep "Out of memory" /var/log/syslog

OOM Killer aktifse, çıktıda şuna benzer satırlar göreceksiniz: [12345] some_process was killed by OOM killer. Bu loglar hangi işlemin ve kaç saatinde kapandığını gösterir.

Swap Alanını Doğru Yapılandırmak

Çoğu VDS'de swap alanı hiç açılmamış ya da çok küçük ayarlanmıştır. Swap, fiziksel RAM dolduğunda diskin bir bölümünü RAM gibi kullanarak sisteme biraz zaman kazandırır. Mevcut swap'ı kontrol edin:

free -h

Swap alanı yoksa ya da 1GB'dan azsa, hemen bir swap dosyası oluşturun:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

Kalıcı hale getirmek için /etc/fstab dosyasına ekleyin. Swap, OOM Killer'ı tamamen engellemiyor ama kritik uygulamaları kapanmadan önce diske yazarak sistem çökmesini geciktirir.

Bellek Tüketimini Sınırlamak

PHP-FPM kullanıyorsanız, her worker işlemin maksimum RAM kullanımını sınırlayın. /etc/php/8.2/fpm/pool.d/www.conf dosyasında şu parametre ekleyin:

php_admin_value[memory_limit] = 128M

Toplam FPM worker sayısını da kontrol edin. İdeal formül: max_children = (Toplam RAM - Sistem İhtiyacı) / (Bir Worker'ın Ortalama RAM Kullanımı)

Örneğin 4GB RAM'li VDS'de sistem için 500MB ayrılıp, her worker 50MB kullanıyorsa, max_children maksimum 70 olmalıdır.

MySQL/MariaDB Memory Pool Ayarları

Veritabanı da bellek tüketiminin önemli bir bölümüdür. /etc/mysql/mysql.conf.d/mysqld.cnf dosyasında şu parametreleri makul değerlere ayarlayın:

innodb_buffer_pool_size = 1G (total RAM'in %50'sinden fazla olmasın)
max_connections = 100 (varsayılan 151, gereksiz yüksektir)
query_cache_size = 0 (MySQL 8.0'da kaldırıldı, ama eski versiyonlarda kapalı tutun)

Proaktif Monitoring Kurmak

OOM Killer saldıktan sonra tepki vermek, olay sonrasıdır. Bunun yerine bellek kullanımını sürekli izleyin. htop veya glances gibi araçlarla anlık görebilir, ya da Nagios/Zabbix gibi monitorlama sistemleriyle uyarı kuralları ayarlayabilirsiniz:

watch -n 1 'free -h'

Bellek %85'i geçince, otomatik olarak eski logları silen, cache temizleyen ya da uygulamaları yeniden başlatan basit bir cron script yazabilirsiniz.

Sonuç

VDS'de OOM Killer sorununun kökü genellikle planlamadan kaynaklanır. Swap alanı yokluğu, aşırı worker sayısı ve sıkı sıkıya ayarlanmış bellek limitleri sistemi çıkmaza sokabilir. Doğru swap boyutu, uygun resource limitleri ve proaktif monitoring, bu tür beklenmedik kapanışları önemli ölçüde azaltır. Eğer VDS'niz sık sık OOM sorunuyla karşılaşıyorsa, Bogahost'un yüksek RAM'li sunucu paketlerine yükseltmeyi ya da paylaşımlı hosting yerine daha esnek bir VDS çözümünü değerlendirmeyi düşünebilirsiniz.