Linux Out of Memory (OOM Killer) Hatası Nasıl Çözülür

Son gözden geçirme: Eylül 2026 · Ubuntu 24.04 ve Linux çekirdeği resmî dokümanına göre

Hızlı çözüm

Out of memory: Killed process 1234 (mysqld) — Linux out of memory durumunda RAM ve swap tükenince çekirdeğin OOM killer’ı en çok bellek tutan süreci sonlandırır; site aniden kapanır, veritabanı “kendiliğinden” durur. Çözüm önce hangi sürecin öldürüldüğünü bulmak, sonra o servisin bellek ayarını küçültmektir.

  1. sudo dmesg -T | grep -iE "out of memory|killed process" ile olayı ve süreci bulun.
  2. free -h ve ps aux --sort=-%mem | head ile belleği kimin kullandığını görün.
  3. Swap yoksa ekleyin; PHP-FPM ve MySQL bellek ayarlarını RAM’e göre düşürün.
  4. Ayarlara rağmen boş bellek kalmıyorsa RAM’i yükseltin.
Panel Yok — VPS/VDS yönetimsizdir; teşhis sunucunuzda SSH ile yapılır
Sistem Ubuntu 22.04/24.04, Debian 12, AlmaLinux 8/9, Rocky 9
Yetki root ya da sudo yetkili kullanıcı
Narhost ürünü VPS Sunucu, VDS Sunucu

Başlamadan önce

  • Servisin durduğu saati not edin; çekirdek günlüğünde o saate bakacaksınız.
  • Değiştireceğiniz yapılandırma dosyalarının (PHP-FPM havuzu, MySQL) yedeğini alın.
  • Sunucu yanıt vermiyorsa SSH yerine tarayıcı terminali ya da konsoldan bağlanın.

Linux Out of Memory Neden Olur

Linux, süreçlere fiziksel bellekten fazlasını vaat edebilir (overcommit). Süreçler bu vaadi aynı anda kullanmaya kalkınca ve swap da dolunca çekirdek sistemi ayakta tutmak için bir süreci seçip öldürür. Seçim her sürecin bellek kullanımından hesaplanan oom_score değerine göre yapılır; genellikle en büyük süreç, yani MySQL/MariaDB, PHP-FPM ya da Java uygulaması gider. Ayarların tamamı çekirdeğin vm dokümanında anlatılır.

Tipik tablo: gece yedek betiği ya da bot trafiği sırasında PHP-FPM süreç sayısı artar, her biri yüzlerce MB tutar, veritabanı arabelleği de RAM’in büyük kısmını ayırmıştır. Swap’ı olmayan küçük bir VPS’te bu birkaç saniyede OOM ile biter.

Adım Adım Teşhis ve Çözüm

1. Hangi süreç öldürüldü

  1. Çekirdek günlüğünü tarayın:
    sudo dmesg -T | grep -iE "out of memory|killed process"
    sudo journalctl -k --since "2 days ago" | grep -i "killed process"

    Beklenen sonuç: Out of memory: Killed process 1234 (mysqld) total-vm:...kB, anon-rss:...kB biçiminde bir satır. Parantez içi süreç adı, anon-rss ise öldürüldüğü andaki gerçek bellek kullanımıdır.

  2. Sunucu yeniden başladıysa önceki açılışa bakın:
    sudo journalctl -k -b -1 | grep -i "out of memory"

    Beklenen sonuç: kalıcı günlük açıksa bir önceki açılışın OOM satırları; ayrıntılı okuma için log dosyaları kartına bakın.

2. Belleği kim kullanıyor

  1. Genel durumu ve en büyük süreçleri görün:
    free -h
    ps aux --sort=-%mem | head -n 10

    Beklenen sonuç: free çıktısında available sütunu gerçekten kullanılabilir belleği, Swap satırı swap alanını gösterir. 0B ise swap yoktur. Canlı izleme için top ve htop kullanın.

