web-dev-qa-db-fra.com

Comment puis-je surveiller la charge du disque dur sous Linux?

Existe-t-il un bon utilitaire de ligne de commande pour surveiller la charge du disque dur sous Linux? Quelque chose comme top mais en surveillant ensuite l'activité du disque i.s.o. l'utilisation du processeur.

Plus précisément, je soupçonne que pour certains serveurs (à forte charge) après plusieurs optimisations sur différentes parties du ou des programmes qui s'exécutent dessus, le goulot d'étranglement est en ce moment simplement la connexion aux fichiers sur le disque. Mais je trouve très difficile d'évaluer la quantité de trafic que les serveurs peuvent gérer.

Mon outil idéal serait quelque chose qui affiche "Vous utilisez 35% de la bande passante de votre disque en ce moment". Des idées?

105
Pieter

Vous pouvez obtenir une assez bonne mesure de cela en utilisant l'outil iostat.

% iostat -dx /dev/sda 5

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.78    11.03    1.19    2.82    72.98   111.07    45.80     0.13   32.78   1.60   0.64

L'utilisation du disque est répertoriée dans la dernière colonne. Ceci est défini comme

Pourcentage du temps processeur pendant lequel des demandes d'E/S ont été émises vers le périphérique (utilisation de la bande passante pour le périphérique). La saturation de l'appareil se produit lorsque cette valeur est proche de 100%.

85
Dave Cheney

iotop est une version de top qui regarde combien IO chaque processus utilise. C'est dans les référentiels ubuntu standard; je ne sais pas si c'est dans RHEL ou Fedora, mais ça devrait l'être.

enter image description here

Pour les noyaux plus anciens (disons CentOS 5.x ou RHEL 5.x) qui ne prennent pas en charge iotop, utilisez plutôt topio (documenté ici: http://yong321.freeshell.org/freeware/pio.html#linux . Il s'appuie sur/proc // io pour les statistiques io et fournit des fonctionnalités similaires à iotop. Voir le lien pour plus de détails.

82
Tim Howland

Comme suggéré par sastanin dans les commentaires, vous pouvez traiter directement les valeurs données dans /sys/block/sda/stat ou /proc/diskstats. Cela peut être utile lorsque aucun des autres outils mentionnés n'est disponible et que vous ne pouvez pas les installer facilement.

Par exemple (IIUC) quelque chose comme ça (en bash) devrait donner le nombre de lectures par seconde:

OLD=`awk '{print $1}' /sys/block/sda/stat` # First field is number of read I/Os processed
DT=1
for ii in `seq 1 10`
do
    sleep $DT
    NEW=`awk '{print $1}' /sys/block/sda/stat`
    echo $((($NEW-$OLD)/$DT))
    OLD=$NEW
done

Voir https://www.kernel.org/doc/Documentation/iostats.txt et https://www.kernel.org/doc/Documentation/block/stat.txt pour la documentation.

14

Vous devriez jeter un œil à au sommet , qui combine la puissance de iotop/top/iftop, le tout en un seul endroit, et met en évidence les parties critiques de votre système.

8
Yvan

Je recommanderais de jeter un œil à l'outil nmon. Il vous montrera la charge en direct sur un certain nombre de paramètres système ainsi que l'enregistrement des données dans un fichier pour une lecture ultérieure. C'est un outil gratuit disponible ici :

6
MikeyB

pour connaître votre bande passante totale, vous pouvez utiliser hdparm -T /dev/sda pour tester les performances du cache de tampon (fileio) hdparm -t /dev/sda pour tester les performances de lecture de l'appareil

exemples: mon ordinateur portable obtient 82 Mo/s du disque SATA et 2 Go/s du cache. Mon dekstop obtient 12 Go/s du cache et 500 Mo/s de la matrice HW RAID. Je soupçonne que ces derniers chiffres pourraient être doublés sur du matériel de classe serveur.

définir readahead supérieur à 256, 4096 fonctionne le mieux pour moi

for i in 128 256 512 1024 2048 4096 8192 16384 32768  
do  
hdparm --setra $i  
  for j in 1 2 4 8 16 32  
  do  
  time dd if=/dev/sda of=/dev/null bs="$j"k  count=<fixthis> 1GB / blocksize  
  done  
done  

fois lecture 1 Go à différentes tailles de bloc et différentes lectures à l'avance

5
user2987

L'outil standard pour afficher la charge du disque dur est iostat.

Il ne vous dira pas combien de% de bande passante de disque d'âge vous utilisez, car il ne sait pas combien de bande passante votre disque a. Dans tous les cas, votre disque n'a que le chiffre indiqué par le fabricant pour les gros transferts de données contiguës.

4
Alnitak

Je pense que RRDtool devrait faire ce que vous voulez ici il utilise un démon pour vider les données système et vous permet ensuite de les traiter comme vous le souhaitez. Je l'ai souvent utilisé pour produire des graphiques, etc. pour mesurer la charge du système.

3
PixelSmack

htop est un bel outil pour vérifier les informations de processus. Vous pouvez ajouter ou supprimer des colonnes et parmi elles, les vitesses de lecture et d'écriture des processus.

0
inquam