Yüksek CPU ve RAM Kullanımı Teşhisi
Sunucuda yüksek CPU ve RAM kullanımını teşhis etmek için top, htop, ps komutları, OOM killer mekanizması, process analizi ve kaynak optimizasyonu rehberi.
İçindekiler
Giriş
Sunucunuzda yüksek CPU veya RAM kullanımı, performans düşüklüğüne, servis kesintilerine ve hatta sunucunun yanıt vermemesine neden olabilir. Bu rehberde, kaynak tüketen süreçleri tespit etmek ve sorunu çözmek için kullanabileceğiniz araçları ve yöntemleri detaylı olarak inceleyeceğiz.
Anlık Durum Kontrolü
top Komutu
top, sistem kaynaklarını gerçek zamanlı izlemek için en temel araçtır:
top
Önemli alanlar:
- %CPU: İşlemcinin kullanım yüzdesi
- %MEM: Bellek kullanım yüzdesi
- RES: Fiziksel RAM kullanımı
- VIRT: Sanal bellek kullanımı
- TIME+: Toplam CPU zamanı
Kullanışlı kısayollar:
P— CPU kullanımına göre sıralaM— Bellek kullanımına göre sıralak— Process sonlandır (PID gir)1— Her CPU çekirdeğini ayrı gösterc— Tam komut satırını göster
htop Komutu
htop, top'un daha gelişmiş ve kullanıcı dostu versiyonudur:
# Kurulum
sudo apt install htop -y
# Çalıştırma
htop
htop avantajları:
- Renkli ve görsel arayüz
- Mouse desteği
- Yatay ve dikey kaydırma
- Ağaç görünümü (F5)
- Filtreleme (F4) ve arama (F3)
Tek Seferlik Durum Görüntüleme
# CPU kullanımına göre ilk 10 process
ps aux --sort=-%cpu | head -11
# RAM kullanımına göre ilk 10 process
ps aux --sort=-%mem | head -11
# Belirli bir kullanıcının process'leri
ps -u www-data --sort=-%cpu
# Process ağacı görünümü
ps auxf
CPU Kullanımı Analizi
Yüksek CPU Kullanan Process Tespiti
# Anlık CPU kullanımı
mpstat -P ALL 1 5
# Process bazlı CPU kullanımı (5 saniye aralıkla)
pidstat -u 5 3
# Belirli bir process'in CPU kullanımı
pidstat -p PID_NUMARASI 1
CPU Kullanım Geçmişi
# sar ile geçmiş CPU verileri
sar -u 1 10
# Son 24 saatlik CPU kullanımı
sar -u -f /var/log/sysstat/sa$(date +%d)
# Load average kontrolü
uptime
cat /proc/loadavg
Load average değeri, CPU çekirdek sayınızla karşılaştırılmalıdır. 4 çekirdekli bir sunucuda load average 4.0 ise CPU %100 kullanımdadır. 8.0 ise aşırı yük altındadır.
CPU Yoğun Process'i Analiz Etme
# Process'in detaylı bilgileri
ps -p PID_NUMARASI -o pid,ppid,user,%cpu,%mem,etime,cmd
# Process'in açık dosyaları
lsof -p PID_NUMARASI
# Process'in sistem çağrıları
strace -p PID_NUMARASI -c
# Process'in thread'leri
ps -T -p PID_NUMARASI
RAM Kullanımı Analizi
Bellek Durumu Kontrolü
# Genel bellek durumu
free -h
# Detaylı bellek bilgisi
cat /proc/meminfo
# Bellek kullanım özeti
vmstat 1 5
free -h çıktısını okuma:
total used free shared buff/cache available
Mem: 16Gi 8.2Gi 1.1Gi 256Mi 6.7Gi 7.2Gi
Swap: 4.0Gi 512Mi 3.5Gi
Linux'ta "free" bellek düşük görünebilir çünkü sistem boş belleği disk cache olarak kullanır. Gerçek kullanılabilir bellek "available" sütunundadır.
RAM Yoğun Process Tespiti
# RSS (Resident Set Size) bazlı sıralama
ps aux --sort=-rss | head -11
# smem ile detaylı bellek analizi
sudo apt install smem -y
smem -t -k -s rss
# Process bazlı bellek kullanımı
pmap -x PID_NUMARASI
Swap Kullanımı Analizi
# Swap kullanan process'ler
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | sort -k 2 -n -r | head -10
# Swap aktivitesi izleme
vmstat 1 10
# Swappiness değeri
cat /proc/sys/vm/swappiness
# Swappiness ayarlama (geçici)
sudo sysctl vm.swappiness=10
# Swappiness ayarlama (kalıcı)
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
OOM Killer Mekanizması
Linux çekirdeği, bellek tükendiğinde OOM (Out of Memory) Killer mekanizmasını devreye sokar ve en çok bellek kullanan process'i sonlandırır.
OOM Killer Loglarını Kontrol Etme
# OOM killer olaylarını arama
dmesg | grep -i "oom\|out of memory"
# Sistem loglarında OOM
journalctl -k | grep -i oom
# Son OOM olayları
grep -i 'oom' /var/log/syslog
OOM Score Kontrolü
# Bir process'in OOM score'u
cat /proc/PID_NUMARASI/oom_score
# Tüm process'lerin OOM score'ları
for proc in $(find /proc -maxdepth 1 -regex '/proc/[0-9]+'); do
printf "%s\t%s\t%s\n" "$(cat $proc/oom_score 2>/dev/null)" "$(cat $proc/oom_adj 2>/dev/null)" "$(cat $proc/comm 2>/dev/null)"
done | sort -rn | head -10
OOM Killer'dan Koruma
# Kritik process'i OOM killer'dan koru
echo -1000 > /proc/PID_NUMARASI/oom_score_adj
# Systemd servisinde OOM koruma
# /etc/systemd/system/kritik-servis.service
[Service]
OOMScoreAdjust=-1000
OOM Killer'ın bir process'i sonlandırması, sunucunuzda ciddi bellek sorunu olduğunun göstergesidir. Kök nedeni bulmadan sadece OOM koruması eklemek sorunu çözmez.
Process Yönetimi
Process Öncelik Ayarlama
# Nice değeri ile başlatma (-20 en yüksek, 19 en düşük öncelik)
nice -n 10 ./uzun-islem.sh
# Çalışan process'in önceliğini değiştirme
renice -n 15 -p PID_NUMARASI
# Tüm kullanıcı process'lerinin önceliğini düşürme
renice -n 10 -u kullanici_adi
Process Sonlandırma
# Nazik sonlandırma (SIGTERM)
kill PID_NUMARASI
# Zorla sonlandırma (SIGKILL)
kill -9 PID_NUMARASI
# İsme göre sonlandırma
killall process_adi
pkill -f "process_pattern"
# Belirli CPU eşiğini aşan process'leri sonlandırma
ps aux | awk '$3 > 90 {print $2}' | xargs kill -9
Kaynak İzleme Script'i
#!/bin/bash
# Kaynak kullanım izleme ve uyarı script'i
CPU_THRESHOLD=90
MEM_THRESHOLD=90
LOG_FILE="/var/log/resource-monitor.log"
while true; do
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
# CPU kontrolü
CPU_USAGE=$(top -bn1 | grep 'Cpu(s)' | awk '{print $2}' | cut -d'.' -f1)
if [ "$CPU_USAGE" -gt "$CPU_THRESHOLD" ]; then
echo "[$TIMESTAMP] UYARI: CPU kullanımı %$CPU_USAGE" >> $LOG_FILE
echo "En çok CPU kullanan process'ler:" >> $LOG_FILE
ps aux --sort=-%cpu | head -6 >> $LOG_FILE
fi
# RAM kontrolü
MEM_USAGE=$(free | grep Mem | awk '{printf("%.0f", $3/$2 * 100)}')
if [ "$MEM_USAGE" -gt "$MEM_THRESHOLD" ]; then
echo "[$TIMESTAMP] UYARI: RAM kullanımı %$MEM_USAGE" >> $LOG_FILE
echo "En çok RAM kullanan process'ler:" >> $LOG_FILE
ps aux --sort=-%mem | head -6 >> $LOG_FILE
fi
sleep 60
done
Sonuç
Yüksek CPU ve RAM kullanımı, sunucu performansını doğrudan etkileyen kritik sorunlardır. top, htop, ps ve vmstat gibi araçlarla sorunlu process'leri tespit edebilir, nice/renice ile öncelik ayarlayabilir ve gerektiğinde process'leri sonlandırabilirsiniz. OOM Killer loglarını düzenli kontrol ederek bellek sorunlarını erken tespit etmek önemlidir.
İlgili Makaleler
SSH Bağlantı Sorunu: Sunucuya Bağlanamıyorum
SSH bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, SSH portu için filtre kuralı oluşturma ve sorun giderme adımları.
RDP Bağlantı Sorunu: Windows Sunucuya Erişilemiyor
RDP bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, RDP portu için filtre kuralı oluşturma ve sorun giderme adımları.
MTR Testi Nasıl Yapılır ve Destek Ekibine Gönderilir
WinMTR ve Linux MTR ile ağ testi yapma, ICMP filtre kuralı oluşturma ve sonuçları destek ekibine gönderme rehberi. Paket kaybı ve gecikme analizi.