Disk I/O İzleme: iostat ve dstat Kullanımı
Giriş
Disk girdi-çıktı (disk I/O) izleme, barındırma altyapısında sunucuların işletilmesindeki temel görevlerden biridir. Disk alt sistemi; web hizmetlerinin, veritabanlarının, sanal makinelerin, konteynerlerin 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 sahipleri için hazırlanmıştır. iostat ve dstat araçlarını, çalışma ilkelerini, metriklerin yorumlanmasını ve barındırma ortamında disk G/Ç darboğazlarını bulmaya yönelik pratik bir yaklaşımı kapsar.
Genel bilgiler ve çalışma ilkeleri
Sunucu altyapısında disk G/Ç
Disk girdi-çıktısı, blok aygıtlarına veri okuma ve yazma işlemlerini kapsar. Gerçek barındırma senaryolarında disk alt sistemi üzerindeki yük çoğunlukla şunlar tarafından oluşturulur:
- veritabanları (MySQL, MariaDB, PostgreSQL);
- dinamik içerikli web uygulamaları;
- e-posta hizmetleri;
- veri yedekleme ve eşitleme;
- günlük kaydı (logging);
- swap ve geçici dosyalar;
- kullanıcı betikleri ve cron görevleri.
Darboğazlar; yavaş depolama aygıtları, süreçler arasındaki yüksek çekişme, en uygun olmayan G/Ç zamanlayıcıları, önbelleğin hatalı çalışması veya sanallaştırmanın özellikleri nedeniyle ortaya çıkabilir.
iostat ve dstat'ın amacı
iostat, CPU ve disk aygıtlarının yüküne ilişkin ayrıntılı istatistikleri toplamak için tasarlanmış, sysstat paketinde yer alan bir araçtır. iostat'ın temel görevi, belirli bir diskin ne kadar yoğun kullanıldığını, bir istek kuyruğunun bulunup bulunmadığını ve işlemlerin ortalama bekleme süresini göstermektir.
dstat, CPU, bellek, disk, ağ ve süreçler gibi birden çok alt sistemin istatistiklerini aynı anda gerçek zamanlı olarak gösteren çok yönlü bir izleme aracıdır. Disk etkinliğini sunucunun genel yüküyle ilişkilendirmeye olanak tanır ve hızlı tanı için uygundur.
Bu araçlar birbirini tamamlar: iostat aygıt düzeyinde doğru bir tablo sunarken, dstat tüm sistemin bağlamını sağlar.
Ön koşullar ve gereksinimler
Analize başlamadan önce aşağıdaki koşullar karşılanmalıdır:
- Linux işletim sistemi (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Sunucuya SSH erişimi.
- Root yetkileri veya komutları sudo ile çalıştırabilme imkânı.
İşletim sistemi sürümünün kontrol edilmesi:
cat /etc/os-release
Gerekli paketlerin kurulumu:
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'ın çalışmasının kontrol edilmesi:
systemctl status sysstat
Hizmet etkinse ilgili bilgiler görüntülenir:
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 ile temel disk analizi
iostat aracı, CPU ve disk alt sisteminin yükünü değerlendirmek, ayrıca G/Ç gecikmelerini ve kuyruklarını tespit etmek 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 - çıktının kilobayt cinsinden verilmesi;
- -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ı, sistem açılışından bu yana ortalama durumu değil, yükün zaman içindeki değişimini izlemeye olanak tanır.
Örnek iostat çıktısı

Temel CPU metrikleri:
- %iowait - CPU'nun G/Ç işlemlerinin tamamlanmasını beklerken boşta kaldığı sürenin yüzdesi. Bu metriğin artması, diskin genel performans üzerindeki etkisini gösterir.
- %steal - sanal sunucular için geçerlidir ve "çalınan" CPU süresini gösterir.
Temel disk metrikleri:
- %util - diskin meşgul olduğu sürenin yüzdesi. Sürekli olarak %80-90'ın üzerinde seyreden değerler aygıtın doygunluğa ulaştığını gösterir.
- r_await - okuma işlemlerinin tamamlanması için geçen ortalama süre (ms) (kuyrukta bekleme süresi dahil).
- w_await - yazma işlemlerinin tamamlanması için geçen ortalama süre (ms) (kuyrukta bekleme süresi dahil).
- aqu-sz - (avg queue size) diskin istek kuyruğunun ortalama uzunluğu. > 1 değeri halihazırda bir kuyruğun oluştuğunu gösterir. HDD için > 2-4 / SSD için > 1-2 değeri, diskin yüke yetişemediğinin işaretidir.
await ile svctm arasındaki fark, gecikmenin diskin fiziksel hızından değil kuyruktan kaynaklanıp kaynaklanmadığını gösterir.
await, svctm'yi yalnızca az miktarda aşıyorsa (fark < %20-30), gecikmeler esas olarak diskin kendisinden kaynaklanır (yavaş fiziksel okuma/yazma).
await, svctm'den belirgin şekilde büyükse (fark > %50-100), ana gecikme istek kuyruğundan kaynaklanır (aqu-sz yüksek olacaktır); bu da çok sayıda paralel istek nedeniyle diskin aşırı yüklendiğini gösterir.
iostat'ın modern sürümlerinde (örnekteki gibi) svctm, hesaplaması güvenilir olmadığı için gösterilmez. Analiz için await + aqu-sz birleşimi kullanılır: düşük aqu-sz (~0) ile yüksek await yavaş bir diski gösterir; yüksek aqu-sz (>1) ile yüksek await ise diskin isteklerle aşırı yüklendiğini gösterir.
dstat ile genel tablonun analizi
dstat, sistemin gerçek zamanlı gözlemlenmesi ve disk yükünün diğer kaynaklarla ilişkilendirilmesi için kullanılır.
Komut örnekleri:
dstat -d dstat --disk-util dstat -rd --disk-util dstat -D vda,sda
Aralık belirtilerek çalıştırma örneği:
dstat -rd --disk-util 1 5
Analiz sırasında şunlara dikkat edin:
- CPU iowait değerindeki artış;
- okuma veya yazma tepeleri;
- eş zamanlı ağ ve disk etkinliği (yedeklemeler, eşitleme).
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 karşılaştırması:
| Kriter | 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 yararlıdır.
Disk G/Ç darboğazlarının tespiti
Hızlı tanı için aşağıdaki komutlar 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 olması;
- await değerinin SSD için 20-30 ms'nin, HDD için 50-100 ms'nin üzerinde olması;
- aqu-sz değerinin 2-3'ten büyük olması; bu, kuyrukta birikme olduğunu gösterir.
Örnekte /dev/vda diski kullanılmıştır – bu, sanal sunucudaki sanal bir disktir (VirtIO).
Fiziksel sunucularda ve diğer ortamlarda diskler farklı adlandırılmış olabilir:
- /dev/sdX (ör. /dev/sda) - olağan SATA/SAS/USB diskleri
- /dev/nvmeXnY (ör. /dev/nvme0n1) - NVMe sürücüleri
- /dev/vdX - sanal diskler
Yüksek disk G/Ç yüküne neden olan süreçlerin belirlenmesi
iostat ve dstat ile disk alt sisteminin aşırı yüklendiği tespit edildikten sonraki adım, yoğun okuma veya yazma işlemlerini başlatan belirli süreçleri belirlemektir. Yük kaynağını belirlemeden yalnızca aygıt düzeyinde yapılan analiz, doğru düzeltici eylemlerin gerçekleştirilmesine imkân vermez.
iotop kullanımı
Diski etkin olarak kullanan süreçleri bulmak için başlıca araç iotop'tur.
sudo iotop -ao
Komut parametreleri:
-a - sürecin başlangıcından itibaren birikimli istatistikleri gösterir; bu, uzun süreli G/Ç yapan arka plan görevlerinin belirlenmesine yardımcı olur;
-o - yalnızca o anda G/Ç işlemi gerçekleştiren süreçleri 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 özellikle DISK READ, DISK WRITE alanlarına ve G/Ç süresi yüzdesine dikkat edilmelidir. Genellikle yük kaynakları veritabanı süreçleri, yedekleme süreçleri, dosya eşitleme süreçleri veya kullanıcı betikleridir.
Süreç bazında G/Ç analizi için pidstat kullanımı
Daha biçimsel ve tekrarlanabilir bir analiz için sysstat paketinin bir parçası olan pidstat kullanılabilir.
pidstat -d 1
Bu komut, her süreç için disk G/Ç istatistiklerini bir saniyelik aralıklarla verir. Kısa süreli etkinlik tepelerini belirlemek ve bunları diğer sistem metrikleriyle ilişkilendirmek için uygundur.
pidstat, yükün periyodik olarak ortaya çıktığı ve iotop tarafından her zaman yakalanamadığı durumlarda özellikle yararlıdır.
Dosya etkinliği analizi için lsof kullanımı
Bir sürecin hangi belirli dosya veya dizinlerle çalıştığını anlamak gerektiğinde lsof aracı kullanılır.
lsof +D /path
Burada /path, içinde etkin dosya ve süreçlerin belirlenmesi gereken belirli bir dizindir. Örneğin bu, veritabanı dizini, yedekleme dizini veya geçici dosyalar alanı olabilir.
Komut, belirtilen yol içinde şu anda hangi süreçlerin dosya tanımlayıcılarını tuttuğunu ve işlem yaptığını belirlemeye olanak tanır; bu, uygulamalardan kaynaklanan yükün analizinde özellikle yararlıdır.
Yük bağlamının analizi
Yüksek disk etkinliğine sahip bir sürecin belirlenmesi nihai hedef değildir. Yönetici, sürecin çalışma bağlamını değerlendirmelidir:
- yükün bu hizmet için beklenen bir yük olup olmadığı;
- sürecin uygun bir zamanda çalışıp çalışmadığı (ör. yoğun saatlerde yedekleme);
- zamanlamanın veya çalışma parametrelerinin değiştirilip değiştirilemeyeceği;
- G/Ç önceliğinin düşürülmesinin kabul edilebilir olup olmadığı.
Bu yaklaşım, normal yük ile sorunlu yükü ayırt etmeyi ve doğru optimizasyon yöntemini seçmeyi mümkün kılar.
Analizin doğruluğunun teyit edilmesi
Yapılan analizin doğruluğu şu durumlarda teyit edilir:
- iostat'taki %util, await veya aqu-sz tepeleri zaman bakımından iotop veya pidstat'taki süreç etkinliğiyle örtüşüyorsa;
- dstat'taki iowait artışı CPU yüküyle değil disk işlemleriyle örtüşüyorsa;
- tekrarlanan ölçümler yeniden üretilebilir bir yük örüntüsü gösteriyorsa.
Verilerin biriktirilmesi ve sonraki analiz için günlük kaydı kullanılması önerilir:
sar -d 1 100 > io.log
Bu, disk alt sisteminin davranışını belirli bir süre boyunca kaydetmenize ve verileri olayları incelerken kullanmanıza olanak tanır.
Tipik hatalar ve işletim özellikleri
Barındırma sunucularının işletilmesi pratiğinde en sık karşılaşılan sorunlar şunlardır:
- yedeklemelerin ve veri eşitlemenin yoğun saatlerde çalıştırılması;
- RAM yetersizliği durumunda swap'ın yoğun kullanılması;
- sürücü türüne uygun olmayan bir G/Ç zamanlayıcısı;
- arka plan görevleri için önceliklendirme bulunmaması.
Arka plan süreçlerinin performans üzerindeki etkisini azaltmak için, bir sürecin G/Ç önceliğini yönetmeye yarayan ionice aracının kullanılması önerilir; bu, arka plan görevlerinin sistemin yanıt verebilirliği üzerindeki etkisini hafifletmeyi sağlar.
Kullanım örneği:
ionice -c3 rsync /source /destination
Temel öncelikler:
- -c1 (realtime) - en yüksek öncelik. Gecikmenin kritik olduğu görevler için kullanılır. Diğer süreçleri tamamen engelleyebilir.
- -c2 (best-effort) - çoğu süreç için varsayılan. Öncelik düzeyinin ayarlanmasına olanak tanır (0 (yüksek) ile 7 (düşük) arasında).
- -c3 (idle) - arka plan. Süreç, diske yalnızca başka hiçbir süreç onu kullanmadığında erişir. Arka plan işlemleri (yedeklemeler, veri eşitleme) için güvenli ve önerilen seçenektir.
Bu örnekte rsync süreci en düşük G/Ç önceliğiyle çalışır ve sistemin temel işlemleri üzerindeki etkisi en aza indirilir. ionice kullanımı, arka plan süreçlerini tamamen devre dışı bırakmaya gerek kalmadan etkilerini en aza indirmeye olanak tanır.
Sonuç
Disk G/Ç izleme, bir sunucu altyapısının performansının ve kararlılığının sürdürülmesinin ayrılmaz bir parçasıdır. iostat ve dstat araçları aşırı yük durumlarını belirlemeye ve disk alt sisteminin durumunu değerlendirmeye olanak tanırken, iotop, pidstat ve lsof gibi araçlar belirli süreçlerin ve yüklerinin niteliğinin saptanmasına yardımcı olur.
Açıklanan yaklaşımın düzenli uygulanması, metriklerin doğru yorumlanması ve G/Ç önceliklerinin yönetilmesi; hizmet yanıt sürelerinin kısaltılmasına, yükün öngörülebilirliğinin artırılmasına ve SLA gereksinimlerine uyumun sağlanmasına yardımcı olur. Daha sonra bu metodoloji, merkezi izleme ve G/Ç yükü analizinin otomasyonu ile genişletilebilir.