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

101

Existe-t-il un bon utilitaire de ligne de commande pour surveiller la charge du disque dur sous Linux? Quelque chose comme, topmais ensuite surveiller l'activité du disque iso 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 y sont exécutés, le goulot d'étranglement est simplement la journalisation dans des fichiers sur le disque. Mais je trouve très difficile d'évaluer le trafic que les serveurs peuvent gérer.

Mon outil idéal serait quelque chose qui indique "Vous utilisez actuellement 35% de votre bande passante disque". Des idées?

Pieter
la source
1
Question parfaite, est exactement ce que je cherchais =)
rafa.ferreira
Il est possible de lire sysfs directement, comme /sys/block/sda/stat. Le champ n ° 1 donne le nombre total de lectures, le champ n ° 5 est le nombre total d'écritures, le champ n ° 9 représente le nombre d'opérations d'E / S en cours. Plus d'informations dans kernel.org/doc/Documentation/iostats.txt. Les valeurs sont unsigned long et peuvent se terminer.
Sastanin
C'est une très bonne question car nous sommes toujours aux prises avec ce problème sur les serveurs Plesk. Cependant, ce qui manque, c'est how do you do it with SNMP?. C'est bien de se connecter et de vérifier des éléments, mais il faut vraiment des données historiques.
Eugene van der Merwe

Réponses:

83

Vous pouvez obtenir une assez bonne mesure à l'aide de l' iostatoutil.

% 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 de temps CPU pendant lequel des demandes d'E / S ont été émises vers le périphérique (utilisation de la largeur de bande pour le périphérique). La saturation du périphérique se produit lorsque cette valeur est proche de 100%.

Dave Cheney
la source
3
Dans quel paquet cela réside-t-il dans Debian, le cas échéant? apt-cache dumpn'a rien
révélé
9
@Brian: C'est dans le paquet sysstat (via yum quand même ...)
Joe
Impossible de trouver ceci sur RHEL 6.5. Est-ce disponible pour RHEL?
Hazok
Cela peut-il fonctionner sans avoir à continuer avec un retard? Essayer d'exécuter une instance unique pour obtenir des données à partir de obtient le même nombre sans doute car il ne peut pas prélever d'échantillons ???
Wilf
@Hazok Il fait partie du système RPM sysstat sur RHEL 6.5.
général
81

iotop est une version de top qui examine la quantité d’IO utilisée par chaque processus. C'est dans les dépôts standards d'ubuntu; Je ne sais pas si c'est dans RHEL ou Fedora, mais ça devrait l'être.

entrez la description de l'image ici

Pour les noyaux plus anciens (par exemple 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 une fonctionnalité similaire à celle d'iotop (voir le lien pour plus de détails).

Tim Howland
la source
1
En effet, il n’est pas installé par défaut dans Ubuntu, ce qui peut donc poser problème: sudo apt-get install iotop pour l’obtenir
Moshe
1
iotop nécessite un noyau supérieur à 2.6.20, ce qui exclut malheureusement RedHat el4 et el5.
Dave Cheney
2
Depuis RedHat 5.4, les bits nécessaires au bon fonctionnement de iotop ont été rétroportés. Prendre plaisir!
Dave Cheney
C'est dans Fedora :).
jamie
13

Comme suggéré par sastanin dans les commentaires, vous pouvez traiter directement les valeurs indiquées dans /sys/block/sda/statou /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 ceci (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.

Skippy le Grand Gourou
la source
7

Vous devriez jeter un coup d'oeil au sommet , qui combine la puissance de iotop / top / iftop, le tout au même endroit, et met en évidence les composants critiques de votre système.

Yvan
la source
5

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

MikeyB
la source
5

pour savoir quelle est votre bande passante totale, vous pouvez utiliser hdparm -T /dev/sdapour tester les performances du cache de mémoire tampon (fileio) hdparm -t /dev/sdaafin de tester les performances de lecture du périphérique

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 grappe RAID matérielle. Je soupçonne que ces derniers numéros pourraient être doubles sur du matériel de classe serveur.

définissez readahead supérieur à 256, 4096 me convient le mieux

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 la lecture de 1 Go à différentes tailles de bloc et différentes lectures à l'avance

utilisateur2987
la source
Bienvenue à SF. Vous pouvez utiliser la surbrillance de code dans vos publications en mettant des citations arrières autour de chaînes ou de paragraphes en retrait.
Jeudi
Deux choses - 1) --setraest maintenant -a, et 2), les hdparm -{T,t}commandes n'émettent que des lectures sur le disque strace, elles sont donc non destructives. (Les mentions légales concernant les conseils sur Internet s'appliquent)
i336_
4

L’outil standard permettant d’afficher la charge du disque dur est iostat.

Cela ne vous dira pas combien de% de bande passante vous utilisez, car il ne sait pas combien de bande passante votre disque a. Dans tous les cas, votre disque ne dispose que du chiffre cité par le fabricant pour les transferts importants de données contiguës.

Alnitak
la source
3

Je pense que RRDtool devrait faire ce que vous voulez . 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., afin de mesurer la charge du système.

PixelSmack
la source