Ana içeriğe geç
Kategoriye Dön

Yavaş Disk I/O Tespiti ve Çözümü

Linux sunucuda yavaş disk I/O sorunlarını tespit etme, iotop/iostat ile analiz yapma ve performansı artırma rehberi.

Okuma süresi: 14 dk Sorun Giderme
diskI/Oiotopiostatperformanslinuxdepolama
Yazar
REXE Teknoloji Ağ ve Güvenlik Ekibi
Editör
REXE Teknoloji Teknik Yayın Editörü
İlk yayın
Son güncelleme

Giriş

Yavaş disk I/O, sunucu performansını ciddi şekilde etkileyen yaygın bir sorundur. Veritabanı sorguları yavaşlar, web uygulamaları yanıt vermez ve sistem genel olarak hissedilir biçimde yavaşlar. Bu rehberde yavaş disk I/O'yu tespit etme ve çözme yöntemlerini ele alacağız.

Belirtiler

Yavaş disk I/O'nun tipik belirtileri:

  • Komutlar uzun süre bekler (özellikle ls, find, dosya okuma/yazma)
  • Veritabanı sorguları normalden çok daha yavaş
  • top veya htop'ta yüksek wa (I/O wait) değeri
  • Uygulama loglarında zaman aşımı hataları
  • df veya du komutları çok uzun sürer

Adım 1: I/O Wait Kontrolü

İlk adım olarak sistemin I/O wait değerini kontrol edin:

hljs bash
# top ile I/O wait kontrolü
top
# 'wa' sütununa bakın — %5'in üzerindeyse sorun var

# vmstat ile anlık I/O durumu
vmstat 1 10
# 'wa' sütunu I/O wait yüzdesini gösterir

# iostat ile disk istatistikleri
iostat -x 1 5
# %util değeri %80'in üzerindeyse disk doymuş demektir

I/O wait değeri sürekli %10'un üzerindeyse disk I/O darboğazı yaşıyorsunuz demektir.

Adım 2: Hangi Süreç Disk Kullanıyor?

hljs bash
# iotop ile gerçek zamanlı disk I/O izleme
sudo apt install iotop -y
sudo iotop -o  # Sadece aktif I/O yapan süreçleri göster

# iotop anlık snapshot
sudo iotop -b -n 5 -o

# pidstat ile süreç bazlı I/O
sudo apt install sysstat -y
pidstat -d 1 5

# lsof ile hangi dosyalar açık
sudo lsof | grep -E '(REG|DIR)' | sort -k7 -rn | head -20

Adım 3: Disk Performans Testi

hljs bash
# Basit yazma testi
dd if=/dev/zero of=/tmp/test_write bs=1M count=1024 oflag=direct
# Sonuç: X MB/s — SSD için 200+ MB/s, HDD için 80+ MB/s normal

# Basit okuma testi
dd if=/tmp/test_write of=/dev/null bs=1M

# fio ile kapsamlı test
sudo apt install fio -y

# Rastgele okuma testi
fio --name=randread --ioengine=libaio --iodepth=16 --rw=randread \
    --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 \
    --group_reporting --filename=/tmp/fio_test

# Rastgele yazma testi
fio --name=randwrite --ioengine=libaio --iodepth=16 --rw=randwrite \
    --bs=4k --direct=1 --size=1G --numjobs=4 --runtime=60 \
    --group_reporting --filename=/tmp/fio_test

# Test dosyasını temizle
rm /tmp/fio_test /tmp/test_write

Adım 4: Disk Sağlığı Kontrolü

hljs bash
# Disk listesi
lsblk
fdisk -l

# SMART durumu kontrol
sudo apt install smartmontools -y
sudo smartctl -a /dev/sda

# SMART kısa test
sudo smartctl -t short /dev/sda
sudo smartctl -l selftest /dev/sda

# Disk hataları
dmesg | grep -i -E '(error|fail|bad|ata|scsi|disk)'
journalctl -k | grep -i -E '(error|fail|bad|ata|scsi)'

# Dosya sistemi hataları
sudo dmesg | grep -i 'ext4\|xfs\|btrfs'

SMART testinde Reallocated_Sector_Ct veya Pending_Sector_Count değerleri 0'dan büyükse disk arızalanmak üzere demektir. Hemen yedek alın.

Adım 5: Dosya Sistemi Optimizasyonu

Disk Doluluk Kontrolü

hljs bash
# Disk kullanımı
df -h

# En çok yer kaplayan dizinler
du -sh /* 2>/dev/null | sort -rh | head -20
du -sh /var/* 2>/dev/null | sort -rh | head -10

# Büyük dosyaları bul
find / -type f -size +100M -not -path '/proc/*' 2>/dev/null | sort -k5 -rn

# Log dosyalarını temizle
sudo journalctl --vacuum-size=500M
sudo find /var/log -name '*.gz' -mtime +30 -delete

Mount Seçenekleri Optimizasyonu

hljs bash
# Mevcut mount seçeneklerini görüntüle
cat /proc/mounts
mount | grep -E '(ext4|xfs|btrfs)'

# /etc/fstab'da noatime ekle (okuma performansını artırır)
# UUID=xxx / ext4 defaults,noatime 0 1

# Geçici olarak remount
sudo mount -o remount,noatime /

I/O Scheduler Optimizasyonu

hljs bash
# Mevcut I/O scheduler
cat /sys/block/sda/queue/scheduler

# SSD için 'none' veya 'mq-deadline' önerilir
echo 'none' | sudo tee /sys/block/sda/queue/scheduler

# HDD için 'bfq' veya 'mq-deadline'
echo 'bfq' | sudo tee /sys/block/sda/queue/scheduler

# Kalıcı hale getirmek için /etc/udev/rules.d/60-scheduler.rules
echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"' | sudo tee /etc/udev/rules.d/60-scheduler.rules

Adım 6: Veritabanı I/O Optimizasyonu

Eğer yavaş I/O veritabanından kaynaklanıyorsa:

hljs bash
# MySQL/MariaDB — yavaş sorgu logu
# /etc/mysql/mysql.conf.d/mysqld.cnf
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/slow.log
# long_query_time = 2

# PostgreSQL — yavaş sorgu logu
# postgresql.conf
# log_min_duration_statement = 2000  # 2 saniyeden uzun sorgular

# Redis — AOF yerine RDB kullan (daha az I/O)
# appendonly no
# save 900 1

Adım 7: tmpfs ile I/O Azaltma

Geçici dosyalar için RAM kullanmak disk I/O'yu önemli ölçüde azaltır:

hljs bash
# /tmp için tmpfs
echo 'tmpfs /tmp tmpfs defaults,noatime,mode=1777,size=2G 0 0' | sudo tee -a /etc/fstab
sudo mount -a

# Uygulama cache dizinleri için tmpfs
# Örnek: PHP session
echo 'tmpfs /var/lib/php/sessions tmpfs defaults,noatime,size=256M 0 0' | sudo tee -a /etc/fstab

tmpfs boyutunu RAM'inizin %25'ini geçmeyecek şekilde ayarlayın.

Sonuç

Yavaş disk I/O sorunlarını çözmek için önce iotop ve iostat ile hangi sürecin disk kullandığını tespit edin, ardından disk sağlığını SMART ile kontrol edin. Dosya sistemi optimizasyonları (noatime, I/O scheduler) ve tmpfs kullanımı performansı önemli ölçüde artırabilir. Disk fiziksel olarak arızalanıyorsa en kısa sürede yedek alın ve disk değişimi için REXE destek ile iletişime geçin.

Sık Sorulan Sorular

I/O wait değeri ne kadar olmalı?

Normal koşullarda I/O wait %5'in altında olmalıdır. %10-20 arası dikkat gerektirir, %20'nin üzeri ciddi bir disk darboğazına işaret eder.

SSD'de de yavaş disk I/O olabilir mi?

Evet. SSD'de de yavaş I/O yaşanabilir: disk doluluk %90'ı geçtiğinde, yanlış I/O scheduler kullanıldığında veya SSD'nin yazma ömrü dolduğunda. SMART ile kontrol edin.

noatime mount seçeneği güvenli midir?

Evet, çoğu uygulama için güvenlidir. noatime, dosyalara her erişimde 'son erişim zamanı' güncellenmesini engeller ve disk yazma işlemlerini önemli ölçüde azaltır. Bazı eski uygulamalar atime'a bağımlı olabilir, ancak modern sistemlerde sorun yaratmaz.

Disk I/O sorununu çözmek için sunucuyu yeniden başlatmam gerekir mi?

Genellikle hayır. I/O scheduler değişikliği, mount seçenekleri ve süreç yönetimi yeniden başlatma gerektirmez. Ancak fstab değişiklikleri için 'mount -a' komutu yeterlidir.

İlgili Makaleler

SSH Bağlantı Sorunu: Sunucuya Bağlanamıyorum

SSH bağlantı sorunlarını çözme rehberi: Path.net firewall kuralları, Default Block, SSH portu için filtre kuralı oluşturma ve sorun giderme adımları.

8 dk
sshbağlantı sorunufirewall
Ağ TrafiğiGelen GbpsGiden Gbps