top Komutu ile Sistem Kaynaklarını Canlı İzleme Rehberi

Sunucuda bir şeyler ters gidiyordur, CPU yüzde yüze çıkmıştır, bellek dolmuştur ya da sistem yavaşlamıştır. İlk içgüdün ne olur? Hemen terminali açıp top yazarsın. Bu komut, onlarca yıldır sistem yöneticilerinin en güvenilir ilk yardım aracı olma özelliğini koruyor. Basit görünüşünün arkasında inanılmaz derecede güçlü özellikler saklı. Bu yazıda top komutunu sıfırdan ileri seviyeye kadar, gerçek dünya senaryolarıyla birlikte ele alacağız.

top Nedir ve Neden Bu Kadar Önemli?

top, “Table of Processes” kelimelerinin kısaltmasıdır ve Linux sistemlerinde çalışan süreçleri, CPU kullanımını, bellek durumunu ve diğer sistem kaynaklarını gerçek zamanlı olarak izlemenizi sağlar. Varsayılan olarak her 3 saniyede bir ekranı yeniler ve en çok kaynak tüketen süreçleri listenin başına taşır.

htop, glances, btop gibi modern araçlar çıkmış olsa da top neredeyse her Linux sisteminde kurulu gelir. Minimal bir container içinde, kısıtlı bir embedded sistemde ya da az paket yüklü bir sunucuda bile top‘u bulabilirsiniz. Bu yüzden top öğrenmek, taşınabilir bir beceri kazanmak demektir.

Temel Kullanım

En sade haliyle çalıştırmak için:

top

Bu kadar. Ama bu sizi sadece varsayılan görünümle baş başa bırakır. Gerçek gücü ortaya çıkarmak için biraz daha derine inmek gerekiyor.

Belirli bir kullanıcının süreçlerini izlemek istiyorsanız:

top -u nginx

Belirli bir PID’i takip etmek için:

top -p 1234

Birden fazla PID vermek de mümkün:

top -p 1234,5678,9012

Ekranı Anlamak: Her Satırın Arkasındaki Hikaye

top ekranı iki bölümden oluşur: üst kısımda sistem özeti, alt kısımda süreç listesi. Pek çok sysadmin bu ekranda yüzeysel okuma yapar ama her satır aslında çok önemli bilgiler içerir.

Başlık Bölümünü Okumak

İlk satır sistem çalışma süresi ve yük ortalamasını gösterir:

top - 14:23:45 up 42 days, 3:17, 2 users, load average: 0.52, 0.48, 0.61

Buradaki load average değerleri sırasıyla son 1 dakika, 5 dakika ve 15 dakikalık ortalama yük değerleridir. Bu değerleri yorumlarken CPU çekirdek sayısını göz önünde bulundurmanız gerekir. 4 çekirdekli bir sistemde load average 4.00 normal kabul edilirken, 1 çekirdekli sistemde aynı değer ciddi bir sorun işaretidir.

İkinci satır süreç özeti:

Tasks: 312 total, 1 running, 311 sleeping, 0 stopped, 0 zombie

Zombie süreçler burada özellikle dikkat gerektiriyor. Sıfır olması idealdir. Sürekli artan zombie sayısı, bir parent process’in child süreçlerini düzgün temizlemediğine işaret eder.

Üçüncü ve dördüncü satırlar CPU ve bellek bilgilerini verir:

%Cpu(s): 12.3 us, 3.4 sy, 0.0 ni, 82.1 id, 1.8 wa, 0.0 hi, 0.4 si, 0.0 st

Bu değerleri detaylıca açıklayalım:

  • us (user): Kullanıcı alanındaki süreçlerin CPU kullanımı. Yüksekse uygulamalarınız yoğun çalışıyordur.
  • sy (system): Kernel’ın CPU kullanımı. Sürekli yüksekse kernel düzeyinde bir sorun olabilir.
  • ni (nice): Nice değeri değiştirilmiş süreçlerin kullanımı.
  • id (idle): Boşta bekleyen CPU yüzdesi. Bu düşükse sistem meşgul demektir.
  • wa (iowait): I/O işlemlerini bekleyen CPU yüzdesi. Bu değer yüksekse disk veya ağ performansı sorun çıkarıyor olabilir.
  • hi (hardware interrupts): Donanım kesmeleri için harcanan zaman.
  • si (software interrupts): Yazılım kesmeleri için harcanan zaman. Ağ trafiği yoğunsa bu değer yükselebilir.
  • st (steal): Sanallaştırılmış ortamlarda hypervisor’ın çaldığı CPU zamanı. VPS kullanıyorsanız bu değere dikkat edin, yüksekse başka VM’ler sizin kaynaklarınızı kullanıyor olabilir.