3. Belleği sınırlayın

  1. Swap ekleyin. Swap RAM’in yerini tutmaz ama ani zirvede süreçlerin öldürülmesini geciktirir; adımlar swap alanı kartında.
  2. PHP-FPM süreç sayısını RAM’e göre ayarlayın. Ubuntu 24.04’te /etc/php/8.3/fpm/pool.d/www.conf dosyasındaki pm.max_children değeri, PHP’ye ayırdığınız belleğin bir sürecin ortalama boyutuna bölümünü geçmemelidir:
    ps -C php-fpm8.3 -o rss= | awk '{s+=$1; n++} END {print s/n/1024 " MB"}'

    Beklenen sonuç: süreç başına ortalama MB. Örneğin PHP’ye 2 GB ayırdıysanız ve süreç 80 MB ise pm.max_children = 25 üst sınırdır.

  3. Veritabanı arabelleğini küçültün.innodb_buffer_pool_size değeri, web sunucusu da aynı makinedeyse toplam RAM’in yarısını geçmesin; bağlantı sayısı da bellekle birlikte hesaplanır.
  4. Kritik servisi koruyun (isteğe bağlı).sudo systemctl edit mariadb ile açılan dosyaya yazın:
    [Service]
    OOMScoreAdjust=-500

    Beklenen sonuç: sudo systemctl restart mariadb sonrası çekirdek önce başka süreçleri seçer. Bu sorunu çözmez, yalnız kurbanı değiştirir.

Linux out of memory teşhis şeması — çekirdek günlüğünü okuma, bellek kullanımını görme, servis sınırlarını ayarlama ve RAM kararı
Günlükten kurbanı bulun, belleği kimin tuttuğunu görün, sınırları RAM'e göre çizin.

Doğrulama

Sonuç

Ayarlardan sonra yoğun saatlerde free -h çıktısında available değeri toplam RAM’in belirgin bir kısmı olarak kalıyor ve dmesg -T yeni bir Killed process satırı göstermiyorsa sorun çözülmüştür. Birkaç gün boyunca aynı kontrolü tekrarlayın.

Hâlâ Çözülmediyse

  • Swap sürekli dolu, sunucu yavaş.vmstat 1 çıktısında si/so sütunları sürekli sıfırdan büyükse RAM gerçekten yetmiyordur; ayar değil kapasite sorunudur.
  • Tek bir süreç durmadan büyüyor. Uygulamada bellek sızıntısı olabilir; servisi yeniden başlatmak geçici çözümdür, kalıcı çözüm uygulama tarafındadır.
  • Ne kadar RAM gerektiğini bilmiyorsunuz.VPS için ne kadar RAM gerekir yazısındaki hesapla paketinizi karşılaştırın.

Narhost desteği

Talebe şunları ekleyin: sunucunuzun IP adresi, dmesg çıktısındaki OOM satırı, free -h çıktısı ve olayın saati. Sunucu içi ayarlar sizin yönetiminizdedir; paket yükseltme için de talep açabilirsiniz.

Destek talebi aç

Sıkça sorulan sorular

Linux out of memory olayını önceden fark edebilir miyim?

Evet. available değerini ve swap kullanımını düzenli izleyin; bellek toplamın küçük bir kısmına düştüğünde uyarı veren basit bir izleme betiği ya da araç kurmak, OOM’dan önce müdahale etme şansı verir.

OOM killer’ı kapatmak mantıklı mı?

Hayır. Kapatıldığında bellek bittiğinde sunucu tamamen kilitlenir ya da çekirdek paniğe düşer. Doğru yol süreçlerin bellek sınırını ayarlamaktır.

Swap eklemek RAM yükseltmenin yerini tutar mı?

Tutmaz. Swap diskte olduğu için RAM’den çok yavaştır; kısa zirveleri karşılar, sürekli ihtiyaçta sunucuyu yavaşlatır.

Bu makale sorununuzu çözdü mü?

Çözemediniz mi?

Teknik ekibimiz sunucu tarafındaki ayarları sizin için kontrol edebilir. Destek talebinizde alan adınızı ve aldığınız hata metnini paylaşmanız süreci hızlandırır.

Etiketler: bellek

İlgili çözümler