Je suis intéressé par un utilitaire ou un processus de surveillance des E / S disque par fichier sur CentOS.
Sur Win2008, l' utilitaire resmon autorise ce type de drilldown, mais aucun des utilitaires Linux que j'ai trouvés ne le fait (iostat, iotop, dstat, nmon).
Mon intérêt pour la surveillance des goulots d'étranglement d'E / S sur les serveurs de base de données. Avec MSSQL, je l'ai trouvé un diagnostic informatif pour savoir quels fichiers / espaces de fichiers sont les plus touchés.
Réponses:
SystemTap est probablement votre meilleure option.
Voici à quoi ressemble la sortie de l' exemple iotime.stp :
L'inconvénient (en dehors de la courbe d'apprentissage) est que vous devrez installer le débogage du noyau , ce qui peut ne pas être possible sur un système de production. Cependant, vous pouvez recourir à une instrumentation croisée où vous compilez un module sur un système de développement et exécutez ce .ko sur le système de production.
Ou si vous êtes impatient, consultez le chapitre 4. Scripts SystemTap utiles du guide du débutant.
la source
Script SystemTap * :
La sortie ressemble à ceci:
Ou si vous choisissez d'afficher uniquement le chemin à partir du point de montage:
Limitations / bugs:
devname
est -"N/A"
devname
est"N/A"
Les résultats des programmes de Matthew Ife :
pour mmaptest privé:
pour mmaptest partagé:
pour le diotest (E / S directes):
* Instructions d'installation rapide pour RHEL 6 ou équivalent:
yum install systemtap
etdebuginfo-install kernel
la source
task_dentry_path
) :-) Je n'ai aucune idée de cette E / S, mais je peux le tester si vous me donnez une commande ou un exemple de programme. Par exemple, j'ai utilisé Python pour tester mmap.dd iflag=direct oflag=direct
révéler.Vous voudriez réellement l'utiliser
blktrace
pour cela. Voir Visualiser Linux IO avec Seekwatcher et blktrace .Je verrai si je peux bientôt publier un de mes exemples.
Modifier:
Vous ne mentionnez pas la distribution de Linux, mais c'est peut-être un bon cas pour un script dtrace sur Linux ou même System Tap , si vous utilisez un système de type RHEL.
la source
Le seul outil que je connaisse qui puisse surveiller l'activité d'E / S par fichier est
inotifywatch
. Cela fait partie duinotify-tools
package. Malheureusement, cela ne vous donne que le nombre d'opérations.la source
utiliser iotop pour obtenir les PID des processus qui contribuent à un haut niveau d'E / S
exécuter strace contre le PID que vous avez généré, vous verrez quels fichiers sont accédés par un processus particulier
la source
J'ai finalement utilisé Sysdig pour cela
la source
csysdig
, appuyez sur F2 et sélectionnezFiles
Afficher. Vous verrez le haut des fichiers consultés par colonne OPS (peut être modifié en appuyant sur F9).csysdig -v files
passe directement à la vue "Fichiers"Je dirais que vous avez peut-être posé la mauvaise question. si vous recherchez des goulots d'étranglement d'E / S, il peut être tout aussi important de voir ce qui se passe sur votre disque. Les db sont connus pour faire des E / S aléatoires, ce qui peut réduire considérablement le débit, surtout si vous n'avez que quelques broches.
ce qui peut être plus intéressant, c'est de voir si vous avez de longs temps d'attente sur les disques eux-mêmes. vous pouvez le faire avec collectl via la commande "collectl -sD", qui affichera les statistiques de performances des disques individuels. Sont --home pour le transformer en un utilitaire de haut niveau. S'il y a beaucoup de disques impliqués, exécutez-le via colmux: colmux -command "-sD" et il vous permettra de trier par une colonne de votre choix, même sur plusieurs systèmes.
la source
Vous pouvez surveiller les E / S par périphérique de bloc (via / proc / diskstats) et par processus (io comptabilité via
/proc/$PID/io
ou taskstats ), mais je ne connais pas de moyen de le faire par fichier.la source
Peut être inotify résoudra cela.
L'API inotify fournit un mécanisme de surveillance des événements du système de fichiers. Inotify peut être utilisé pour surveiller des fichiers individuels ou pour surveiller des répertoires. Lorsqu'un répertoire est surveillé, inotify renvoie des événements pour le répertoire lui-même et pour les fichiers à l'intérieur du répertoire.
Surveiller l'activité du système de fichiers avec inotify
Référence inotify
la source
lsof
)Bien qu'il y ait beaucoup de bonnes informations dans les réponses ici, je me demande si elles sont réellement applicables?
Si vous parlez de fichiers dans les 10s de gigaoctets, constamment écrits, alors à moins qu'il ne s'agisse de fichiers journaux ou similaires qui sont constamment ajoutés (dans ce cas, surveillez simplement la taille des fichiers), il est très probable que les fichiers soient mmapés . Si tel est le cas, la meilleure réponse pourrait être que vous devriez cesser de chercher la plupart des solutions. La première chose que vous devriez alors demander à toute autre solution proposée est "cela fonctionne-t-il avec mmap", parce que la plupart du temps ils ne le feront pas. Cependant, vous pouvez peut-être transformer le problème en surveillance d'un périphérique bloc plutôt qu'en surveillance d'un fichier.
Lorsqu'un programme demande une page à partir d'un fichier mmap, il fait simplement référence à un emplacement dans la mémoire virtuelle. Cette page peut ou peut ne pas être déjà en mémoire. SI ce n'est pas le cas, cela génère une erreur de page, ce qui déclenche le chargement de la page à partir du disque, mais cela se produit dans le système de mémoire virtuelle, qui n'est pas facilement lié à un processus d'application spécifique ou à un fichier spécifique. De même, lorsque votre application met à jour une page mmap'd, en fonction des indicateurs, cela peut ne pas déclencher une écriture immédiate sur le disque, et dans certains cas, ne pas aller du tout sur le disque (bien que ces derniers ne soient probablement pas les cas qui vous intéressent dans).
Le mieux que je puisse penser pour les fichiers mmap, si cela est viable pour vous, est de placer chacun des fichiers d'intérêt sur un appareil distinct et d'utiliser les statistiques de l'appareil pour collecter vos informations d'utilisation. Vous pouvez utiliser des partitions lvm pour cela. Un montage de liaison ne fonctionnera pas car il ne crée pas de nouveau périphérique de bloc.
Une fois que vous avez vos fichiers sur des périphériques de bloc distincts, vous pouvez obtenir des statistiques à partir de / sys / block / * ou de / proc / diskstats
Il peut être trop perturbateur d'introduire cela sur un serveur de production, mais vous pouvez peut-être l'utiliser.
SI les fichiers ne sont pas mappés, alors oui, vous pouvez choisir l'une des autres solutions ici.
la source
Récemment, je bricolais avec collectl , il semble être un excellent outil et assez simple à installer. Le plus intéressant est que vous pouvez découvrir quel est le processus responsable des goulots d'étranglement d'E / S. Je vous recommanderais de lire Utilisation de Collectl , cela pourrait être utile.
la source
Je vous recommande de vérifier http://dag.wieers.com/home-made/dstat/ . Cet excellent outil permet de vérifier de nombreuses statistiques.
la source
Je pense que iotop est l'un des meilleurs outils sous Linux pour identifier les goulots d'étranglement sur IO.
la source
iotop
ne surveille pas par fichier, il fonctionne par processus