
Linux Süreç Yönetimi: ps, top, htop, kill ve systemctl Pratik Rehberi
Sunucu CPU %100 — hangi process tüketiyor? ps aux, top, htop ile tespiten kill sinyallerine, systemctl servis yönetimine: VDS için eksiksiz rehber.
Linux Süreç Yönetimi: ps, top, htop, kill ve systemctl Pratik Rehberi (2026)
Sunucu CPU ani %100'e çıktı, kullanıcılar yavaşlıktan şikayet ediyor. SSH'a girdiniz — 30 saniyede suçlu process'i top ile bulup kill ile düzgünce sonlandırmak ve systemctl ile servisi yeniden başlatmak artık temel beceri. Bu rehber Buyukweb VDS müşterilerine yönelik; AlmaLinux 9, Ubuntu 22.04, Debian 12, RHEL 9 üzerinde pratik senaryolarla anlatılıyor.
Buyukweb perspektifi: VDS paketlerimiz unmanaged'dır; process izleme ve servis yönetimi tamamen sizin sorumluluğunuzdadır. AlmaLinux 9, Ubuntu 22.04, Debian 12 ve RHEL 9 kurulumlarında
ps,top,systemctlvejournalctldefault yüklüdür;htoptek komutla kurulur. cPanel paylaşımlı hosting'de SSH jailed shell sunulduğundan süreç yönetimi kısıtlıdır; ağır process analizi için VDS gerekir. Tercih etmeyin:kill -9'u ilk reaksiyon olarak kullanmayı — aşağıda neden olduğunu açıklıyoruz.
Process (Süreç) Nedir? — Kısa Özet
Linux'ta çalışan her program bir process'tir. Her process'in benzersiz bir PID (Process ID) vardır. PID 1 her zaman systemd'dir (init); diğer tüm process'ler onun alt süreçleridir.
Process durumları: R (Running — CPU'da aktif), S (Sleeping — I/O bekliyor), D (Disk Sleep — uninterruptible, kill -9 ile sonlandırılamaz), Z (Zombie — bitti ama parent tarafından toplanmadı), T (Stopped — durduruldu).
D durumundaki process artıyorsa: disk I/O darboğazı veya NFS bağlantı sorunu; asıl I/O sorununu çözün.
ps — Anlık Süreç Görüntüsü
ps (Process Status), o anki tüm process'lerin anlık fotoğrafını çeker. İki popüler format vardır.
ps aux vs ps -ef
ps aux # BSD stili: %CPU, %MEM, RSS açık görünür
ps -ef # UNIX stili: PPID (parent PID) sütunu eklenir
İki format aynı process'leri listeler. ps aux günlük kullanımda daha okunabilir; ps -ef parent-child ilişkisi araştırırken PPID sütunuyla öne çıkar.
VIRT vs RES:
VIRT(top/ps'de VSZ) talep edilen sanal adres alanı;RES(RSS) gerçekten RAM'de olan kısımdır. Önemli olan RES'tir — VIRT büyük görünse de panik nedeni değildir.
Filtreleme ve Formatlama
# PHP-FPM process'lerini listele
ps aux | grep php-fpm
# Belirli kullanıcının process'leri
ps -u www-data
# Sadece PID bul (pgrep)
pgrep nginx
# Ağaç görünümü — hangi process hangisini başlattı
ps auxf
# ya da
pstree -p
# Özel sütunlar: PID, RAM (RSS KB), CPU, komut
ps -eo pid,rss,%cpu,cmd --sort=-%cpu | head -20
# En çok RAM tüketen 10 process
ps -eo pid,rss,%mem,cmd --sort=-rss | head -10
Gerçek Senaryo: CPU Tüketen Process'i Bul
# CPU'ya göre sıralı, ilk 10
ps aux --sort=-%cpu | head -11
# RAM'e göre sıralı, ilk 10
ps aux --sort=-%mem | head -11
top, htop, btop — Canlı Sistem Monitörü
ps anlık fotoğraf çekerken, top ve türevleri canlı olarak güncellenir.
top — Her Sistemde Hazır
top
Temel kısayollar:
| Tuş | Etki |
|---|---|
P |
CPU kullanımına göre sırala |
M |
Bellek (RES) kullanımına göre sırala |
k |
PID sor, sinyal gönder (kill) |
1 |
Her CPU çekirdeğini ayrı göster |
u |
Belirli kullanıcı için filtrele |
d |
Güncelleme aralığını değiştir |
q |
Çıkış |
Başlık satırı okuma: load average: 0.85, 1.20, 0.95 — son 1/5/15 dakika. 4 çekirdekli sistemde 4.0+ sorun işareti. wa (iowait) yüksekse disk darboğazı var demektir; buff/cache alanı gerektiğinde uygulamalara verilir, panik nedeni değildir.
htop — Renkli, Etkileşimli
# Kurulum (yüklü değilse)
dnf install htop # AlmaLinux 9 / RHEL 9
apt install htop # Ubuntu 22.04 / Debian 12
htop
htop, top'a göre; fare desteği, renkli CPU/RAM çubukları, F5 ile ağaç görünümü, F3 arama, F9 ile doğrudan sinyal menüsü sunar. Process'e tıklayıp sinyal gönderebilirsiniz.
btop — Modern Alternatif
dnf install btop # AlmaLinux 9 (EPEL)
apt install btop # Ubuntu 22.04+
btop
btop, disk I/O ve ağ istatistiklerini de entegre gösterir; terminal renk desteği gerektiren ortamlarda htop'tan daha bilgi yoğun bir panel sunar.
top vs htop vs btop Karşılaştırma
| Özellik | top | htop | btop |
|---|---|---|---|
| Her sistemde yüklü | Evet | Hayır | Hayır |
| Fare desteği | Hayır | Evet | Evet |
| Renkli çubuklar | Hayır | Evet | Evet |
| Disk I/O gösterimi | Hayır | Hayır | Evet |
| Ağ trafiği | Hayır | Hayır | Evet |
| Sinyal gönderme | k tuşu | F9 menüsü | F9 menüsü |
| Öğrenme eğrisi | Orta | Düşük | Düşük |
kill Sinyalleri — SIGTERM, SIGKILL ve Diğerleri
kill komutu aslında "öldürmez" — sinyal gönderir. Process ne yapacağını sinyale göre kendisi belirler.
Sinyal Tablosu
| Sinyal | Numara | Açıklama | Ne Zaman Kullanılır |
|---|---|---|---|
| SIGHUP | 1 | Hang-up / yeniden yükle | Daemon'ı durdurmadan config yenile (nginx, sshd) |
| SIGINT | 2 | Klavye kesintisi (Ctrl+C) | Etkileşimli process'i sonlandır |
| SIGQUIT | 3 | Çıkış + core dump | Debug amaçlı |
| SIGTERM | 15 | Nazik sonlandırma (varsayılan) | Her zaman önce bunu deneyin |
| SIGKILL | 9 | Zorla sonlandırma — kernel yapar | Son çare |
Kullanım
# Nazik sonlandırma (SIGTERM — varsayılan)
kill 12345
# Yeniden yükle (SIGHUP — nginx config reload örneği)
kill -1 $(cat /var/run/nginx.pid)
# veya
kill -HUP 12345
# Zorla sonlandırma (SIGKILL)
kill -9 12345
# İsme göre toplu sonlandırma
killall php-fpm
pkill -f "worker.py"
# Tüm PHP-FPM worker'larını SIGHUP ile yeniden yükle
pkill -HUP php-fpm
Neden kill -9 İlk Reaksiyon Olmamalı?
SIGKILL (9) ile process anında ve koşulsuz sonlandırılır — temizlik yapma fırsatı verilmez:
- Açık dosya handle'ları kapatılmaz → geçici dosyalar kalır, dosya kilitleri (file lock) takılı kalır
- Veritabanı (MySQL/PostgreSQL) buffer'daki veriyi diske yazamaz → veri bozulması (corruption) riski
- Session dosyaları, transaction log'ları yarım kalır
Doğru sıra:
# 1. Önce SIGTERM (nazik)
kill 12345
# 2. 10-30 saniye bekle
sleep 15
# 3. Hâlâ çalışıyorsa SIGKILL
if kill -0 12345 2>/dev/null; then
echo "Process hâlâ çalışıyor, SIGKILL gönderiliyor..."
kill -9 12345
fi
Production DB process'ini kesinlikle
kill -9ile sonlandırmayın. MySQL/PostgreSQL için öncesystemctl stop mysqlveyapg_ctl stop -m fastkullanın; bu araçlar graceful shutdown yaparak veriyi güvenle diske yazar.
systemctl — Servis Yönetimi
Modern Linux (systemd) kurulumlarında (AlmaLinux 7+, Ubuntu 16+, Debian 9+, RHEL 7+) servis yönetimi systemctl ile yapılır.
Temel Komutlar
| Komut | Açıklama |
|---|---|
systemctl start nginx |
Servisi başlat |
systemctl stop nginx |
Servisi durdur |
systemctl restart nginx |
Durdur + başlat |
systemctl reload nginx |
Config yenile (servis kesilmez) |
systemctl status nginx |
Durum + son log satırları |
systemctl enable nginx |
Sistem açılışında otomatik başlat |
systemctl disable nginx |
Otomatik başlatmayı kaldır |
systemctl mask nginx |
Başlatmayı tamamen engelle (enable da çalışmaz) |
systemctl is-active nginx |
active / inactive döner |
systemctl is-enabled nginx |
enabled / disabled döner |
reload vs restart Farkı
- restart: Servisi tamamen durdurur, sıfırdan başlatır. Kısa süreli kesinti oluşur. Config değişikliği zorunlu olduğunda veya servis yanıt vermiyorsa kullanılır.
- reload: Process devam ederken config dosyasını yeniden yükler. Nginx, Apache, sshd gibi araçlar reload'u destekler. Üretim ortamında config değişikliği için reload tercih edin — kesinti olmaz.
# Nginx config'i test et, sonra reload yap (production için doğru yöntem)
nginx -t && systemctl reload nginx
# MySQL restart (reload desteklemez)
systemctl restart mysql
# PHP-FPM reload
systemctl reload php-fpm
# ya da versiyonlu:
systemctl reload php8.2-fpm
Servis Listesi ve journalctl
# Başarısız servisler
systemctl list-units --type=service --state=failed
# Servis logları (son 50 satır)
journalctl -u nginx -n 50
# Canlı log takibi
journalctl -u php-fpm -f
# Bugünkü loglar
journalctl -u mysql --since today
# OOM killer log'u
journalctl -k | grep -i "out of memory|oom"
Zombie ve Orphan Process
Zombie Process Nedir?
Bir process iş bitirdiğinde çekirdek, exit status'u parent process'in wait() ile okumasını bekler. Parent okumadan önce child process'in varlığı ps çıktısında Z (Zombie) olarak görünür. PID, exit status için ayrılmış tutulur.
Sorun ne zaman başlar? Birkaç zombie normaldir; yüzlerce zombie ise parent process'in çocuklarını toplayamadığını (bug veya asılı kalmış uygulama) gösterir. PID tablosunu tüketerek yeni process açılamamasına yol açar.
# Zombie process say
ps aux | awk '$8 == "Z"' | wc -l
# Zombie'lerin parent'larını bul
ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/'
# PPID sütununu alıp parent'ı kill edin (SIGCHLD gönderir, parent toplar)
Zombie process'i doğrudan
killile sonlandıramazsınız — zaten çalışmıyor. Asıl çözüm parent process'i yeniden başlatmaktır; bu, parent'ınwait()çağrısını tetikler.
Orphan Process
Parent process önce ölürse child "yetim" kalır; Linux onu PID 1 (systemd) altına bağlar ve systemd wait() ile toplar. Pratik sorun değildir.
nice ve renice — Process Önceliği
Linux, -20 (en yüksek öncelik) ile +19 (en düşük öncelik) arasında nice değeri kullanır. Varsayılan 0'dır. Root olmayan kullanıcılar yalnızca nice değerini artırabilir (önceliği düşürebilir).
# Düşük öncelikle başlat (yoğun CPU işi, üretimi etkilemesin)
nice -n 15 tar -czf yedek.tar.gz /var/www/html/
# Çalışan process'in önceliğini değiştir
renice -n 10 -p 12345
# Tüm php-fpm worker'larının önceliğini artır (düşür)
renice -n 5 -u www-data
# Process'in mevcut nice değerini gör
ps -o pid,ni,cmd -p 12345
Ne zaman: Gece yedekleme veya büyük sıkıştırma işleri için nice -n 15 kullanın; web trafiği etkilenmez.
cgroups v2, systemd-cgtop ve lsof — Kısa Referans
cgroups v2 (Control Groups), Linux'ta process gruplarına CPU ve RAM kısıtı koymanın kernel mekanizmasıdır. systemd, her servisi otomatik olarak bir cgroup'a alır.
# Servis bazlı CPU/RAM kullanımı (top gibi ama servis düzeyinde)
systemd-cgtop
# MySQL'e maksimum 2 GB RAM limiti koy
systemctl set-property mysql MemoryMax=2G
# Nginx'e CPU zamanının %50'sini ver
systemctl set-property nginx CPUQuota=50%
lsof (List Open Files), hangi process'in hangi dosyayı veya portu açtığını gösterir.
# 80 portunu kim dinliyor?
lsof -i :80
# Silinen ama açık tutulan dosyalar (disk doluyken aranır)
lsof | grep "(deleted)"
# Belirli process'in açık dosyaları
lsof -p 12345
Silinmiş ama açık dosya:
rmile sildikten sonra inode serbest kalmaz; dosyayı tutan process onu kapatana kadar disk alanı geri gelmez.lsof | grep deletedile bulup ilgili servisireloadedin.
Gerçek Senaryolar
Senaryo 1: CPU %100 — 30 Saniyede Suçluyu Bul
# Canlı CPU sıralaması
top -b -n 1 | head -20
# Ya da ps ile anlık
ps aux --sort=-%cpu | head -11
# PID 4872 şüpheli çıktı — tam komut satırını gör
ps -p 4872 -o pid,ppid,%cpu,%mem,cmd
# Servis mi, cron job mu?
systemctl status $(ps -p 4872 -o unit= 2>/dev/null | tr -d ' ')
Senaryo 2: MySQL Yanıt Vermiyor — Graceful Restart
# Durum ve son hatalar
systemctl status mysql
journalctl -u mysql -n 30
# Config syntax kontrolü
mysqld --validate-config 2>&1 | head -20
# Graceful restart (SIGTERM → dirty page flush tamamlanır)
systemctl restart mysql
Senaryo 3: OOM Killer — Hangi Process Öldürüldü?
# Kernel OOM loglarını gör
journalctl -k | grep -i "out of memory|oom_kill|killed process"
# Bellek kullanımı yüksek process'ler
ps -eo pid,rss,%mem,cmd --sort=-rss | head -10
# Toplam RAM ve swap durumu
free -h
Sıkça Sorulan Sorular
ps aux ile ps -ef arasındaki fark nedir?
Her ikisi aynı process'leri listeler; format farkı vardır. ps aux (BSD stili) %CPU, %MEM, RSS sütunlarını açık gösterir. ps -ef (UNIX stili) PPID sütunuyla parent-child ilişkisini açıkça gösterir.
top'ta VIRT (sanal) bellek çok büyük görünüyor — sorun var mı?
Genellikle hayır. VIRT talep edilen sanal adres alanıdır; önemli olan RES (fiziksel RAM'de olan kısım) sütunudur. Java uygulaması VIRT 4 GB ama RES 500 MB gösteriyorsa gerçek tüketim 500 MB'tır.
kill -9 ile kill (varsayılan SIGTERM) arasındaki fark nedir?
kill PID SIGTERM (15) gönderir; process temizlik yaparak kapanabilir. kill -9 SIGKILL gönderir; kernel anında sonlandırır, temizlik şansı yoktur. Önce SIGTERM deneyin, yanıt vermiyorsa SIGKILL. Production veritabanı için daima systemctl stop tercih edin.
systemctl reload ile systemctl restart farkı nedir?
reload: Process çalışırken config yeniden okunur, kesinti olmaz; nginx, Apache, sshd destekler. restart: Tam durdur + başlat, kısa kesinti olur. Config değişikliği için önce nginx -t, sonra systemctl reload nginx. Servis yanıt vermiyorsa restart gerekir.
Zombie process nasıl temizlenir?
Zombie doğrudan kill ile sonlandırılamaz; zaten çalışmıyor. Parent process wait() çağırınca kaybolur. ps -eo pid,ppid,stat,cmd | awk '$3 ~ /Z/' ile PPID'yi bulun, parent'ı yeniden başlatın. Az sayıda (1-3) zombie normaldir; yüzlercesi uygulama bug'ıdır.
nice değeri ne işe yarar?
-20 en yüksek, +19 en düşük öncelik. Gece yedekleme veya büyük sıkıştırma işlerini nice -n 15 ile başlatın; web sunucusu ve veritabanı bundan etkilenmez. renice çalışan bir process'in önceliğini anlık değiştirir.
Buyukweb VDS Perspektifi
Buyukweb VDS paketleri (₺250/ay'dan, AlmaLinux 9 / Ubuntu 22.04 / Debian 12 / RHEL 9) tam SSH root erişimiyle teslim edilir; process yönetimi ve servis konfigürasyonu tamamen sizin elinizde. KVM sanallaştırma, günlük Veeam yedekleme, Bursa Pendc Tier 3. 7/24 Türkçe destek: 0850 302 60 70 ya da iletişim sayfamız.
İlgili Büyükweb Hizmetleri
- VDS Sunucu — Tam SSH root, process yönetimi sizde
- Linux Hosting
- Linux Web Hosting
- cPanel Web Hosting
Linux & Komut Satırı İlgili Hizmetlerimiz
Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin
Etiketler:

