Merhaba arkadaşlar, bugün sizlere sunucularımızda sıkça karşılaştığımız bir performans darboğazını, yani disk I/O (Giriş/Çıkış) problemlerini nasıl teşhis edeceğimizi anlatacağım. Diskler, CPU veya RAM kadar göz önünde olmasa da, yavaşlamanın en temel sebeplerinden biridir. Bu rehberde, iostat ve iotop gibi araçlarla disklerinizin ne kadar yoğun çalıştığını, hangi sürecin diskleri yediğini nasıl bulacağımızı adım adım göreceğiz.
Gerekli Araçların Kurulumu
Öncelikle bu araçların sistemimizde yüklü olduğundan emin olalım. Genellikle sysstat ve iotop paketlerine ihtiyacımız var.
Debian/Ubuntu tabanlı sistemler için:
RHEL/CentOS/Fedora tabanlı sistemler için:
veya
Kurulumdan sonra, sysstat servisini başlatmak ve sistem açılışında otomatik başlamasını sağlamak iyi olur.
iostat ile Genel Disk İstatistikleri
iostat komutu, disklerinizin genel performans istatistiklerini (okuma/yazma hızı, işlem sayısı, kullanım yüzdesi vb.) gösterir. En temel kullanımı parametresiz çalıştırmaktır. Bu, sistem açılışından itibaren ortalama değerleri verir.
Anlık ve sürekli izlemek için -x (detaylı) ve 1 (1 saniye aralık) parametrelerini kullanırım. Bu, en çok işe yarayan komuttur.
Bu komut bize şu önemli sütunları gösterir:
%util: Diskin meşguliyet yüzdesi. %70-80'in üzeri kritik bir yük olduğunu gösterir.
await: Okuma/yazma isteklerinin ortalama tamamlanma süresi (ms). Yüksek olması diskte kuyruk oluştuğu anlamına gelir.
r/s, w/s: Saniyedeki okuma ve yazma işlemi sayısı.
rkB/s, wkB/s: Saniyede okunan/yazılan kilobayt miktarı.
Örneğin, /dev/sda diskinizin %util değeri sürekli %90'larda ise, disk I/O'nuz tıkanmış demektir.
iostat Çıktısını Okurken Dikkat!
%util yüksek ama rkB/s veya wkB/s düşükse, bu genellikle diskte çok fazla küçük, rastgele okuma/yazma işlemi olduğu (örneğin bir veritabanı sunucusu) anlamına gelir. Bu durumda SSD'ye geçmek veya RAID yapısını gözden geçirmek gerekebilir. Eğer await değeri çok yüksekse (50ms üzeri), fiziksel bir disk sorunu olabilir.
iotop ile Süreç Bazlı Disk Kullanımı
iostat bize "diskin yoğun" olduğunu söyler ama "hangi program yoğunlaştırıyor?" sorusunun cevabını iotop verir. Tıpkı top komutu gibi, ancak disk I/O için çalışan bir araçtır. Root yetkisiyle çalıştırmanızı öneririm.
Çalıştırdığınızda anlık olarak hangi sürecin (PID) ne kadar disk okuma/yazma band genişliği kullandığını göreceksiniz. Özellikle DISK READ ve DISK WRITE sütunlarına bakın. Sürekli yüksek değerler gösteren bir süreç, sorunun kaynağı olabilir.
iotop'u sadece okuma/yazma yapan süreçleri gösterecek şekilde filtrelemek için -o parametresini kullanabilirsiniz.
Pratik Analiz ve Optimizasyon İpuçları
1. Önce iostat -x 1 ile genel durumu kontrol edin. Hangi diskin (/dev/sdb, /dev/nvme0n1 vb.) problemli olduğunu tespit edin.
2. Ardından sudo iotop -o ile o diskte yoğun I/O yapan süreci bulun.
3. Süreç bir veritabanı (MySQL/PostgreSQL) ise, yavaş sorguları, yetersiz indeksleri veya tampon (buffer) boyutlarını kontrol edin. /etc/mysql/my.cnf veya /etc/postgresql/.../postgresql.conf dosyalarındaki ayarları gözden geçirin.
4. Süreç bir log yazma işlemiyse, rsyslog veya journald konfigürasyonunu kontrol edin. Aşırı verbose loglama yapılıyor olabilir.
5. Donanımsal bir sınır olup olmadığını anlamak için, disk modelinizin (HDD/SSD) spec'lerindeki IOPS ve throughput değerleri ile iostat çıktınızı karşılaştırın.
Sonuç ve Tavsiyeler
Disk I/O izleme, proaktif sunucu yönetiminin olmazsa olmazıdır. iostat ve iotop bu işin temel taşları. Ben kendi sunucu izleme stack'imde, iostat verilerini düzenli olarak bir grafik sistemine (Grafana) aktarıp tarihsel eğilimleri de takip ediyorum. Bu sayede ani patlamaları veya yavaş yavaş artan yükü önceden görebiliyorum.
Siz bu disk izleme işini kendi ortamlarınızda nasıl yapıyorsunuz? atop veya nmon gibi başka favori araçlarınız var mı? Ya da SSD'ye geçtikten sonra yaşadığınız performans farkı? Tecrübelerinizi ve sorularınızı aşağıdaki yorumlarda paylaşabilirsiniz. Bir sonraki rehberde görüşmek üzere, sağlıcakla kalın.
Öncelikle bu araçların sistemimizde yüklü olduğundan emin olalım. Genellikle sysstat ve iotop paketlerine ihtiyacımız var.
Debian/Ubuntu tabanlı sistemler için:
Bash:
sudo apt-get update
sudo apt-get install sysstat iotop
RHEL/CentOS/Fedora tabanlı sistemler için:
Bash:
sudo yum install sysstat iotop
Bash:
sudo dnf install sysstat iotop
Kurulumdan sonra, sysstat servisini başlatmak ve sistem açılışında otomatik başlamasını sağlamak iyi olur.
iostat komutu, disklerinizin genel performans istatistiklerini (okuma/yazma hızı, işlem sayısı, kullanım yüzdesi vb.) gösterir. En temel kullanımı parametresiz çalıştırmaktır. Bu, sistem açılışından itibaren ortalama değerleri verir.
Bash:
iostat
Anlık ve sürekli izlemek için -x (detaylı) ve 1 (1 saniye aralık) parametrelerini kullanırım. Bu, en çok işe yarayan komuttur.
Bash:
iostat -x 1
Bu komut bize şu önemli sütunları gösterir:
%util: Diskin meşguliyet yüzdesi. %70-80'in üzeri kritik bir yük olduğunu gösterir.
await: Okuma/yazma isteklerinin ortalama tamamlanma süresi (ms). Yüksek olması diskte kuyruk oluştuğu anlamına gelir.
r/s, w/s: Saniyedeki okuma ve yazma işlemi sayısı.
rkB/s, wkB/s: Saniyede okunan/yazılan kilobayt miktarı.
Örneğin, /dev/sda diskinizin %util değeri sürekli %90'larda ise, disk I/O'nuz tıkanmış demektir.
%util yüksek ama rkB/s veya wkB/s düşükse, bu genellikle diskte çok fazla küçük, rastgele okuma/yazma işlemi olduğu (örneğin bir veritabanı sunucusu) anlamına gelir. Bu durumda SSD'ye geçmek veya RAID yapısını gözden geçirmek gerekebilir. Eğer await değeri çok yüksekse (50ms üzeri), fiziksel bir disk sorunu olabilir.
iostat bize "diskin yoğun" olduğunu söyler ama "hangi program yoğunlaştırıyor?" sorusunun cevabını iotop verir. Tıpkı top komutu gibi, ancak disk I/O için çalışan bir araçtır. Root yetkisiyle çalıştırmanızı öneririm.
Bash:
sudo iotop
Çalıştırdığınızda anlık olarak hangi sürecin (PID) ne kadar disk okuma/yazma band genişliği kullandığını göreceksiniz. Özellikle DISK READ ve DISK WRITE sütunlarına bakın. Sürekli yüksek değerler gösteren bir süreç, sorunun kaynağı olabilir.
iotop'u sadece okuma/yazma yapan süreçleri gösterecek şekilde filtrelemek için -o parametresini kullanabilirsiniz.
Bash:
sudo iotop -o
1. Önce iostat -x 1 ile genel durumu kontrol edin. Hangi diskin (/dev/sdb, /dev/nvme0n1 vb.) problemli olduğunu tespit edin.
2. Ardından sudo iotop -o ile o diskte yoğun I/O yapan süreci bulun.
3. Süreç bir veritabanı (MySQL/PostgreSQL) ise, yavaş sorguları, yetersiz indeksleri veya tampon (buffer) boyutlarını kontrol edin. /etc/mysql/my.cnf veya /etc/postgresql/.../postgresql.conf dosyalarındaki ayarları gözden geçirin.
4. Süreç bir log yazma işlemiyse, rsyslog veya journald konfigürasyonunu kontrol edin. Aşırı verbose loglama yapılıyor olabilir.
5. Donanımsal bir sınır olup olmadığını anlamak için, disk modelinizin (HDD/SSD) spec'lerindeki IOPS ve throughput değerleri ile iostat çıktınızı karşılaştırın.
Disk I/O izleme, proaktif sunucu yönetiminin olmazsa olmazıdır. iostat ve iotop bu işin temel taşları. Ben kendi sunucu izleme stack'imde, iostat verilerini düzenli olarak bir grafik sistemine (Grafana) aktarıp tarihsel eğilimleri de takip ediyorum. Bu sayede ani patlamaları veya yavaş yavaş artan yükü önceden görebiliyorum.
Siz bu disk izleme işini kendi ortamlarınızda nasıl yapıyorsunuz? atop veya nmon gibi başka favori araçlarınız var mı? Ya da SSD'ye geçtikten sonra yaşadığınız performans farkı? Tecrübelerinizi ve sorularınızı aşağıdaki yorumlarda paylaşabilirsiniz. Bir sonraki rehberde görüşmek üzere, sağlıcakla kalın.