Süreç Sütunlarını Anlamak

Süreç listesindeki başlıca sütunlar:

  • PID: Process ID, sürecin benzersiz kimliği.
  • USER: Süreci çalıştıran kullanıcı.
  • PR: Kernel’in atadığı öncelik değeri.
  • NI: Nice değeri, -20 ile 19 arasında. Düşük değer yüksek öncelik demektir.
  • VIRT: Sanal bellek kullanımı. Aldatıcı olabilir, gerçek kullanımı yansıtmaz.
  • RES: Fiziksel RAM kullanımı. Gerçek bellek tüketimini buradan takip edin.
  • SHR: Diğer süreçlerle paylaşılan bellek miktarı.
  • S: Süreç durumu (R: Running, S: Sleeping, Z: Zombie, T: Stopped).
  • %CPU: O an kullanılan CPU yüzdesi.
  • %MEM: Fiziksel RAM’in yüzde kaçını kullandığı.
  • TIME+: Toplam CPU kullanım süresi.
  • COMMAND: Süreç adı.

Klavye Kısayolları: top’un Gizli Güçleri

top çalışırken kullanabileceğiniz interaktif komutlar, bu aracı gerçek anlamda güçlü kılan özelliklerdir.

Sıralama kısayolları:

  • P: CPU kullanımına göre sırala (varsayılan)
  • M: Bellek kullanımına göre sırala
  • T: Toplam CPU zamanına göre sırala
  • N: PID numarasına göre sırala
  • R: Sıralamayı tersine çevir

Görünüm kısayolları:

  • 1: Her CPU çekirdeğini ayrı ayrı göster
  • m: Bellek bilgisini değiştir/gizle
  • t: CPU bilgisini değiştir/gizle
  • c: Komutun tam yolunu göster
  • V: Süreç ağacı görünümüne geç
  • H: Thread’leri göster/gizle
  • i: Idle süreçleri gizle, sadece aktif olanları göster

İşlem kısayolları:

  • k: Bir süreci sonlandır (PID gireceksiniz)
  • r: Bir sürecin nice değerini değiştir
  • u: Belirli bir kullanıcının süreçlerini filtrele
  • f: Sütun yönetimi ekranına git
  • W: Mevcut ayarları kaydet (~/.toprc dosyasına yazar)

Çok Çekirdekli CPU İzleme

Modern sunucularda genellikle birden fazla CPU çekirdeği bulunur. Varsayılan görünümde tüm çekirdekler tek bir satırda toplu gösterilir. Her çekirdeği ayrı görmek için top çalışırken 1 tuşuna basın:

top
# Ardından 1 tuşuna bas

Bu görünüm şuna benzer bir çıktı verir:

%Cpu0  :  45.2 us,  2.1 sy,  0.0 ni, 52.7 id
%Cpu1  :  12.3 us,  1.4 sy,  0.0 ni, 86.3 id
%Cpu2  :  78.9 us,  4.2 sy,  0.0 ni, 16.9 id
%Cpu3  :   8.1 us,  0.9 sy,  0.0 ni, 91.0 id

Bu çıktıda CPU2’nin neredeyse tamamen dolu olduğunu görüyoruz. Bu tek thread üzerinde çalışan bir uygulama olduğunun işareti olabilir.

Batch Modu ve Otomasyon

top‘un interaktif olmayan batch modu (-b parametresi), çıktıyı dosyaya kaydetmek veya script içinde kullanmak için idealdir.

Bir kerelik anlık görüntü almak için:

top -b -n 1

Sistemi 10 kez örnekleyip sonuçları dosyaya kaydetmek için:

top -b -n 10 -d 2 > /tmp/top_output.txt

Burada -d 2 parametresi her 2 saniyede bir örnek alınmasını sağlar.

Sadece belirli bir kullanıcının süreçlerini batch modunda kaydetmek:

top -b -n 5 -u www-data > /tmp/apache_processes.txt

Bu yöntemi cron job ile birleştirerek periyodik sistem snapshotu alabilirsiniz:

# Her saat başı sistem snapshot'ı al
0 * * * * /usr/bin/top -b -n 1 >> /var/log/top_snapshots.log 2>&1

Sütun Yönetimi ve Özelleştirme

top çalışırken f tuşuna basarak sütun yönetimi ekranına girebilirsiniz. Buradan hangi sütunların gösterileceğini, hangi sütuna göre sıralama yapılacağını belirleyebilirsiniz.

