Merhaba arkadaşlar, bugün sizlere sunucularımızda zaman zaman karşılaştığımız gizemli disk yavaşlığı problemini çözmek için çok kullandığım bir aracı, `iotop`'u anlatacağım. Disk I/O (Giriş/Çıkış) yüksek olduğunda sistem adeta kıpırdamaz hale gelir, web sayfaları geç açılır, veritabanı sorguları yavaşlar. Bu rehberle, hangi sürecin diskinizi en çok meşgul ettiğini anında görecek ve sorunun kaynağına ineceksiniz.
iotop Nedir ve Kurulumu
`iotop`, tıpkı `top` veya `htop` komutunun CPU ve RAM için yaptığını, disk I/O için yapan bir izleme aracıdır. Süreçleri, okuma/yazma hızlarına göre sıralayarak gerçek zamanlı olarak gösterir.
Kurulum oldukça basit. Benim gibi Debian/Ubuntu tabanlı bir sistem kullanıyorsanız:
RHEL, CentOS, Fedora gibi sistemler için ise:
Kurulum tamamlandığında, artık disk aktivitesini gözlemlemeye hazırsınız.
Temel Kullanım ve Anlamlı Sonuçlar Almak
En temel kullanımı, komutu `sudo` yetkisiyle çalıştırmaktır:
Bu komutu çalıştırdığınızda karşınıza sürekli güncellenen bir tablo gelecek. Ancak burada dikkat etmeniz gereken önemli bir nokta var: Varsayılan olarak `iotop`, tüm süreçleri ve iş parçacıklarını (thread) gösterir. Bu bazen kafa karıştırıcı olabilir.
Benim en çok kullandığım ve daha temiz bir görünüm sağlayan parametreler şunlar:
Bu parametrelerin ne işe yaradığını açıklayayım:
`-o`: Sadece aktif olarak I/O yapan süreçleri gösterir. Liste çok daha kısa ve anlamlı olur.
`-P`: Süreçleri, iş parçacıkları yerine ana süreç (PID) bazında gruplar. Çok daha net bir bakış sağlar.
`-a`: I/O istatistiklerini toplam okuma/yazma miktarına göre biriktirir (accumulated). Anlık değil, komutu çalıştırdığınızdan beri olan toplam yükü görürsünüz.
Çıktıyı Nasıl Yorumlamalıyız?
`iotop -oPa` komutunun çıktısı şuna benzer bir tablo oluşturur:
Şimdi bu sütunların ne anlama geldiğine bakalım:
DISK READ / DISK WRITE: Sürecin saniyede okuduğu/yazdığı veri miktarı. Sorunun büyüklüğünü buradan anlarsınız.
IO>: Bu en kritik sütun! Sürecin I/O için harcadığı CPU zamanının yüzdesini gösterir. %90'ları gören bir süreç, diski kilitlemiş demektir ve muhtemel suçlu odur.
COMMAND: Sürecin adı. Hemen MySQL, PHP, backup script'i gibi kaynağı tanıyabilirsiniz.
Kritik Uyarılar ve İpuçları
1. Sürekli Loglama: Sorunu tespit etmek için `iotop`'u bir kere çalıştırıp kapatmayın. Özellikle arka planda çalışan bir backup işlemi veya cron job'ı yakalamak için bir süre (2-3 dakika) izleyin.
2. Batch Modu: Eğer bir log dosyasına kaydetmek veya başka bir script ile işlemek isterseniz, batch modunu kullanın:
Bu komut, 2 saniyede bir olmak üzere 5 kez (`-n 5`) anlık görüntü alır ve çıktıyı batch (`-b`) formatında verir.
3. Kernel Thread'leri Gizleme: Bazen "kworker" gibi kernel iş parçacıkları listede üst sıralarda çıkabilir. Bunlar genellikle bir sonuçtur, sebep değil. Asıl sebep olan kullanıcı sürecine (mysqld, php gibi) odaklanın.
4. Dosya Sistemi Önbelleği: Linux agresif bir şekilde disk okumalarını önbelleğe alır. `iotop` ile gördüğünüz okuma (READ) değerleri, bu önbellekten okunmayan, doğrudan diske erişen "gerçek" okumalardır. Bu yüzden çok doğru bir gösterge sağlar.
Özet ve Son Tavsiyeler
Disk yavaşlaması şikayetiniz olduğunda ilk bakacağınız yer `iotop -oPa` olmalı. Bu komut, sorunu neredeyse her zaman anında ortaya çıkarır. Bir veritabanı sorgusu, loglama yapan bir uygulama, hatalı bir cron jobı veya bir yedekleme işlemi... Hepsi burada kendini ele verir.
Ben genelde sunucuma ilk bağlandığımda, genel sistem sağlığını kontrol etmek için `htop` ve `iotop -oPa` komutlarını yan yana terminal pencerelerinde açarım. Bu ikili, sistemin nabzını tutmak için birebirdir.
Peki siz disk I/O sorunlarını tespit etmek için hangi araçları kullanıyorsunuz? `iotop` dışında favori yöntemleriniz var mı? Ya da bu rehberle ilgili sorusu olan, aşağıya yorum bıraksın, elimden geldiğince yardımcı olmaya çalışayım.
`iotop`, tıpkı `top` veya `htop` komutunun CPU ve RAM için yaptığını, disk I/O için yapan bir izleme aracıdır. Süreçleri, okuma/yazma hızlarına göre sıralayarak gerçek zamanlı olarak gösterir.
Kurulum oldukça basit. Benim gibi Debian/Ubuntu tabanlı bir sistem kullanıyorsanız:
Bash:
sudo apt-get update
sudo apt-get install iotop
RHEL, CentOS, Fedora gibi sistemler için ise:
Bash:
sudo yum install iotop # veya sudo dnf install iotop
Kurulum tamamlandığında, artık disk aktivitesini gözlemlemeye hazırsınız.
En temel kullanımı, komutu `sudo` yetkisiyle çalıştırmaktır:
Bash:
sudo iotop
Bu komutu çalıştırdığınızda karşınıza sürekli güncellenen bir tablo gelecek. Ancak burada dikkat etmeniz gereken önemli bir nokta var: Varsayılan olarak `iotop`, tüm süreçleri ve iş parçacıklarını (thread) gösterir. Bu bazen kafa karıştırıcı olabilir.
Benim en çok kullandığım ve daha temiz bir görünüm sağlayan parametreler şunlar:
Bash:
sudo iotop -oPa
Bu parametrelerin ne işe yaradığını açıklayayım:
`-o`: Sadece aktif olarak I/O yapan süreçleri gösterir. Liste çok daha kısa ve anlamlı olur.
`-P`: Süreçleri, iş parçacıkları yerine ana süreç (PID) bazında gruplar. Çok daha net bir bakış sağlar.
`-a`: I/O istatistiklerini toplam okuma/yazma miktarına göre biriktirir (accumulated). Anlık değil, komutu çalıştırdığınızdan beri olan toplam yükü görürsünüz.
`iotop -oPa` komutunun çıktısı şuna benzer bir tablo oluşturur:
Kod:
Total DISK READ: 5.45 M/s | Total DISK WRITE: 1.10 M/s
TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND
456 be/4 mysql 4.21 M/s 0.00 B/s 0.00 % 85.12 % mysqld
1234 be/4 www-data 1.12 M/s 1.10 M/s 0.00 % 12.45 % php-fpm: pool www
Şimdi bu sütunların ne anlama geldiğine bakalım:
DISK READ / DISK WRITE: Sürecin saniyede okuduğu/yazdığı veri miktarı. Sorunun büyüklüğünü buradan anlarsınız.
IO>: Bu en kritik sütun! Sürecin I/O için harcadığı CPU zamanının yüzdesini gösterir. %90'ları gören bir süreç, diski kilitlemiş demektir ve muhtemel suçlu odur.
COMMAND: Sürecin adı. Hemen MySQL, PHP, backup script'i gibi kaynağı tanıyabilirsiniz.
1. Sürekli Loglama: Sorunu tespit etmek için `iotop`'u bir kere çalıştırıp kapatmayın. Özellikle arka planda çalışan bir backup işlemi veya cron job'ı yakalamak için bir süre (2-3 dakika) izleyin.
2. Batch Modu: Eğer bir log dosyasına kaydetmek veya başka bir script ile işlemek isterseniz, batch modunu kullanın:
Bash:
sudo iotop -b -n 5 -d 2
3. Kernel Thread'leri Gizleme: Bazen "kworker" gibi kernel iş parçacıkları listede üst sıralarda çıkabilir. Bunlar genellikle bir sonuçtur, sebep değil. Asıl sebep olan kullanıcı sürecine (mysqld, php gibi) odaklanın.
4. Dosya Sistemi Önbelleği: Linux agresif bir şekilde disk okumalarını önbelleğe alır. `iotop` ile gördüğünüz okuma (READ) değerleri, bu önbellekten okunmayan, doğrudan diske erişen "gerçek" okumalardır. Bu yüzden çok doğru bir gösterge sağlar.
Disk yavaşlaması şikayetiniz olduğunda ilk bakacağınız yer `iotop -oPa` olmalı. Bu komut, sorunu neredeyse her zaman anında ortaya çıkarır. Bir veritabanı sorgusu, loglama yapan bir uygulama, hatalı bir cron jobı veya bir yedekleme işlemi... Hepsi burada kendini ele verir.
Ben genelde sunucuma ilk bağlandığımda, genel sistem sağlığını kontrol etmek için `htop` ve `iotop -oPa` komutlarını yan yana terminal pencerelerinde açarım. Bu ikili, sistemin nabzını tutmak için birebirdir.
Peki siz disk I/O sorunlarını tespit etmek için hangi araçları kullanıyorsunuz? `iotop` dışında favori yöntemleriniz var mı? Ya da bu rehberle ilgili sorusu olan, aşağıya yorum bıraksın, elimden geldiğince yardımcı olmaya çalışayım.