iostat ve dstat ile Disk G/Ç İzleme: Darboğazları Belirleme
Giriş
Disk giriş-çıkışını izlemek, bir barındırma altyapısında sunucuları çalıştırırken en önemli görevlerden biridir. Disk alt sistemi, web hizmetlerinin, veritabanlarının, sanal makinelerin, kapsayıcıların ve arka plan görevlerinin performansını doğrudan etkiler. Yeterli RAM ve boş CPU kaynakları olsa bile, aşırı yüklenmiş veya yavaş bir disk, tüm sistemin darboğazı haline gelebilir.
Bu kılavuz, sistem yöneticileri, DevOps mühendisleri ve sunucu sahiplerine yöneliktir. Kılavuzda, iostat ve dstat yardımcı programları, çalışma ilkeleri, ölçümlerin yorumlanması ve bir barındırma ortamında disk G/Ç darboğazlarını bulmaya yönelik pratik bir yaklaşım ele alınmaktadır.
Genel bilgiler ve çalışma ilkeleri
Sunucu altyapısında disk I/O
Disk giriş-çıkışı, blok aygıtlara yönelik veri okuma ve yazma işlemlerini içerir. Gerçek barındırma senaryolarında, disk alt sistemindeki yük çoğunlukla şunlardan kaynaklanır:
- veritabanları (MySQL, MariaDB, PostgreSQL);
- dinamik içerikli web uygulamaları;
- posta hizmetleri;
- veri yedekleme ve senkronizasyon;
- günlük kaydı;
- takas ve geçici dosyalar;
- kullanıcı komut dosyaları ve cron işleri.
Yavaş depolama aygıtları, işlemler arasındaki yüksek çekişme, optimal olmayan G/Ç zamanlayıcıları, hatalı önbellekleme işlemi veya sanallaştırma özellikleri nedeniyle darboğazlar ortaya çıkabilir.
iostat ve dstat'ın amacı
iostat, CPU ve disk aygıt yükü hakkında ayrıntılı istatistikler toplamak üzere tasarlanmış, sysstat paketine ait bir yardımcı programdır. iostat'ın temel görevi, belirli bir diskin ne kadar yoğun kullanıldığını, istek kuyruğu olup olmadığını ve işlemler için ortalama bekleme süresinin ne kadar olduğunu göstermektir.
dstat, CPU, bellek, disk, ağ ve işlemler gibi çeşitli alt sistemlerdeki gerçek zamanlı istatistikleri aynı anda görüntüleyen çok yönlü bir izleme aracıdır. Disk etkinliğini genel sunucu yüküyle ilişkilendirmenize olanak tanır ve hızlı tanılama için kullanışlıdır.
Bu yardımcı programlar birbirini tamamlar: iostat, aygıt düzeyinde doğru bir tablo sunarken, dstat tüm sistemin genel durumunu gösterir.
Ön koşullar ve gereksinimler
Analize başlamadan önce aşağıdaki koşulların karşılanması gerekir:
- Linux işletim sistemi (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Sunucuya SSH erişimi.
- Root ayrıcalıkları veya sudo aracılığıyla komutları çalıştırma yeteneği.
İşletim sistemi sürümünü kontrol etme:
cat /etc/os-release
Gerekli paketlerin yüklenmesi:
Debian / Ubuntu:
sudo apt update sudo apt install sysstat dstat
CentOS / RHEL / AlmaLinux / Rocky Linux:
sudo yum install sysstat dstat # or sudo dnf install sysstat dstat
sysstat çalışmasının kontrol edilmesi:
systemctl status sysstat
Hizmet etkinse, ilgili bilgiler görüntülenecektir:
root@server:~# systemctl status sysstat ● sysstat.service - Resets System Activity Logs Loaded: loaded (/usr/lib/systemd/system/sysstat.service; enabled; preset: enabled) Active: active (exited) since Tue 2025-12-23 10:35:35 UTC; 16min ago Docs: man:sa1(8) man:sadc(8) man:sar(1) Main PID: 731 (code=exited, status=0/SUCCESS) CPU: 7ms
Adım adım inceleme ve analiz
iostat kullanarak temel disk analizi
iostat yardımcı programı, CPU ve disk alt sistemi yükünü değerlendirmek ve I/O gecikmelerini ve kuyruklarını belirlemek için kullanılır.
Sözdizimi:
sudo iostat [options] [interval] [count]
En sık kullanılan parametreler:
- -x - genişletilmiş istatistikler;
- -d - yalnızca disk verileri;
- -k - kilobayt cinsinden çıktı;
- -p - bölümler veya belirli bir aygıt için istatistikler.
Temel örnek:
sudo iostat -x
Dinamik analiz:
sudo iostat -xk 5 3
Aralık ve örnek sayısı, sistemin başlatılmasından bu yana ortalama durum yerine zaman içindeki yük değişikliklerini izlemenizi sağlar.
iostat çıktı örneği

Önemli CPU ölçütleri:
- %iowait - CPU'nun I/O işlemlerini beklerken boşta kaldığı sürenin yüzdesi. Bu metrikteki bir artış, diskin genel performans üzerindeki etkisini gösterir.
- %steal - sanal sunucular için önemlidir ve çalınan CPU süresini gösterir.
Önemli disk metrikleri:
- %util - diskin meşgul olduğu sürenin yüzdesi. Değerlerin sürekli olarak %80-90'ı aşması, aygıtın doymuş olduğunu gösterir.
- r_await - okuma işlemlerinin tamamlanması için geçen ortalama süre (ms) (kuyruk süresi dahil).
- w_await - yazma işlemlerinin tamamlanması için geçen ortalama süre (ms) (kuyruk süresi dahil).
- aqu-sz - (ortalama kuyruk boyutu), disk için istek kuyruğunun ortalama uzunluğudur. 1'den büyük bir değer, kuyruğun oluşmaya başladığını gösterir. HDD için 2-4'ten büyük, SSD için 1-2'den büyük bir değer, diskin yüke yetişemediğinin işaretidir.
await ve svctm arasındaki fark, gecikmenin fiziksel disk hızından ziyade kuyruktan kaynaklanıp kaynaklanmadığını gösterir.
Await değeri svctm değerini sadece biraz aşıyorsa (fark < %20-30), gecikmelerin başlıca nedeni diskin kendisidir (yavaş fiziksel okuma/yazma).
Await değeri svctm değerinden önemli ölçüde yüksekse (fark > %50-100), ana gecikme istek kuyruğundan kaynaklanmaktadır (aqu-sz değeri yüksek olacaktır); bu durum, çok sayıda paralel istek nedeniyle diskin aşırı yüklendiğini gösterir.
iostat'ın modern sürümlerinde (örnekte olduğu gibi), svctm değeri hesaplanması güvenilir olmadığı için görüntülenmez. Analiz için await + aqu-sz kombinasyonu kullanılır: düşük aqu-sz (~0) değerine sahip yüksek await değeri, diskin yavaş olduğunu gösterir; yüksek aqu-sz (>1) değerine sahip yüksek await değeri ise diskin isteklerle aşırı yüklü olduğunu gösterir.
dstat ile genel durumu analiz etme
dstat, gerçek zamanlı sistem gözlemi ve disk yükünü diğer kaynaklarla ilişkilendirmek için kullanılır.
Komut örnekleri:
dstat -d dstat --disk-util dstat -rd --disk-util dstat -D vda,sda
Aralıklı çalıştırma örneği:
dstat -rd --disk-util 1 5
Analiz yaparken şunlara dikkat edin:
- CPU'daki iowait değerindeki artış;
- okuma veya yazma pikleri;
- ağ ve disk faaliyetlerinin eşzamanlı olması (yedeklemeler, senkronizasyon).
Example dstat output: dstat -rd --disk-util 1 5 --io/total- -dsk/total- vda- read write| read write|util 0 4.00 | 0 76k|0.50 0 29.5 | 0 240k|0.20 0 1.00 | 0 4096B| 0 0 0 | 0 0 | 0 0 1.00 | 0 32k| 0
dstat ve iostat'ın karşılaştırılması:
| Kriterler | iostat | dstat |
|---|---|---|
| Veri Doğruluğu | Yüksek | Yüksek |
| Gerçek zamanlı mod | Sınırlı | Mükemmel |
| Geçmiş veriler | Evet (sar) | Hayır |
| Renkli çıktı | Hayır | Evet |
| Genişletilebilirlik | Hayır | Eklentiler |
| CSV dışa aktarma | Hayır | Evet |
| CPU yükü | Düşük | Orta |
dstat, iostat'ta her zaman fark edilmeyen kısa süreli yük artışları için özellikle kullanışlıdır.
Disk I/O darboğazlarını belirleme
Aşağıdaki komutlar hızlı tanılama için kullanılır:
sudo iostat -mx 2 sudo iostat -p /dev/vda 2 5 sar -d 1 5
Sorunun tipik belirtileri:
- %util değerinin uzun süre %80'in üzerinde kalması;
- SSD için 20-30 ms'nin üzerinde veya HDD için 50-100 ms'nin üzerinde await değeri;
- aqu-sz değerinin 2-3'ten büyük olması, kuyruk birikimini gösterir.
Örnekte /dev/vda diski kullanılmaktadır – bu, sanal bir sunucudaki sanal bir disktir (VirtIO).
Fiziksel sunucularda ve diğer ortamlarda disklerin isimleri farklı olabilir:
- /dev/sdX (örn., /dev/sda) - normal SATA/SAS/USB diskler
- /dev/nvmeXnY (örn., /dev/nvme0n1) - NVMe sürücüler
- /dev/vdX - sanal diskler
Yüksek disk G/Ç yüküne neden olan işlemleri belirleme
iostat ve dstat komutlarını kullanarak disk alt sisteminde aşırı yük olduğunu tespit ettikten sonra, bir sonraki adım yoğun okuma veya yazma işlemlerini başlatan belirli işlemleri belirlemektir. Yük kaynağını belirlemeden aygıt düzeyinde yapılan analiz, doğru düzeltici önlemlerin alınmasına olanak sağlamaz.
iotop'u kullanma
Diski aktif olarak kullanan işlemleri bulmak için kullanılan başlıca araç, iotop yardımcı programıdır.
sudo iotop -ao
Komut parametreleri:
-a - işlemin başladığı andan itibaren kümülatif istatistikleri görüntüler; bu, uzun süreli G/Ç işlemleri gerçekleştiren arka plan görevlerini belirlemeye yardımcı olur;
-o - yalnızca o anda G/Ç işlemleri gerçekleştiren işlemleri gösterir.
Örnek çıktı:
TID 41PRIO USER41DISK READ41DISK WRITE41SWAPIN41IO>4141COMMAND 1105641be/441mysql410.00 B 413.44 M410.00 %410.76 %41mysqld 258041be/441rsync410.00 B4123.48 M410.00 %411.17 %41rsync
iotop çıktısında, DISK READ, DISK WRITE alanlarına ve I/O süresi yüzdesine özellikle dikkat edilmelidir. Genellikle yükün kaynağı veritabanı işlemleri, yedekleme işlemleri, dosya senkronizasyon işlemleri veya kullanıcı komut dosyalarıdır.
İşlem başına I/O analizi için pidstat kullanımı
Daha sistematik ve tekrarlanabilir bir analiz için, sysstat paketinin bir parçası olan pidstat kullanılabilir.
pidstat -d 1
Bu komut, her işlem için bir saniye aralıklarla disk I/O istatistiklerini gösterir. Bu, kısa süreli etkinlik artışlarını belirlemek ve bunları diğer sistem metrikleriyle ilişkilendirmek için kullanışlıdır.
pidstat, yükün periyodik olarak ortaya çıktığı ve iotop tarafından her zaman yakalanamayabileceği durumlarda özellikle yararlıdır.
Dosya etkinliği analizi için lsof kullanımı
Bir işlemin hangi dosya veya dizinlerle çalıştığını anlamanın gerekli olduğu durumlarda, lsof yardımcı programı kullanılır.
lsof +D /path
Burada/path, aktif dosyaların ve işlemlerin tanımlanması gereken belirli bir dizindir. Örneğin, bu bir veritabanı dizini, bir yedekleme dizini veya geçici dosyalar alanı olabilir.
Bu komut, hangi işlemlerin şu anda dosya tanımlayıcılarını tuttuğunu ve belirtilen yol içinde işlemleri gerçekleştirdiğini belirlemenizi sağlar; bu, özellikle uygulamalardan gelen yükü analiz ederken yararlıdır.
Yük bağlamını analiz etme
Disk etkinliği yüksek bir işlemi tespit etmek nihai hedef değildir. Yönetici, işlemin bağlamını değerlendirmelidir:
- bu hizmet için yük beklenen bir durum mu;
- işlem uygun bir zamanda mı çalışıyor (örneğin, yoğun saatlerde yedeklemeler);
- zamanlama veya çalışma parametreleri değiştirilebilir mi;
- I/O önceliğinin düşürülmesi kabul edilebilir mi?
Bu yaklaşım, normal yük ile sorunlu yükü birbirinden ayırt etmeyi ve doğru optimizasyon yöntemini seçmeyi mümkün kılar.
Analizin doğruluğunun doğrulanması
Gerçekleştirilen analizin doğruluğu şu durumlarda teyit edilir:
- iostat'taki %util, await veya aqu-sz değerlerindeki tepe noktaları, iotop veya pidstat'taki işlem etkinliği ile zaman açısından çakışıyorsa;
- dstat'taki iowait değerindeki artış, CPU yüküyle değil, disk işlemleriyle aynı zamana denk gelirse;
- tekrar edilen ölçümler, tekrarlanabilir bir yük modeli gösteriyorsa.
Veri toplama ve sonraki analizler için günlük kaydı kullanılması önerilir:
sar -d 1 100 > io.log
Bu, belirli bir süre boyunca disk alt sisteminin davranışını kaydetmenize ve olayları araştırırken bu verileri kullanmanıza olanak tanır.
Tipik hatalar ve operasyonel özellikler
Barındırma sunucularının işletilmesinde en sık karşılaşılan sorunlar şunlardır:
- yoğun saatlerde yedekleme ve veri senkronizasyonu işlemleri;
- yeterli RAM olmadığında swap alanının yoğun kullanımı;
- sürücü türü için uygun olmayan bir I/O zamanlayıcı;
- arka plan görevleri için önceliklendirme eksikliği.
Arka plan işlemlerinin performans üzerindeki etkisini azaltmak için, bir işlemin I/O önceliğini yönetmek üzere ionice yardımcı programının kullanılması önerilir; bu sayede arka plan görevlerinin sistem tepki süresi üzerindeki etkisini azaltabilirsiniz.
Kullanım örneği:
ionice -c3 rsync /source /destination
Ana öncelikler:
- -c1 (gerçek zamanlı) - en yüksek öncelik. Gecikmenin kritik olduğu görevler için kullanılır. Diğer işlemleri tamamen engelleyebilir.
- -c2 (en iyi çaba) - çoğu işlem için varsayılan ayardır. Öncelik seviyesinin ayarlanmasına izin verir (0 (yüksek) ile 7 (düşük) arasında).
- -c3 (boşta) - arka plan. İşlem, yalnızca başka hiçbir işlem diski kullanmadığında diske erişebilir. Arka plan işlemleri (yedeklemeler, veri senkronizasyonu) için güvenli ve önerilir.
Bu örnekte, rsync işlemi en düşük I/O önceliğiyle çalışır ve temel sistem işlemleri üzerindeki etkisini en aza indirir. ionice kullanımı, arka plan işlemlerini tamamen devre dışı bırakmaya gerek kalmadan bunların etkisini en aza indirmenizi sağlar.
Sonuç
Disk I/O'sunu izlemek, bir sunucu altyapısının performansını ve kararlılığını sürdürmenin ayrılmaz bir parçasıdır. iostat ve dstat yardımcı programları, aşırı yük durumlarını belirlemenize ve disk alt sisteminin durumunu değerlendirmenize olanak tanırken, iotop, pidstat ve lsof gibi araçlar belirli işlemleri ve bunların yükünün niteliğini belirlemenize yardımcı olur.
Açıklanan yaklaşımın düzenli olarak uygulanması, metriklerin doğru şekilde yorumlanması ve I/O önceliklerinin yönetimi, hizmet yanıt sürelerini kısaltmaya, yük öngörülebilirliğini artırmaya ve SLA gerekliliklerine uyumu sağlamaya yardımcı olur. Sonuç olarak, bu metodoloji, merkezi izleme ve I/O yük analizinin otomasyonu yoluyla genişletilebilir.