Varsayılan görünüme ek olarak sık ihtiyaç duyulan sütunlar:

  • PPID: Parent process ID, hangi sürecin bu süreci başlattığını gösterir.
  • UID: Kullanıcı ID numarası.
  • SWAP: Swap kullanımı.
  • CODE: Kod segmentinin kapladığı bellek.
  • DATA: Data + stack segmentinin kapladığı bellek.

Ayarları kalıcı hale getirmek için W tuşuna basarak ~/.toprc dosyasına kaydedin.

Gerçek Dünya Senaryoları

Senaryo 1: CPU Yüzde Yüzde Stuck, Suçlu Kim?

Sabah uyarı geldi: web sunucusu yavaş, CPU yüzde yüzde. Terminali açıyorsunuz:

top

Listeye bakıyorsunuz, php-fpm worker’larından biri CPU’nun yüzde seksenini yiyor. Tam komut satırını görmek için c tuşuna basıyorsunuz. Ardından o süreci daha detaylı incelemek için PID’i alıp başka bir terminalde:

top -p 23847

Sürecin saatlerdir çalıştığını ve CPU zamanının sürekli arttığını görüyorsunuz. Bu bir sonsuz döngü ya da takılı kalmış bir request işareti. Sorunu tespit ettikten sonra:

# top içinde k tuşuna bas, PID gir
# Ya da doğrudan:
kill -15 23847

Senaryo 2: Yüksek iowait – Disk mi, NFS mi?

Sistem load’u yüksek ama CPU kullanımı düşük. Bu klasik bir iowait senaryosu. top ekranında CPU satırına bakıyorsunuz:

%Cpu(s):  2.3 us,  1.1 sy,  0.0 ni, 41.2 id, 54.8 wa, 0.0 hi, 0.6 si

wa değeri yüzde 55’e ulaşmış. Süreç listesine geçip D durumdaki (uninterruptible sleep) süreçleri arıyorsunuz:

top
# i tuşuna basarak idle olanları gizle
# Durum sütununda D görünenlere odaklan

Bu bilgiyle birlikte iotop komutuna geçip hangi sürecin diski kasıp kavurduğunu bulabilirsiniz. Sorun NFS mount ise network tarafında problem olduğunu anlarsınız.

Senaryo 3: Bellek Sızıntısı Tespiti

Bir Java uygulaması her gün birkaç yüz MB daha fazla bellek kullanıyor mu? top ile takip edelim:

# Uygulamanın PID'ini bul
pgrep -f "java.*myapp"

# Sadece bu süreci izle, 60 saniyede bir örnekle
top -b -d 60 -p $(pgrep -f "java.*myapp") | grep -E "PID|[0-9]" >> /tmp/memory_leak_check.log

Bu logu gün içinde birkaç kez kontrol ederek RES değerinin sürekli artıp artmadığını görebilirsiniz. Eğer artıyorsa bellek sızıntısı var demektir.

Senaryo 4: VPS’te Steal CPU Tespiti

Bir müşterinizin VPS’i yavaş çalışıyor şikayeti var. top açıp CPU satırına bakıyorsunuz:

%Cpu(s):  8.2 us,  2.1 sy,  0.0 ni, 71.3 id,  0.8 wa,  0.0 hi,  0.4 si, 17.2 st

st değeri yüzde 17! Bu hypervisor’ın CPU zamanının ciddi bir kısmını diğer VM’lere verdiği anlamına gelir. Bu durumu belgeleyip hosting sağlayıcınıza iletmek için batch modda örnek alabilirsiniz:

top -b -n 30 -d 10 | grep "%Cpu" >> /tmp/steal_documentation.txt

30 örnek, 10 saniyede bir, 5 dakikalık bir belgeleme sağlar.

top ile Süreç Yönetimi

Nice Değerini Değiştirmek

Düşük öncelikli bir backup işleminin sistemi kasmasını önlemek için nice değerini artırabilirsiniz:

# top içinde r tuşuna bas, PID ve yeni nice değeri gir
# Ya da direkt komutla:
renice +15 -p 12345

Toplu Süreç Analizi

Belirli bir servisin tüm thread’lerini görmek için:

# Önce PID bul
pgrep nginx

# top içinde H tuşuna basarak thread görünümünü aç
# Ardından u ile nginx kullanıcısını filtrele
top -H -p $(pgrep -d',' nginx)

Çıktıyı Grep ile Filtrelemek

