iotop ve top Komutları ile Linux Sistem Kaynaklarını İzleme

Sistem yöneticiliğinin en kritik görevlerinden biri, sunucunun ne yaptığını anlık olarak takip edebilmektir. Özellikle disk I/O darboğazları, yüksek CPU kullanımı veya bellek sızıntıları gibi sorunları tespit etmek için doğru araçlara ihtiyaç duyarsınız. İşte tam bu noktada iotop ve top komutları devreye girer. Bu iki araç, bir sistem yöneticisinin günlük hayatında vazgeçilmez olmalıdır. Gelin bu komutları derinlemesine inceleyelim ve gerçek dünya senaryolarında nasıl kullandığımı paylaşayım.

top Komutu: Sistem Kaynaklarının Genel Görünümü

top, Linux sistemlerinde anlık proses izleme için kullanılan klasik araçtır. Hemen hemen her Linux dağıtımında varsayılan olarak kurulu gelir ve terminal üzerinden çalışan, dinamik olarak güncellenen bir ekran sunar.

top Komutu ile Başlamak

Komutu çalıştırmak oldukça basit:

top

Bu komut çalıştığında karşınıza iki ana bölüm çıkar. Üst kısımda sistem geneli özet bilgileri, alt kısımda ise proses listesi yer alır. İlk bakışta biraz karmaşık görünebilir ama birkaç dakika içinde neyin nerede olduğunu anlarsınız.

top Çıktısını Anlamak

Üst bölümde gördüğünüz satırları şöyle yorumlayabilirsiniz:

  • Uptime satırı: Sistemin ne kadar süredir çalıştığını, kaç kullanıcının bağlı olduğunu ve load average değerlerini gösterir.
  • Tasks satırı: Toplam proses sayısı, çalışan, uyuyan, durdurulmuş ve zombie proses sayılarını listeler.
  • CPU satırı: Kullanıcı alanı, kernel alanı, I/O bekleme süresi gibi CPU kullanım detaylarını gösterir.
  • Mem satırı: Toplam RAM, kullanılan ve boş bellek bilgisini verir.
  • Swap satırı: Swap alanı kullanımını gösterir.

Temel top Parametreleri

top komutunu farklı parametrelerle başlatabilirsiniz:

-d: Güncelleme aralığını saniye cinsinden belirler. -p: Belirli bir PID’i izler. -u: Belirli bir kullanıcının proseslerini filtreler. -n: Kaç güncelleme sonrası çıkılacağını belirler. -b: Batch modunda çalıştırır, çıktıyı dosyaya yönlendirmek için kullanılır. -H: Thread görünümünü etkinleştirir.

top ile Pratik Kullanım Örnekleri

Belirli bir kullanıcının proseslerini izlemek için:

top -u www-data

Güncelleme aralığını 2 saniyeye ayarlayarak başlatmak için:

top -d 2

Belirli bir PID’i izlemek için (örneğin MySQL process):

top -p $(pgrep mysql)

top çıktısını bir dosyaya kaydetmek için batch modunu kullanın. Bu özellikle uzak sunucularda sorun giderirken çok işe yarar:

top -b -n 5 > /tmp/top_output.txt

Bu komut 5 güncelleme döngüsünün çıktısını dosyaya kaydeder.

top İçindeki Klavye Kısayolları

top çalışırken çeşitli tuşlarla davranışını değiştirebilirsiniz:

  • k: Bir prosesi sonlandırmak için PID girin.
  • r: Bir prosesin önceliğini (nice değerini) değiştirin.
  • M: Bellek kullanımına göre sıralayın.
  • P: CPU kullanımına göre sıralayın (varsayılan).
  • T: CPU zamanına göre sıralayın.
  • 1: Tüm CPU çekirdeklerini ayrı ayrı gösterin.
  • q: top’tan çıkın.
  • c: Tam komut yolunu gösterin.
  • f: Görüntülenecek kolonları seçin.
  • W: Mevcut ayarları kaydedin.

Gerçek Dünya Senaryosu: Sunucu Yavaşlamasını Tespit Etmek

Geçen ay bir e-ticaret müşterimizin sunucusu iş yoğunluğu saatlerinde dramatik biçimde yavaşlıyordu. İlk adımda top komutunu çalıştırdım:

top -d 1

CPU kullanımına baktığımda %wa (I/O wait) değerinin %45 civarında gezdiğini gördüm. Bu, CPU’nun işlemcileri beklettiğini değil, disk okuma/yazma işlemlerini beklediğini gösteriyordu. Normal şartlarda bu değer %5-10’un altında olmalıdır. Sorunun disk I/O kaynaklı olduğunu anladım ve iotop‘a geçtim. Ama bunu birazdan anlatacağım.

htop: top’un Daha Kullanışlı Kardeşi

top‘tan bahsederken htop‘u atlamamak gerekir. htop, top‘un daha modern ve kullanıcı dostu versiyonudur. Çoğu dağıtımda varsayılan gelmez ama kurulması şiddetle tavsiye edilir.

# Ubuntu/Debian
apt install htop

# CentOS/RHEL
yum install htop

# Arch Linux
pacman -S htop

htop ile CPU çekirdeklerini renkli çubuklar halinde görebilir, fareyle proseslere tıklayabilir ve çok daha kolay filtreleme yapabilirsiniz. Özellikle yeni başlayan sistem yöneticileri için htop çok daha anlaşılırdır.

iotop Komutu: Disk I/O’nun Dedektifi

top genel bir bakış sunarken, iotop spesifik olarak disk giriş/çıkış (I/O) işlemlerini proses bazında izler. Hangi prosesin diski ne kadar yorduğunu anlamak istediğinizde iotop tam aradığınız araçtır.

iotop Kurulumu

iotop genellikle varsayılan olarak gelmez, kurmanız gerekir:

# Ubuntu/Debian
apt install iotop

# CentOS/RHEL 7
yum install iotop

# CentOS/RHEL 8+
dnf install iotop

# Arch Linux
pacman -S iotop

Önemli not: iotop çalışmak için root yetkisi veya CAP_NET_ADMIN ve CAP_SYS_ADMIN yeteneklerine ihtiyaç duyar. Bu nedenle genellikle sudo ile çalıştırırsınız.

iotop Temel Kullanımı

sudo iotop

Bu komut çalıştığında, top‘a benzer bir arayüz açılır. En üstte toplam okuma/yazma hızları gösterilir, altında ise her proses için I/O istatistikleri listelenir.

iotop Parametreleri

-o veya –only: Sadece aktif I/O yapan prosesleri gösterir, bu en çok kullandığım seçenektir. -b veya –batch: Batch modunda çalıştırır, çıktıyı kaydedebilirsiniz. -n sayı veya –iter=sayı: Kaç iterasyon çalışacağını belirler. -d saniye veya –delay=saniye: Güncelleme aralığını ayarlar. -p PID veya –pid=PID: Belirli bir prosesi izler. -u kullanici veya –user=kullanici: Belirli bir kullanıcının proseslerini filtreler. -k veya –kilobytes: Değerleri kilobyte cinsinden gösterir. -t veya –time: Zaman damgası ekler (batch modu ile kullanışlı). -q veya –quiet: Başlık satırını azaltır. -a veya –accumulated: Anlık hız yerine toplam birikmiş I/O değerlerini gösterir.

iotop ile Pratik Kullanım Örnekleri

Sadece aktif I/O yapan prosesleri görüntülemek için (en sık kullandığım):

sudo iotop -o

Batch modunda 10 saniye boyunca kayıt almak:

sudo iotop -b -n 10 -t > /var/log/iotop_$(date +%Y%m%d_%H%M%S).log

Belirli bir kullanıcının I/O aktivitesini izlemek:

sudo iotop -u postgres

2 saniye aralıklarla güncelleme yaparak sadece aktif prosesleri listelemek:

sudo iotop -o -d 2

iotop Çıktısını Yorumlamak

iotop çıktısında şu kolonları göreceksiniz:

  • TID: Thread ID
  • PRIO: I/O önceliği
  • USER: Prosesi çalıştıran kullanıcı
  • DISK READ: Diskten okuma hızı
  • DISK WRITE: Diske yazma hızı
  • SWAPIN: Swap’tan okuma yüzdesi
  • IO: Genel I/O bekleme yüzdesi
  • COMMAND: Komut adı

