iostat ve dstat ile Disk G/Ç İzleme
Giriş
Disk giriş-çıkışını izlemek, bir barındırma altyapısında sunucuları çalıştırırken yapılan temel görevlerden biridir. Disk alt sistemi, web hizmetleri, veritabanları, sanal makineler, konteynerler 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 yardımcı programlarını, çalışma prensiplerini, metriklerin yorumlanmasını ve bir barındırma ortamında disk I/O darboğazlarını bulmak için pratik bir yaklaşımı kapsar.
Genel bilgiler ve çalışma prensipleri
Sunucu altyapısında Disk I/O
Disk giriş-çıkışı, veri okuma ve yazma işlemlerini blok cihazlarına içerir. Gerçek dünya barındırma senaryolarında, disk alt sistemine yük genellikle şu kaynaklardan gelir:
- veritabanları (MySQL, MariaDB, PostgreSQL);
- dinamik içerikli web uygulamaları;
- posta hizmetleri;
- veri yedekleme ve senkronizasyon;
- loglama;
- swap ve geçici dosyalar;
- kullanıcı betikleri ve cron işleri.
Darboğazlar, yavaş depolama cihazları, işlemler arasında yüksek rekabet, optimal olmayan I/O zamanlayıcıları, yanlış önbellekleme işlemi veya sanallaştırma özellikleri nedeniyle ortaya çıkabilir.
iostat ve dstat'ın amacı
iostat, CPU ve disk cihazı yükü hakkında ayrıntılı istatistikler toplamak için tasarlanmış sysstat paketinden bir yardımcı programdır. iostat'ın ana görevi, belirli bir diskin ne kadar yoğun kullanıldığını, bir istek kuyruğu olup olmadığını ve işlemler için ortalama bekleme süresinin ne olduğunu göstermektir.
dstat, birden fazla alt sistemi aynı anda gerçek zamanlı istatistiklerle gösteren çok yönlü bir izleme aracıdır: CPU, bellek, disk, ağ, işlemler. Disk etkinliğini genel sunucu yükü ile ilişkilendirmenize olanak tanır ve hızlı teşhis için uygundur.
Bu yardımcı programlar birbirini tamamlar: iostat cihaz düzeyinde doğru bir resim sunarken, dstat tüm sistemin bağlamını sağlar.
Ön koşullar ve gereksinimler
Analize başlamadan önce aşağıdaki koşulların sağlanması gerekir:
- Linux işletim sistemi (Debian, Ubuntu, AlmaLinux, Rocky Linux, CentOS).
- Sunucuya SSH erişimi.
- Root ayrıcalıkları veya sudo ile komutları çalıştırma yeteneği.
OS sürümünü kontrol etme:
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
sudo dnf install sysstat dstat
sysstat çalışmasını kontrol etme:
systemctl status sysstat
Hizmet aktifse, 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 cihaz için istatistikler.
Temel örnek:
sudo iostat -x
Dinamik analiz:
sudo iostat -xk 5 3
Aralık ve örnek sayısı, sistem başlatıldığından beri ortalama durum yerine zaman içinde yük değişikliklerini izlemenizi sağlar.
Örnek iostat çıktısı:

Anahtar CPU metrikleri:
- %iowait — CPU'nun I/O işlemlerini beklerken boşta kaldığı sürenin yüzdesi. Bu metrikteki artış, diskin genel performans üzerindeki etkisini gösterir.
- %steal — sanal sunucular için geçerlidir ve çalınan CPU zamanını gösterir.
Anahtar disk metrikleri:
- %util — diskin meşgul olduğu sürenin yüzdesi. Sürekli olarak %80–90'ı aşan değerler, cihazın doygunluğ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ğu. Değeri > 1 olan bir değer, zaten bir kuyruğun oluştuğunu gösterir. HDD için > 2–4 / SSD için > 1–2 olan bir değer, diskin yükle başa çıkamadığını gösterir.
await ve svctm arasındaki fark, gecikmenin kuyruğa mı yoksa fiziksel disk hızına mı bağlı olduğunu gösterir.
await, svctm'yi yalnızca biraz aşıyorsa (fark < %20–30), gecikmeler esas olarak diskin kendisinden kaynaklanır (yavaş fiziksel okuma/yazma).
await, svctm'den önemli ölçüde büyükse (fark > %50–100), ana gecikme istek kuyruğundan kaynaklanır (aqu-sz yüksek olacaktır), bu da diskin birçok paralel istekten aşırı yüklendiğini gösterir.
iostat'ın modern sürümlerinde (örnekte olduğu gibi), svctm görüntülenmez çünkü hesaplaması güvenilir değildir. Analiz için await + aqu-sz kombinasyonu 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, diskin isteklerle aşırı yüklendiğini gösterir.
dstat ile genel resmi analiz etme
dstat, sistemin gerçek zamanlı 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
Bir aralıkla örnek çalışma:
dstat -rd --disk-util 1 5
Analiz yaparken dikkat edilmesi gerekenler:
- CPU'da iowait artışı;
- okuma veya yazma zirveleri;
- eşzamanlı ağ ve disk etkinliği (yedeklemeler, senkronizasyon).
Örnek dstat çıktısı:
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ı:
| Kriterler | iostat | dstat |
|---|---|---|
| Veri Doğruluğu | Yüksek | Yüksek |
| Gerçek zamanlı mod | Sınırlı | Mükemmel |
| Tarihsel veri | 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 I/O darboğazlarını belirleme
Hızlı teşhis için aşağıdaki komutlar kullanılır:
sudo iostat -mx 2
sudo iostat -p /dev/vda 2 5
sar -d 1 5
Tipik sorun belirtileri:
- %util'in uzun süre %80'in üzerinde olması;
- SSD için 20–30 ms üzerinde veya HDD için 50–100 ms üzerinde await;
- kuyruk oluşumunu gösteren 2–3'ten büyük aqu-sz.
Örnekte, /dev/vda diski kullanılmıştır — bu, sanal bir sunucuda sanal bir disk (VirtIO) anlamına gelir. Fiziksel sunucularda ve diğer ortamlarda, diskler farklı adlandırılabilir.
- /dev/sdX (örneğin, /dev/sda) — normal SATA/SAS/USB diskler
- /dev/nvmeXnY (örneğin, /dev/nvme0n1) — NVMe sürücüler
- /dev/vdX — sanal diskler
Yüksek disk I/O yüküne neden olan işlemleri belirleme
iostat ve dstat kullanarak disk alt sistemi aşırı yüklenmesinin varlığını belirledikten sonra, bir sonraki adım yoğun okuma veya yazma işlemlerini başlatan belirli işlemleri tanımlamaktır. Yük kaynağını belirlemeden cihaz düzeyinde analiz, doğru düzeltici eylemleri almanıza izin vermez.
iotop kullanarak
Diski aktif olarak kullanan işlemleri bulmak için birincil araç iotop yardımcı programıdır.
sudo iotop -ao
Komut parametreleri:
- -a — işlemin başladığı andan itibaren kümülatif istatistikleri gösterir, bu da uzun süreli I/O ile arka plan görevlerini tanımlamaya yardımcı olur;
- -o — şu anda I/O işlemleri gerçekleştiren işlemleri gösterir.
Örnek çıktı:
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 11056 be/4 mysql 0.00 B 3.44 M 0.00 % 0.76 % mysqld 2580 be/4 rsync 0.00 B 23.48 M 0.00 % 1.17 % rsync
iotop çıktısında, özellikle DISK READ, DISK WRITE alanlarına ve I/O zaman yüzdesine dikkat edilmelidir. Genellikle yük kaynakları, veritabanı işlemleri, yedekleme işlemleri, dosya senkronizasyon işlemleri veya kullanıcı betikleridir.
pidstat kullanarak işlem bazında I/O analizi
Daha resmi 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 saniyelik aralıklarla disk I/O istatistiklerini çıktılar. Kısa süreli etkinlik zirvelerini tanımlamak ve bunları diğer sistem metrikleriyle ilişkilendirmek için uygundur.
pidstat, yükün periyodik olarak göründüğü ve her zaman iotop tarafından yakalanamayabileceği durumlarda özellikle yararlıdır.
lsof kullanarak dosya etkinliği analizi
Bir işlemin hangi belirli dosyalar veya dizinlerle çalıştığını anlamak gerektiğinde, 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.
Komut, belirtilen yol içinde hangi işlemlerin şu anda dosya tanımlayıcılarını tuttuğunu ve işlemler gerçekleştirdiğini belirlemenizi sağlar, bu da uygulamalardan kaynaklanan yükü analiz ederken özellikle yararlıdır.
Yük bağlamını analiz etme
Yüksek disk etkinliği olan bir işlemi belirlemek nihai hedef değildir. Yönetici, çalışmasının bağlamını değerlendirmelidir:
- bu hizmet için yük beklenen bir yük mü;
- 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ğini düşürmek mümkün mü.
Bu yaklaşım, normal yükü sorunlu yükten ayırt etmeyi ve doğru optimizasyon yöntemini seçmeyi mümkün kılar.
Analizin doğruluğunu doğrulama
Yapılan analizin doğruluğu, aşağıdaki durumlarda doğrulanır:
- iostat'taki %util, await veya aqu-sz zirveleri, iotop veya pidstat'taki işlem etkinliği ile zaman açısından örtüşür;
- dstat'taki iowait artışı, CPU yükü ile değil, disk işlemleri ile örtüşür;
- tekrarlanan ölçümler, tekrarlanabilir bir yük deseni gösterir.
Veri birikimi 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ı kaydetmenizi ve olayları araştırırken verileri kullanmanızı sağlar.
Tipik hatalar ve operasyonel özellikler
Barındırma sunucularını çalıştırma pratiğinde, en yaygın sorunlar şunlardır:
- yoğun saatlerde yedekleme ve veri senkronizasyonu çalıştırma;
- yetersiz RAM olduğunda swap'in yoğun kullanımı;
- sürücü türü için uygun olmayan bir I/O zamanlayıcısı;
- 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 için ionice yardımcı programının kullanılması önerilir, bu da arka plan görevlerinin sistem yanıt verebilirliği üzerindeki etkisini azaltmanıza olanak tanır.
Kullanım örneği:
ionice -c3 rsync /source /destination
Anahtar öncelikler:
- -c1 (gerçek zamanlı) — en yüksek öncelik. Gecikme açısından kritik 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. Öncelik seviyesinin ayarlanmasına izin verir (0 (yüksek) ile 7 (düşük) arasında).
- -c3 (boşta) — arka plan. Diğer işlemler diski kullanmadığında işlem yalnızca disk erişimi alır. Arka plan işlemleri için güvenli ve önerilir (yedeklemeler, veri senkronizasyonu).
Bu örnekte, rsync işlemi en düşük I/O önceliğiyle çalışır, bu da temel sistem işlemleri üzerindeki etkisini en aza indirir. ionice kullanımı, arka plan işlemlerinin etkisini tamamen devre dışı bırakmadan en aza indirmenizi sağlar.
Sonuç
Disk I/O izleme, 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üklenme durumlarını belirlemenize ve disk alt sisteminin durumunu değerlendirmenize olanak tanırken, iotop, pidstat ve lsof gibi araçlar belirli işlemleri ve yükün doğasını tanımlamanıza yardımcı olur.
Tanımlanan yaklaşımın düzenli uygulanması, metriklerin doğru yorumlanması ve I/O önceliklerinin yönetimi, hizmet yanıt sürelerini azaltmaya, yük öngörülebilirliğini artırmaya ve SLA gereksinimlerine uyumu sağlamaya yardımcı olur. Sonuç olarak, bu metodoloji merkezi izleme ve I/O yük analizi otomasyonu ile genişletilebilir.