Batch modda çalışan top çıktısını grep ile filtrelemek çok işe yarar:

# Sadece mysql süreçlerini göster
top -b -n 1 | grep mysql

# %CPU değeri olan satırları başlıkla birlikte göster
top -b -n 1 | head -20

# CPU kullanımı yüzde 10'dan yüksek süreçleri bul
top -b -n 1 | awk 'NR>7 && $9>10 {print $0}'

Daha karmaşık bir awk örneği, bellek kullanımı 100MB üzerindeki süreçleri listelemek için:

top -b -n 1 | awk 'NR>7 {
    mem=$6
    if (mem ~ /g/) {
        gsub(/g/,"",mem)
        mem=mem*1024
    } else if (mem ~ /m/) {
        gsub(/m/,"",mem)
    }
    if (mem+0 > 100) print $0
}'

top vs Alternatifler: Ne Zaman Hangisi?

top mükemmel bir araç ama her iş için en iyi araç değil. Kısa bir karşılaştırma:

  • htop: Renkli, mouse destekli, daha kullanıcı dostu. Ama her sistemde yüklü gelmez.
  • atop: Disk ve ağ I/O’yu da gösterir, geçmişe dönük log tutar. Detaylı analiz için harika.
  • glances: Python tabanlı, web arayüzü var, uzaktan izleme için uygun.
  • btop: Modern, güzel arayüz, grafik gösterimi var.
  • vmstat: Anlık snapshot almak için daha hafif bir alternatif.
  • ps aux: Script içinde süreç bilgisi almak için daha uygun.

Ancak hiçbiri top‘un her yerde bulunma ve sıfır bağımlılık avantajına sahip değil. Acil bir durumda minimal bir sistemde olduğunuzda top hayat kurtarır.

Konfigürasyon Dosyası ve Kalıcı Ayarlar

top‘un ayarları ~/.toprc dosyasında saklanır. Manuel düzenlemek zordur, bunun yerine top içinde istediğiniz görünümü ayarlayıp W tuşuna basarak kaydedin.

Farklı sunucular için farklı konfigürasyonlara ihtiyaç duyuyorsanız:

# Farklı config dosyasıyla top'u başlat
TOPRC=/home/sysadmin/.toprc_production top

Takım arkadaşlarınızla aynı görünümü paylaşmak istiyorsanız .toprc dosyasını paylaşabilirsiniz:

# Config dosyasını kopyala
cp ~/.toprc /tmp/team_toprc
# Başkası kullanmak istediğinde:
cp /tmp/team_toprc ~/.toprc

Pratik İpuçları ve Küçük Numaralar

Yenileme süresini değiştirmek: top çalışırken d tuşuna basıp yeni süreyi girin. Kritik bir durumu izlerken 0.5 saniye bile seçebilirsiniz, ama bu CPU’ya ek yük bindirir.

Ekranı dondurma: top çalışırken Spacebar anlık olarak ekranı dondurur.

Güvenli mod: Başka kullanıcıların süreçlerine sinyal gönderemeyen kısıtlı mod:

top -s

Tek iterasyon: Bir kez çalıştırıp çıkmak için:

top -b -n 1 -w 512

-w 512 parametresi çıktı genişliğini 512 karaktere ayarlar, terminal boyutundan bağımsız tam çıktı alırsınız.

Daha hızlı belirli PID izleme:

# Bir uygulamanın tüm child süreçleriyle birlikte izlenmesi
top -p $(pgrep -d',' -P $(pgrep -x mysqld))

Sonuç

top komutu, onlarca yıllık geçmişine rağmen modern sistem yönetiminde hala vazgeçilmez bir araç. Sadeliği aldatıcı, içinde gerçek bir güç saklı. CPU steal’den bellek sızıntısına, zombie süreçlerden iowait analizine kadar pek çok sorunun ilk ipuçlarını top ekranından yakalayabilirsiniz.

En önemli şu: top‘u sadece açıp bakmak yetmez. Her değerin ne anlama geldiğini, hangi durumda neye bakmanız gerektiğini bilmek gerekiyor. Bu yazıda ele aldığımız kavramları sindirdikten sonra bir sonraki adım olarak atop ve iotop gibi tamamlayıcı araçları da öğrenmenizi tavsiye ederim.

Sunucunuz sorun çıkardığında terminali açıp top yazacaksınız. O anda ekranın size anlatmaya çalıştıklarını anlayabiliyor olmak, iyi bir sysadmin ile mükemmel bir sysadmin arasındaki farkı belirler.

Yorum yapın