DISK WRITE kolonunda sürekli yüksek değerler gören bir proses, büyük ihtimalle sorun çıkarandır.

Gerçek Dünya Senaryosu: MySQL Yavaşlamasını Tespit Etmek

Az önce bahsettiğim e-ticaret sunucusu sorununa geri dönelim. top ile I/O wait problemini tespit ettikten sonra iotop‘u devreye aldım:

sudo iotop -o -d 1

Çıktıda MySQL prosesinin saniyede 150MB yazma yaptığını gördüm. Bu ciddi bir değerdi. Biriktirme moduna geçerek daha uzun süre inceledim:

sudo iotop -o -a -d 5

-a bayrağı sayesinde hangi prosesin toplam ne kadar I/O yaptığını görebildim. MySQL açık ara önde geliyordu. Sonrasında MySQL slow query loglarını inceleyerek sorunlu sorguları tespit ettim ve index optimizasyonu yaptım. Sonuç olarak I/O wait %45’ten %3’e düştü.

top ve iotop’u Birlikte Kullanmak

Bu iki aracı birlikte kullanmak, sistem sorunlarını hızla tespit etmenizi sağlar. Tipik iş akışım şöyle işler:

Adım 1: Önce top ile genel duruma bakın. CPU, bellek ve I/O wait değerlerini kontrol edin.

Adım 2: Eğer %wa (I/O wait) yüksekse iotop‘a geçin ve hangi prosesin diski yorduğunu bulun.

Adım 3: CPU %sy (system) değeri yüksekse, kernel seviyesinde bir sorun olabilir. strace ile ilgili prosesi inceleyin.

Adım 4: Bellek kullanımı yüksekse top içinde M tuşuna basarak belleğe göre sıralayın.

Birden fazla terminal penceresi açık tutarak top ve iotop‘u aynı anda izleyebilirsiniz. tmux veya screen kullanıyorsanız, ekranı bölerek her ikisini de aynı anda takip edebilirsiniz:

tmux new-session ; split-window -h ; send-keys 'top' Enter ; select-pane -t 0 ; send-keys 'sudo iotop -o' Enter

Otomatik İzleme ve Loglama

Anlık izlemenin yanı sıra, periyodik olarak sistem durumunu kayıt altına almak da son derece önemlidir. Özellikle gece yarısı yaşanan sorunları sabah incelemeniz gerektiğinde bu loglar hayat kurtarır.

Cron ile Otomatik top Loglama

# Her 5 dakikada bir top çıktısını kaydet
*/5 * * * * /usr/bin/top -b -n 1 >> /var/log/top_$(date +%Y%m%d).log 2>&1

Bash Script ile Kapsamlı İzleme

Şu script’i kullanarak hem top hem de iotop çıktılarını düzenli aralıklarla kaydedebilirsiniz:

#!/bin/bash

LOG_DIR="/var/log/sysmon"
DATE=$(date +%Y%m%d_%H%M%S)
INTERVAL=60
COUNT=1440  # 24 saat için (60 saniyede bir)

mkdir -p $LOG_DIR

echo "Sistem izleme başlatıldı: $(date)" >> $LOG_DIR/monitor.log

# top çıktısı
top -b -n 1 -d 1 >> $LOG_DIR/top_$DATE.log

# iotop çıktısı (sadece aktif I/O yapanlar)
sudo iotop -b -n 3 -d 1 -o >> $LOG_DIR/iotop_$DATE.log

echo "Kayıt tamamlandı: $(date)" >> $LOG_DIR/monitor.log

Bu scripti /usr/local/bin/sysmon.sh olarak kaydedin ve cron’a ekleyin:

chmod +x /usr/local/bin/sysmon.sh
echo "*/5 * * * * root /usr/local/bin/sysmon.sh" >> /etc/crontab

Yüksek Load Average Durumunda Ne Yapmalısınız?

Load average değerleri (1, 5 ve 15 dakikalık ortalamalar) sistemin ne kadar meşgul olduğunu gösterir. Genel kural şudur: Bu değer CPU çekirdek sayısını geçmemelidir. 4 çekirdekli bir sistemde load average 4.0’ın üzerine çıkıyorsa alarm zili çalıyor demektir.

