Buyukweb
Linux Süreç Yönetimi: ps, top, htop, kill ve systemctl Pratik Rehberi

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.

Büyükweb Editör EkibiHosting, Sunucu ve Sistem Yönetimi Editörü11 dakika okuma

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, systemctl ve journalctl default yüklüdür; htop tek 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 -9 ile sonlandırmayın. MySQL/PostgreSQL için önce systemctl stop mysql veya pg_ctl stop -m fast kullanı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 kill ile sonlandıramazsınız — zaten çalışmıyor. Asıl çözüm parent process'i yeniden başlatmaktır; bu, parent'ın wait() ç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: rm ile sildikten sonra inode serbest kalmaz; dosyayı tutan process onu kapatana kadar disk alanı geri gelmez. lsof | grep deleted ile bulup ilgili servisi reload edin.


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

Linux & Komut Satırı İlgili Hizmetlerimiz

Bu yazıda anlatılan teknik konuyu profesyonel altyapıyla deneyimleyin

Etiketler:

#linux#komut satırı#terminal#sunucu yönetimi

Bu yazıyı paylaş