atop ile Anlık ve Geçmiş Kaynak Kullanımı Analizi
Bir üretim sunucusunda bellek tüketiminin gece yarısı zirve yaptığını, sabah geldiğinizde ise her şeyin normal göründüğünü biliyor musunuz? İşte tam bu senaryoda top veya htop sizi kurtaramaz, çünkü o anlık görüntü çoktan geçmişte kalmıştır. atop ise hem anlık hem de geçmişe dönük sistem kaynak analizini tek bir araçta sunan, özellikle post-mortem analizlerde hayat kurtaran bir izleme aracıdır.
atop Nedir ve Neden Kullanmalısınız
atop, Advanced System and Process Monitor kelimelerinin kısaltmasıdır. Hollandalı sistem yöneticisi Gerlof Langeveld tarafından geliştirilmiş olan bu araç, standart izleme araçlarından temel bir farklılıkla öne çıkar: kalıcı kayıt. Varsayılan kurulumda atop, sistem istatistiklerini düzenli aralıklarla diske yazar ve bu sayede saatler, hatta günler öncesindeki kaynak kullanım verilerine erişebilirsiniz.
htop ile karşılaştırdığınızda farkı hemen anlarsınız. htop size şu anı gösterir. atop ise şu anı, geçmişi ve bu ikisi arasındaki farkı gösterir. Üstelik CPU, bellek ve disk I/O bilgilerinin yanı sıra ağ arayüzü istatistiklerini, blok cihaz aktivitesini ve hatta container istatistiklerini de raporlayabilir.
Türkiye’deki birçok kurumsal ortamda gördüğüm kadarıyla sysadmin ekipleri performans sorunlarını ancak kullanıcı şikayeti aldıktan sonra araştırmaya başlıyor. atop bu reaktif döngüyü kırmanın en kolay yollarından biridir.
Kurulum
Çoğu dağıtımda atop paket depolarında mevcuttur:
# Debian/Ubuntu
sudo apt update && sudo apt install atop
# RHEL/CentOS/AlmaLinux
sudo dnf install atop
# Arch Linux
sudo pacman -S atop
Kurulumun ardından atop servisini etkinleştirmenizi şiddetle tavsiye ederim. Bu servis arka planda çalışarak verileri otomatik olarak kayıt altına alır:
sudo systemctl enable --now atop
sudo systemctl status atop
Varsayılan kayıt dosyaları /var/log/atop/ dizininde atop_YYYYMMDD formatında tutulur. Kayıt aralığını değiştirmek isterseniz /etc/default/atop (Debian tabanlı) veya /etc/sysconfig/atop (RHEL tabanlı) dosyasını düzenleyebilirsiniz.
# /etc/default/atop içeriği örneği
INTERVAL=30 # saniye cinsinden kayıt aralığı
LOGPATH=/var/log/atop
OUTFILE=${LOGPATH}/daily.log
Temel Kullanım ve Arayüz Okuma
atop’u çalıştırmak basittir:
atop
Açılan arayüz iki ana bölümden oluşur. Üst bölüm sistem genelini özetlerken alt bölüm süreç listesini gösterir.
Üst bölümde şu satırları görürsünüz:
- PRC: Toplam süreç sayısı, çalışan ve uyuyan süreçler
- CPU: Her çekirdek için kullanım yüzdesi (user, system, idle, wait)
- CPL: CPU load average ve context switch sayısı
- MEM: Fiziksel bellek kullanımı (toplam, boş, önbellek, tampon)
- SWP: Swap kullanımı
- DSK: Disk I/O (okuma/yazma işlemi sayısı ve bant genişliği)
- NET: Ağ arayüzü başına gelen/giden paket ve byte miktarı
Arayüzde gezinmek için kullanabileceğiniz tuşlar:
- g: Genel görünüm (varsayılan)
- m: Bellek odaklı süreç sıralaması
- d: Disk I/O odaklı sıralama
- n: Ağ kullanımına göre sıralama
- c: Komut satırı detaylarını göster
- u: Kullanıcıya göre filtrele
- k: Belirli bir sürecin sinyalini gönder
- q: Çıkış
Komut Satırı Parametreleri
atop, terminal üzerinden doğrudan farklı modlarda çalıştırılabilir:
-a: Tüm süreçleri göster, aktif olmayanlar dahil -r: Kayıtlı log dosyasını oynat (replay modu) -b: Belirli bir saat/tarihten itibaren başla -e: Belirli bir saat/tarihe kadar göster -i: Örnekleme aralığını saniye cinsinden ayarla -P: Belirli alt sistemlerin çıktısını al (CPU, MEM, DSK vb.) -R: İnsan tarafından okunabilir format -n: Gösterilecek örnek sayısı -L: Süreç listesindeki sütun sayısını sınırla –top: Belirtilen metriğe göre en yüksek süreçleri göster
Pratikte sık kullandığım kombinasyonlar:
# 5 saniyelik örnekleme ile başlat
atop 5
# 10 örnek topla ve çık
atop -n 10 5
# Dün akşam 23:00'dan bu sabah 08:00'a kadar olan veriyi oynat
atop -r /var/log/atop/atop_$(date -d "yesterday" +%Y%m%d) -b 23:00 -e 08:00
Geçmiş Analizi: Replay Modu
atop’un en güçlü özelliği budur. Bir sorun yaşandıktan sonra neyin ne zaman ne kadar kaynak tükettiğini görmek için kayıt dosyalarını replay modunda açarsınız:
# Bugünün kayıt dosyasını aç
atop -r /var/log/atop/atop_$(date +%Y%m%d)
# Belirli bir tarihin kaydını aç
atop -r /var/log/atop/atop_20241115
# Replay modunda belirli zaman dilimine git
atop -r /var/log/atop/atop_20241115 -b 14:30 -e 16:00
Replay modunda t tuşuna basarak bir sonraki örnekleme noktasına, T ile bir öncekine geçebilirsiniz. Bu sayede olayın tam olarak ne zaman başladığını dakika dakika takip edebilirsiniz.
Metin Tabanlı Çıktı ile Otomasyon
atop’u script içinde kullanmak veya belirli metrikleri loglamak için -P parametresi son derece işlevseldir:
# CPU ve bellek bilgisini metin olarak çıkar
atop -P CPU,MEM 1 5
# Disk I/O istatistiklerini al
atop -P DSK 2 3
# Belirli bir kayıt dosyasından CPU verilerini çek
atop -r /var/log/atop/atop_$(date +%Y%m%d) -P CPU 1 1
Bu çıktıları awk veya grep ile işleyerek kendi izleme scriptlerinizi yazabilirsiniz:
#!/bin/bash
# Dün gece bellek kullanımı zirve anını bul
LOGFILE="/var/log/atop/atop_$(date -d 'yesterday' +%Y%m%d)"
atop -r "$LOGFILE" -P MEM 60 1440 2>/dev/null |
awk '$1=="MEM" {
used = $5
total = $3
pct = (used/total)*100
if (pct > max_pct) {
max_pct = pct
max_line = $0
}
}
END {
print "Peak memory usage:"
print max_line
printf "Usage: %.1f%%n", max_pct
}'
Gerçek Dünya Senaryosu 1: Gece Yarısı Bellek Sızıntısı
Bir fintech müşterisinde Java tabanlı bir uygulama her gece 02:00-04:00 arasında belleği dolduruyor, OOM killer devreye giriyor ve uygulama yeniden başlıyordu. Sabahları kimse fark etmiyordu çünkü uygulama zaten ayaktaydı. Müşteri bunu ancak transaction loglarındaki boşluklardan keşfetti.
atop replay modu ile analiz tam böyle yapıldı:
# Olayın yaşandığı gece kayıtlarını incele
atop -r /var/log/atop/atop_20241112 -b 01:30 -e 04:30
# Replay modunda 'm' tuşuna basarak bellek sıralamasını aktifleştir
# ve hangi Java sürecinin belleği tükettiğini gözlemle
Ardından daha detaylı analiz için:
# Belirli pid'e ait süreç geçmişini metne dök
atop -r /var/log/atop/atop_20241112 -P PRM 60 180 | grep "java"
Bu analiz sonucunda heap dump almak için doğru zaman penceresini tespit ettik ve problemi uygulama ekibine gösterdik. Soyut bir “bazen bellek doluyordu” şikayeti yerine somut verilerle konuştuk.
Gerçek Dünya Senaryosu 2: Disk I/O Darboğazı Tespiti
Bir e-ticaret platformunda yoğun kampanya saatlerinde veritabanı sorguları aniden yavaşlıyordu. DBA ekibi sorgu optimizasyonunu suçlarken altyapı ekibi disk kapasitesinin yeterli olduğunu söylüyordu. atop ile aradaki gerçeği bulduk:
# O günün disk I/O verilerini çek
atop -r /var/log/atop/atop_20241118 -P DSK 60 1440 |
awk '$1=="DSK" && $3=="sda" {
print $2, "read:", $7, "write:", $9, "util%:", $NF
}' | sort -k8 -rn | head -20
Çıktı bize ssd’nin yüzde 94-98 utilization seviyesine ulaştığı zaman aralıklarını gösterdi. Sorun disk kapasitesi değil, I/O bant genişliğiydi. PostgreSQL WAL yazma işlemleri ile anlık yedekleme zamanlaması çakışıyordu.
# Hangi süreçlerin disk I/O yaptığını aynı zaman dilimine bak
atop -r /var/log/atop/atop_20241118 -b 15:00 -e 16:00
# Arayüzde 'd' tuşu ile disk I/O sıralaması
Gerçek Dünya Senaryosu 3: CPU Steal Time Analizi
Sanal makine ortamlarında zaman zaman CPU steal time yükselmesi yaşanır. Bu, hypervisor’ın CPU’yu başka VM’lere tahsis etmesinden kaynaklanır ve atop bunu güzelce gösterir:
# CPU istatistiklerini metne dök, steal time'a bak
atop -r /var/log/atop/atop_20241120 -P CPU 30 2880 |
awk '$1=="CPU" {
steal = $9
if (steal > 10) {
print "HIGH STEAL at", $2, ":", steal"%"
}
}'
Eğer steal time sürekli yüzde 10’un üzerindeyse, bulut sağlayıcınızda fiziksel sunucu üzerinde overcommit var demektir ve bu VM’i farklı bir host’a taşıması için destek açmanız gerekebilir.
atopsar: atop’un Sar Alternatifi
atop paketi ile birlikte gelen atopsar komutu, sar benzeri raporlama imkanı sunar. Komut satırından doğrudan okunabilir raporlar üretmek için kullanılır:
# CPU raporunu göster
atopsar -c
# Bellek raporunu göster
atopsar -m
# Disk I/O raporu
atopsar -d
# Ağ istatistikleri
atopsar -n
# Belirli bir tarihin raporunu üret
atopsar -r /var/log/atop/atop_20241115 -c -b 10:00 -e 18:00
atopsar çıktısı zaman damgalıdır ve belirli zaman dilimleri için ortalama değerleri gösterir. Bu özellik özellikle kapasite planlama raporları için çok kullanışlıdır.
Log Rotasyonu ve Depolama Yönetimi
atop logları zamanla ciddi yer kaplayabilir. Varsayılan ayarlarla her gün yaklaşık 20-50 MB arasında veri birikir. Bunu kontrol altında tutmak için:
# Log boyutlarını kontrol et
du -sh /var/log/atop/*
# Eski logları temizle (30 günden eski olanlar)
find /var/log/atop/ -name "atop_*" -mtime +30 -delete
atop servisinin kendisi de log rotasyonu için bir script içerir. /etc/cron.d/atop veya /usr/share/atop/atop.daily dosyasını inceleyerek rotasyon politikasını özelleştirebilirsiniz.
# Saklama süresini 14 güne düşür
# /etc/default/atop veya /etc/sysconfig/atop dosyasında
LOGGENERATIONS=14
Prometheus ve Grafana ile Entegrasyon
Modern gözlemlenebilirlik (observability) altyapısında atop verilerini Prometheus’a aktarmak için atop-exporter gibi araçlar kullanılabilir. Ancak basit bir yöntem olarak atop çıktısını parse edip Prometheus text format’a çeviren kendi scripti yazmak da mümkündür:
#!/bin/bash
# Basit atop metrik exporter
METRICS_FILE="/var/lib/node_exporter/textfile_collector/atop_metrics.prom"
CPU_DATA=$(atop -P CPU 1 1 2>/dev/null | grep "^CPU" | head -1)
MEM_DATA=$(atop -P MEM 1 1 2>/dev/null | grep "^MEM" | head -1)
CPU_USR=$(echo "$CPU_DATA" | awk '{print $5}')
CPU_SYS=$(echo "$CPU_DATA" | awk '{print $6}')
MEM_USED=$(echo "$MEM_DATA" | awk '{print $5}')
MEM_TOTAL=$(echo "$MEM_DATA" | awk '{print $3}')
cat > "$METRICS_FILE" << EOF
# HELP atop_cpu_user_percent CPU user time percentage
# TYPE atop_cpu_user_percent gauge
atop_cpu_user_percent $CPU_USR
# HELP atop_cpu_system_percent CPU system time percentage
# TYPE atop_cpu_system_percent gauge
atop_cpu_system_percent $CPU_SYS
# HELP atop_memory_used_bytes Memory used in bytes
# TYPE atop_memory_used_bytes gauge
atop_memory_used_bytes $MEM_USED
# HELP atop_memory_total_bytes Total memory in bytes
# TYPE atop_memory_total_bytes gauge
atop_memory_total_bytes $MEM_TOTAL
EOF
Bu scripti cron’a ekleyerek Prometheus’un node_exporter textfile_collector dizinine düzenli metrikler yazabilirsiniz.
Performans Karşılaştırması: atop vs Alternatifleri
Sıkça sorulan soruya direkt cevap vereyim: ne zaman atop, ne zaman başka bir şey kullanmalısınız?
- Anlık basit izleme:
topveyahtopyeterli, atop’a gerek yok - Geçmiş analizi ve post-mortem: atop’un rakibi yok, alternatif olarak
sarkullanılabilir ama daha az detaylıdır - Uzun vadeli trend analizi ve görselleştirme: Prometheus + Grafana daha iyi, ancak atop ile birlikte kullanılabilir
- Container ortamları: cAdvisor daha uygun, atop container metrikleri için ek konfigürasyon gerektirir
- Kernel level I/O analizi:
iostat,iotopveyablktracedaha derine iner
atop’un yerini doldurmak zor çünkü kurulumu son derece basit ve ek bir altyapı gerektirmiyor. Bir sisteme ssh açtığınızda atop kuruluysa ve servisi çalışıyorsa, o sistemin geçmişine bakabilirsiniz. Bu basitlik çok değerlidir.
atop Konfigürasyon İpuçları
Bazı ince ayarlar günlük kullanımı önemli ölçüde kolaylaştırır:
# ~/.atoprc dosyası ile kişisel ayarlar
# Varsayılan sıralama belleğe göre olsun
sortorder m
# Renk eşiklerini özelleştir (yüzde cinsinden)
cpucritical 80
memcritical 85
dskcritical 70
# Çıkmadan önce onay isteme
Kritik sistemler için atop alarmı oluşturmak da mümkündür. Örneğin bellek kullanımı belirli bir eşiği aştığında mail atmak:
#!/bin/bash
# /usr/local/bin/atop-alert.sh
THRESHOLD=90
MEM_DATA=$(atop -P MEM 1 1 2>/dev/null | grep "^MEM" | head -1)
MEM_USED=$(echo "$MEM_DATA" | awk '{print $5}')
MEM_TOTAL=$(echo "$MEM_DATA" | awk '{print $3}')
MEM_PCT=$(echo "scale=0; $MEM_USED * 100 / $MEM_TOTAL" | bc)
if [ "$MEM_PCT" -gt "$THRESHOLD" ]; then
echo "UYARI: $(hostname) sunucusunda bellek kullanimi $MEM_PCT% seviyesinde!" |
mail -s "Kritik Bellek Uyarisi - $(hostname)" [email protected]
fi
Bu scripti 5 dakikada bir cron’dan çalıştırmak için:
*/5 * * * * root /usr/local/bin/atop-alert.sh
Sonuç
atop, sistem yöneticiliği araç kutusunun vazgeçilmez parçalarından biridir. Kurulumu beş dakika, öğrenmesi ise bir-iki saat sürer; ancak sağladığı değer bununla kıyaslanamaz. Özellikle Türkiye’deki kurumsal ortamlarda gördüğüm en büyük eksiklik, performans sorunlarının geçmişe dönük analiz edilememesi. “Dün bir şeyler oldu ama ne olduğunu bilmiyoruz” durumu, atop servisi aktif olan bir sistemde yaşanmaz.
Yapmanız gereken minimum şey şu: yönettiğiniz her Linux sunucusuna atop kurun, servisi etkinleştirin ve log rotasyonunu makul bir süreye (14-30 gün) ayarlayın. Bu kadar. Geri kalanını sorun çıktığında öğrenirsiniz; çünkü o gün elinizdeki veri sizi kurtaracak.
Bir de şunu ekleyeyim: atop verilerini düzenli olarak inceleme alışkanlığı edinin, sadece sorun çıktığında değil. Haftalık beş dakikanızı geçen haftanın atop loglarına ayırırsanız, büyük problemleri çıkmadan önce fark etmeye başlarsınız. Bu reaktif olmaktan proaktif olmaya geçişin en basit yollarından biridir.
