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ı.
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.
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.
top, sistem kaynaklarını gerçek zamanlı izlemek için en temel araçtır:
top
Önemli alanlar:
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österhtop, top'un daha gelişmiş ve kullanıcı dostu versiyonudur:
# Kurulum
sudo apt install htop -y
# Çalıştırma
htop
htop avantajları:
# 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
# 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
# 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.
# 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
# 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.
# 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 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
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 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
# 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
# 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.
# 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
# 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
#!/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
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.
Load average, son 1, 5 ve 15 dakikadaki ortalama sistem yükünü gösterir. CPU çekirdek sayınızla karşılaştırılmalıdır. 4 çekirdekli sunucuda 4.0 load average %100 kullanım demektir. Sürekli çekirdek sayısının üzerinde olması aşırı yük göstergesidir.
Hayır, Linux boş belleği disk cache olarak kullanır. Gerçek kullanılabilir bellek free -h çıktısındaki 'available' sütunundadır. Bu değer düşükse bellek sorunu var demektir.
OOM Killer, en yüksek oom_score değerine sahip process'i sonlandırır. Bu genellikle en çok bellek kullanan process'tir. Kritik servisleri korumak için oom_score_adj değerini -1000 yapabilirsiniz.
top komutunda 'c' tuşuna basarak tam komut satırını görüntüleyin. Ayrıca 'H' tuşu ile thread'leri görebilirsiniz. Kernel thread'leri (köşeli parantez içinde) yüksek CPU kullanıyorsa, donanım veya driver sorunu olabilir.
Önce hangi process'lerin swap kullandığını tespit edin. RAM yetersizse sunucu planınızı yükseltin. Swappiness değerini düşürerek (vm.swappiness=10) sistemin swap'a daha az başvurmasını sağlayabilirsiniz. Ancak asıl çözüm yeterli RAM sağlamaktır.
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ı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, RDP portu için filtre kuralı oluşturma ve sorun giderme adımları.
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.