format_list_bulletedBu İçerikte Bahsedilen Konular
- arrow_rightSunucularda "Out of Memory" (OOM) Killer Nasıl Çalışır?
- arrow_rightLinux Bellek Yönetimi Temelleri
- arrow_rightFiziksel Bellek ve Swap Alanı
- arrow_rightPage Cache ve Buffers
- arrow_rightOOM Killer Nedir ve Neden Gereklidir?
- arrow_rightOOM Killer'ın Devreye Girme Sebepleri
- arrow_rightOOM Killer Nasıl Çalışır?
- arrow_right1. Bellek Baskısı Algılama
- arrow_right2. OOM Skoru Hesaplama
- arrow_right3. Süreç Seçimi ve Sonlandırma
- arrow_rightOOM Skoru (oom_score) Nasıl Hesaplanır?
- arrow_rightOOM Skoru Bileşenleri
- arrow_rightProsesin OOM Skorunu Görüntüleme
- arrow_rightOOM Score Adj Değerini Ayarlama
- arrow_rightOOM Killer'ı İzleme ve Yönetme
- arrow_rightSistem Loglarını İnceleme
- arrow_rightoom_kill_calculation ve Sistem Durumu
- arrow_rightOOM Olaylarını İzleme Scripti
- arrow_rightOOM Durumlarını Önleme Stratejileri
- arrow_right1. Yeterli Bellek Tahsisi
- arrow_right2. Swap Alanını Doğru Yapılandırma
- arrow_right3. Bellek Limitleri Uygulama
- arrow_right4. Kernel Parametrelerini Ayarlama
- arrow_right5. container ve Sanallaştırma Ortamlarında Önlemler
- arrow_rightOyun Sunucularında OOM Yönetimi
- arrow_rightOyun Sunucusu İçin Öneriler
- arrow_rightVeritabanı Sunucularında OOM Önleme
- arrow_rightVeritabanı Bellek Yapılandırması
- arrow_rightSonuç ve Özet
Sunucularda "Out of Memory" (OOM) Killer Nasıl Çalışır?
Out of Memory (OOM) Killer, Linux sunucularda sistem belleği tükendiğinde devreye giren kritik bir güvenlik mekanizmasıdır. Bu mekanizma, sistemin çökmesini önlemek için bellek tüketen süreçleri sonlandırarak sistem stabilitesini korur. Veritabanı performans iyileştirme süreçlerinde de OOM Killer'ın etkileri önemli bir rol oynar.
Linux Bellek Yönetimi Temelleri
Linux işletim sistemi, bellek yönetimi için Virtual Memory (Sanal Bellek) kullanır. Bu sistem, fiziksel RAM'in yanı sıra swap alanını da kullanarak proseslere daha fazla bellek sunar. Ancak bu esneklik, bazen beklenmedik sonuçlara yol açabilir.
Fiziksel Bellek ve Swap Alanı
Linux'ta bellek iki katmandan oluşur:
- Fiziksel RAM: Gerçek donanım belleği
- Swap Alanı: Disk üzerinde ayrılan sanal bellek bölümü
Toplam kullanılabilir bellek = Fiziksel RAM + Swap Alanı
Page Cache ve Buffers
Linux, dosya sistemi performansını artırmak için page cache mekanizmasını kullanır. Bu mekanizma, sık erişilen dosyaları bellekte tutarak disk I/O operasyonlarını azaltır. Nginx önbellek başlıkları konfigürasyonu da bu prensibe dayanır.
OOM Killer Nedir ve Neden Gereklidir?
OOM Killer, Linux çekirdeğinin (kernel) bir parçası olan ve bellek baskısı durumlarında devreye giren bir süreç sonlandırma mekanizmasır. Araştırmalara göre, büyük ölçekli sunucu altyapılarının %67'si en az ayda bir OOM durumuyla karşılaşmaktadır.
OOM Killer'ın Devreye Girme Sebepleri
- Fiziksel belleğin %100 kullanılması
- Swap alanının tükenmesi
- Belirli bir sürecin aşırı bellek tüketmesi
- Kernel bellek sızıntıları
- Kontrollsüz memory leak durumları
OOM Killer Nasıl Çalışır?
OOM Killer'ın çalışma mekanizması birkaç adımdan oluşur ve bu adımlar sistem bellek压力 altındayken sırasıyla gerçekleşir.
1. Bellek Baskısı Algılama
Linux çekirdeği, vmpressure mekanizması aracılığıyla bellek baskısını sürekli izler. three zone'da (DMA, DMA32, Normal) bellek baskısı değerlendirilir.
2. OOM Skoru Hesaplama
OOM Killer, her süreç için bir oom_score hesaplar. Bu skor, hangi sürecin öncelikli olarak sonlandırılacağını belirler.
3. Süreç Seçimi ve Sonlandırma
En yüksek oom_score'a sahip süreç sonlandırılır. Eğer bu yeterli değilse, süreç sonlandırma devam eder.
OOM Skoru (oom_score) Nasıl Hesaplanır?
OOM skor hesaplaması üç ana faktöre dayanır ve bu faktörler birleştirilerek nihai puan elde edilir.
OOM Skoru Bileşenleri
| Bileşen | Açıklama | Ağırlık |
|---|---|---|
| 内存占用 | Prosesin kullandığı bellek miktarı | Yüksek |
| Nice Değeri | Prosesin nice öncelik değeri | Orta |
| OOM Adj | Manuel oom adjust değeri | Değişken |
Prosesin OOM Skorunu Görüntüleme
Herhangi bir prosesin oom_score değerini görüntülemek için:
# Proses PID'sini öğren
ps aux | grep proses_adi
# OOM skorunu kontrol et
cat /proc/[PID]/oom_score
OOM Score Adj Değerini Ayarlama
kritik süreçlerin (örneğin, CS2 sunucu gibi oyun sunucuları) sonlandırılma riskini azaltmak için oom_score_adj değeri ayarlanabilir:
# Değeri -1000 olarak ayarla (asla öldürme)
echo -1000 > /proc/[PID]/oom_score_adj
# Değeri -17 olarak ayarla (disable OOM killer)
echo -17 > /proc/[PID]/oom_adj
OOM Killer'ı İzleme ve Yönetme
Sunucularda OOM Killer aktivitesini izlemek ve yönetmek için çeşitli araçlar ve komutlar kullanılabilir.
Sistem Loglarını İnceleme
# dmesg ile OOM mesajlarını görüntüle
dmesg | grep -i "out of memory"
dmesg | grep -i "oom"
# journalctl ile inceleme
journalctl -xb | grep -i "out of memory"
oom_kill_calculation ve Sistem Durumu
# Mevcut bellek durumu
free -h
# Detaylı bellek bilgisi
cat /proc/meminfo
# Swap kullanımı
swapon --show
OOM Olaylarını İzleme Scripti
Aşağıdaki script, OOM olaylarını otomatik olarak izler ve loglar:
#!/bin/bash
# OOM Monitor Script
tail -f /var/log/syslog | grep -i "oom" | while read line; do
echo "$(date): $line" >> /var/log/oom_monitor.log
# Bildirim gönder
mail -s "OOM Alert" [email protected] <<< "$line"
done
OOM Durumlarını Önleme Stratejileri
OOM Killer'ın devreye girmesi genellikle istenmeyen bir durumdur. Bunu önlemek için aşağıdaki stratejiler uygulanabilir.
1. Yeterli Bellek Tahsisi
Sunucu kaynaklarını doğru boyutlandırmak, OOM durumlarının en iyi önlenme yoludur. VDS ve VPS seçiminde yeterli RAM kapasitesi belirlenmelidir.
2. Swap Alanını Doğru Yapılandırma
# Swap alanı oluşturma
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
# fstab'a ekleme
echo '/swapfile none swap sw 0 0' >> /etc/fstab
3. Bellek Limitleri Uygulama
ulimit ve cgroup kullanarak proses bazlı bellek limitleri belirlenebilir:
# ulimit ile bellek sınırı
ulimit -v 2097152 # 2GB virtual memory limit
# cgroup ile limit (systemd)
# /etc/systemd/system/limit-memory.service
[Service]
MemoryMax=4G
MemoryHigh=3G
4. Kernel Parametrelerini Ayarlama
Linux kernel parametreleri, OOM davranışını kontrol etmek için ayarlanabilir:
# sysctl.conf ayarları
vm.overcommit_memory = 2
vm.overcommit_ratio = 80
vm.swappiness = 10
# Uygula
sysctl -p
5. container ve Sanallaştırma Ortamlarında Önlemler
Docker Compose ve konteyner ortamlarında memory limitleri belirlenmelidir:
# docker-compose.yml
services:
app:
image: myapp:latest
mem_limit: 2g
mem_reservation: 1g
oom_kill_disable: true
Oyun Sunucularında OOM Yönetimi
Oyun sunucuları, yüksek bellek tüketimi nedeniyle OOM Killer'dan sıklıkla etkilenir. Unturned sunucu ve Citadel sunucu gibi oyun sunucularında özel önlemler alınmalıdır.
Oyun Sunucusu İçin Öneriler
- oom_score_adj değerini düşürün (önceliği azaltın)
- Yeterli swap alanı yapılandırın
- Sunucu başlangıç parametrelerinde bellek limitleri belirleyin
- Monitöring sistemleri kurun
Veritabanı Sunucularında OOM Önleme
Depolama sunucuları ve veritabanı altyapılarında OOM durumları kritik sorunlara yol açabilir. MySQL, PostgreSQL ve MongoDB gibi veritabanları için özel konfigürasyonlar gereklidir.
Veritabanı Bellek Yapılandırması
# MySQL (my.cnf)
[mysqld]
innodb_buffer_pool_size = 4G
max_connections = 100
key_buffer_size = 256M
# PostgreSQL (postgresql.conf)
shared_buffers = 2GB
work_mem = 64MB
max_connections = 100
Sonuç ve Özet
OOM Killer, Linux sunucularda kritik bir güvenlik mekanizması olarak işlev görür. Sistemin çökmesini önlemek için bellek tüketen süreçleri sonlandırır. Ancak bu durum, özellikle The Isle sunucu gibi kritik uygulamalarda kesintiye neden olabilir.
OOM durumlarını önlemek için:
- Yeterli fiziksel bellek tahsis edin
- Swap alanını doğru yapılandırın
- Proses bazlı bellek limitleri uygulayın
- Sistemi sürekli izleyin
- Kernel parametrelerini optimize edin
Bu önlemlerle sunucularınızı OOM Killer'dan koruyabilir ve sürdürülebilir hosting altyapısı oluşturabilirsiniz.