75 votes

Comment vérifier l'utilisation des E/S du disque par processus ?

J'ai un problème avec un système Linux et j'ai trouvé sysstat y sar pour signaler d'énormes pics d'E/S de disque, le temps de service moyen ainsi que le temps d'attente moyen.

Comment pourrais-je déterminer quel processus est à l'origine de ces pics la prochaine fois que cela se produira ?

Est-il possible de faire avec sar ? Puis-je trouver cette information dans les documents déjà enregistrés sar des fichiers ?

Sortie de sar -d le blocage du système s'est produit vers 12h58-13h01.

12:40:01          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
12:40:01       dev8-0     11.57      0.11    710.08     61.36      0.01      0.97      0.37      0.43
12:45:01       dev8-0     13.36      0.00    972.93     72.82      0.01      1.00      0.32      0.43
12:50:01       dev8-0     13.55      0.03    616.56     45.49      0.01      0.70      0.35      0.47
12:55:01       dev8-0     13.99      0.08    917.00     65.55      0.01      0.86      0.37      0.52
13:01:02       dev8-0      6.28      0.00    400.53     63.81      0.89    141.87    141.12     88.59
13:05:01       dev8-0     22.75      0.03    932.13     40.97      0.01      0.65      0.27      0.62
13:10:01       dev8-0     13.11      0.00    634.55     48.42      0.01      0.71      0.38      0.50

J'ai également une question complémentaire à un autre fil que j'ai ouvert hier :

0 votes

Il semble que le problème soit moins lié à un processus particulier qu'à un disque qui ne répond pas de manière sporadique. Les disques font ce genre de choses qui, au niveau du système, semblent être des falaises qu'un système a heurtées. Si vous ne trouvez aucun coupable, il est temps d'examiner le sous-système du disque.

66voto

halp Points 2038

Si vous avez la chance de tomber sur la prochaine période de pointe d'utilisation, vous pouvez étudier les statistiques d'E/S par processus de manière interactive, en utilisant iotop .

0 votes

L'exécution de iotop en mode batch pourrait être un très bon complément/remplacement de la solution "ps -eo" ci-dessus. Merci de votre compréhension.

2 votes

Génial, "iotop -n 1 -b -o" fournit exactement la sortie dont j'ai besoin. Je vous remercie.

1 votes

Il semble que cela nécessite un accès root au système pour être exécuté

53voto

user920391 Points 541

Vous pouvez utiliser pidstat pour imprimer les statistiques io cumulées par processus toutes les 20 secondes avec cette commande :

# pidstat -dl 20

Chaque ligne aura les colonnes suivantes :

  • PID - ID du processus
  • kB_rd/s - Nombre de kilo-octets que la tâche a fait lire sur le disque par seconde.
  • kB_wr/s - Nombre de kilo-octets que la tâche a fait ou fera écrire sur le disque par seconde.
  • kB_ccwr/s - Nombre de kilo-octets dont l'écriture sur le disque a été annulée par la tâche. Cela peut se produire lorsque la tâche tronque une pagecache sale. Dans ce cas, certaines entrées-sorties qui ont été prises en compte par une autre tâche ne se produiront pas.
  • Commande - Le nom de la commande de la tâche.

La sortie ressemble à ceci :

05:57:12 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:32 PM       202      0.00      2.40      0.00  jbd2/sda1-8
05:57:32 PM      3000      0.00      0.20      0.00  kdeinit4: plasma-desktop [kdeinit]              

05:57:32 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:57:52 PM       202      0.00      0.80      0.00  jbd2/sda1-8
05:57:52 PM       411      0.00      1.20      0.00  jbd2/sda3-8
05:57:52 PM      2791      0.00     37.80      1.00  kdeinit4: kdeinit4 Running...                   
05:57:52 PM      5156      0.00      0.80      0.00  /usr/lib64/chromium/chromium --password-store=kwallet --enable-threaded-compositing 
05:57:52 PM      8651     98.20      0.00      0.00  bash 

05:57:52 PM       PID   kB_rd/s   kB_wr/s kB_ccwr/s  Command
05:58:12 PM       202      0.00      0.20      0.00  jbd2/sda1-8
05:58:12 PM      3000      0.00      0.80      0.00  kdeinit4: plasma-desktop [kdeinit]

1 votes