# Anlık load average kontrolü
cat /proc/loadavg

# uptime ile birlikte görüntüleme
uptime

Load average yüksek olduğunda top ile I/O wait değerine bakın. Eğer:

  • %wa yüksekse: Disk I/O sorunu var, iotop ile araştırın.
  • %us yüksekse: Kullanıcı alanı proseslerinde sorun var, hangi proses CPU yiyor?
  • %sy yüksekse: Kernel düzeyinde sorun var, ağ veya dosya sistemi sorunları olabilir.
# Yüksek CPU kullanan prosesi bulmak ve detaylı incelemek
# Önce PID'i öğren
top -b -n 1 | head -20

# Sonra o prosesi daha detaylı incele
sudo strace -p <PID> -c

iotop ile Disk Doluluğu Senaryosu

Bir diğer sık karşılaşılan senaryo, diskin hızla dolmasıdır. Hangi prosesin sürekli yazdığını bulmak için iotop idealdir:

sudo iotop -o -a

-a bayrağıyla birikimli yazma miktarına bakın. Saatler içinde en çok yazan proses genellikle suçludur. Bir kez bir log rotasyonu yapılandırılmamış uygulama, günde birkaç GB log yazıyordu. iotop -o -a ile 10 dakika içinde bunu tespit ettim ve logrotate yapılandırması ile sorunu çözdüm.

Alternatif Araçlar ve Karşılaştırma

top ve iotop‘un yanında bilmeniz gereken birkaç araç daha var:

  • iostat: Disk I/O istatistiklerini gösterir ama proses bazlı değil, cihaz bazlıdır. sysstat paketinin parçasıdır.
  • vmstat: Sanal bellek, I/O ve CPU istatistiklerini gösterir, tarihsel trend analizi için iyidir.
  • dstat: Hem iostat hem vmstat‘ı birleştiren, renkli ve esnek bir araçtır.
  • atop: Hem anlık hem de geçmiş sistem verilerini kaydeden gelişmiş bir izleme aracıdır.
  • glances: Python tabanlı, web arayüzü de sunan modern bir sistem izleme aracıdır.

Bu araçların hepsini bilmek faydalıdır ama günlük operasyonlar için top ve iotop ikilisi çoğu durumda yeterlidir.

Pratik İpuçları ve Kısayollar

Yıllar içinde öğrendiğim ve sık kullandığım bazı ipuçları:

Anlık sistem özetini tek satırda almak için:

echo "=== $(date) ===" && uptime && echo "--- Disk I/O ---" && sudo iotop -b -n 1 -o 2>/dev/null | head -15 && echo "--- Top Processes ---" && ps aux --sort=-%cpu | head -10

Belirli bir eşiğin üzerinde I/O yapan prosesleri tespit etmek:

sudo iotop -b -n 5 -d 2 | grep -v "0.00 K/s.*0.00 K/s"

Watch komutu ile periyodik sistem durumu kontrolü:

watch -n 2 'ps aux --sort=-%mem | head -15'

Sonuç

top ve iotop, her Linux sistem yöneticisinin temel silahları olmalıdır. top size sistemin genel nabzını tutarken, iotop disk I/O darboğazlarını tespit etmede eşsizdir. Bu iki aracı birlikte ve etkin biçimde kullanabilmek, sorun giderme sürenizi dramatik biçimde kısaltır.

Benim önerim şu: Her gün birkaç dakikanızı bu araçları çalıştırarak sunucularınızın “normal” davranışını öğrenmeye ayırın. Ne zaman bir şeyler ters gittiğini ancak normalin nasıl göründüğünü bilerek anlayabilirsiniz. Load average’ınızın tipik değerleri ne, MySQL normalde ne kadar I/O yapıyor, hangi saatlerde trafik yoğun, bunları ezberleyin. O zaman bir sorun çıktığında “bu farklı” diyebilmek için sezgileriniz gelişmiş olur.

Son olarak, bu araçları yalnızca sorun çıktığında değil, proaktif izleme amacıyla da kullanın. Sorunları oluşmadan önce yakalamak, sizi hem gece yarısı uyandırılmaktan hem de müşterilerinize açıklama yapmak zorunda kalmaktan kurtarır.

Yorum yapın