Excellente réponse ! Veuillez noter que pidstat n'est généralement pas installé par défaut - sous Ubuntu, vous devez installer sysstat pour l'obtenir. Pour rechercher les entrées-sorties de processus spécifiques, utilisez soit -G <process_name> o -p <pid> . De même, si vous souhaitez obtenir un instantané (et non une mise à jour continue), ajoutez 1 après la commande dans la réponse ( man pidstat pour plus de détails), par exemple : pidstat -G suspect_proc -dl 20 1

0 votes

Si le disque est très chargé, pidstat, avec certains paramètres, se bloque et est inutile.

23voto

mr.spuratic Points 3330

Rien ne vaut une surveillance continue, car il est impossible de récupérer des données sensibles au temps après l'événement...

Il y a plusieurs choses que vous pourrait pouvoir vérifier pour impliquer ou éliminer cependant - /proc est votre ami.

sort -n -k 10 /proc/diskstats
sort -n -k 11 /proc/diskstats

Les champs 10, 11 sont les secteurs écrits cumulés, et le temps d'écriture cumulé (ms). Ceci montrera vos partitions de système de fichiers chaudes.

cut -d" " -f 1,2,42 /proc/[0-9]*/stat | sort -n -k +3

Ces champs sont le PID, la commande et les ticks d'attente d'E/S cumulés. Cela montrera vos processus chauds, bien que seulement s'ils sont encore en activité . (Vous voulez probablement ignorer les fils de journalisation de votre système de fichiers).

L'utilité de ce qui précède dépend du temps de fonctionnement, de la nature de vos processus à long terme et de la façon dont vos systèmes de fichiers sont utilisés.

Avertissements : ne s'applique pas aux noyaux pré-2.6, vérifiez votre documentation si vous n'êtes pas sûr.

(Maintenant, allez faire une faveur à votre futur vous-même, installez Munin/Nagios/Cacti/quelque chose ;-)

12voto

tom Points 11

Utilisez atop . ( http://www.atoptool.nl/ )

Écrire les données dans un fichier compressé qui atop peuvent lire plus tard dans un style interactif. Faites une lecture (delta) toutes les 10 secondes. Faites-le 1080 fois (3 heures ; ainsi, si vous l'oubliez, le fichier de sortie ne vous fera pas manquer de disque) :

$ atop -a -w historical_everything.atop 10 1080 &

Après la mauvaise chose se produit à nouveau :

(même s'il est toujours en cours d'exécution en arrière-plan, il s'ajoute toutes les 10 secondes).

% atop -r historical_everything.atop

Puisque vous avez dit IO, je frapperais 3 touches : tdD

t - move forward to the next data gathering (10 seconds)
d - show the disk io oriented information per process
D - sort the processes based on disk activity
T - go backwards 1 data point (10 seconds probably)
h - bring up help
b - jump to a time (nearest prior datapoint) - e.g. b12:00 - only jumps forward
1 - display per second instead of delta since last datapiont in the upper half of the display

1 votes

atop ne se bloque pas si le disque est très chargé

8voto

Janne Pikkarainen Points 31244

Utilisez btrace . Il est facile à utiliser, par exemple btrace /dev/sda . Si la commande n'est pas disponible, elle est probablement disponible dans le paquetage blktrace .

EDIT : Puisque le debugfs n'est pas activé dans le noyau, vous pouvez essayer. date >>/tmp/wtf && ps -eo "cmd,pid,min_flt,maj_flt" >>/tmp/wtf ou similaire. Enregistrer les défauts de page n'est bien sûr pas du tout la même chose que d'utiliser btrace, mais si vous avez de la chance, cela PEUT vous donner des indices sur les processus les plus gourmands en disque. Je viens d'essayer cette méthode sur l'un de mes serveurs les plus gourmands en entrées/sorties et j'ai listé les processus dont je sais qu'ils consomment beaucoup d'entrées/sorties.

0 votes

Bonjour Janne, le noyau n'est malheureusement pas compilé avec le système de fichiers de débogage, et c'est un système live donc je ne peux pas recompiler le noyau. Est-ce qu'il y a un autre moyen de le faire sans recompiler ?

0 votes

OK, j'ai un peu modifié ma réponse :)

0 votes

Super, on arrive à quelque chose ! Je pense mettre ceci dans un cronjob et l'exécuter en même temps que le cron job de sar. Ensuite, la prochaine fois que le serveur se bloque, je devrais être en mesure de comparer le taux d'erreurs de page pour voir quel processus a un taux accru d'erreurs de page. Je pense que je pourrais être malchanceux et voir une augmentation de l'io disque pour tous les processus pendant le blocage, mais cela vaut vraiment la peine d'essayer. Merci Janne ! (je voterais pour votre réponse si je le pouvais :S)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X