GNU/Linux >> Tutoriels Linux >  >> Linux

Vérifier la limite FD ouverte pour un processus donné sous Linux

Vous pouvez essayer d'écrire un script qui appelle périodiquement lsof -p {PID} sur le pid donné.


pour voir le top 20 des descripteurs de fichiers utilisant des processus :

for x in `ps -eF| awk '{ print $2 }'`;do echo `ls /proc/$x/fd 2> /dev/null | wc -l` $x `cat /proc/$x/cmdline 2> /dev/null`;done | sort -n -r | head -n 20

la sortie est au format file handle count, pid, cmndline for process

exemple de sortie

701 1216 /sbin/rsyslogd-n-c5
169 11835 postgres: spaceuser spaceschema [local] idle
164 13621 postgres: spaceuser spaceschema [local] idle
161 13622 postgres: spaceuser spaceschema [local] idle
161 13618 postgres: spaceuser spaceschema [local] idle

Comptez les entrées dans /proc/<pid>/fd/ . Les limites dures et souples s'appliquant au processus peuvent être trouvées dans /proc/<pid>/limits .


Les seules interfaces fournies par le noyau Linux pour obtenir des limites de ressources sont getrlimit() et /proc/ pid /limits . getrlimit() ne peut obtenir que les limites de ressources du processus appelant. /proc/ pid /limits vous permet d'obtenir les limites de ressources de n'importe quel processus avec le même identifiant d'utilisateur, et est disponible sur RHEL 5.2, RHEL 4.7, Ubuntu 9.04 et toute distribution avec un noyau 2.6.24 ou ultérieur.

Si vous devez prendre en charge des systèmes Linux plus anciens, vous devrez faire en sorte que le processus lui-même appelle getrlimit() . Bien sûr, le moyen le plus simple de le faire est de modifier le programme ou une bibliothèque qu'il utilise. Si vous exécutez le programme, vous pouvez utiliser LD_PRELOAD pour charger votre propre code dans le programme. Si rien de tout cela n'est possible, vous pouvez vous attacher au processus avec gdb et lui faire exécuter l'appel dans le processus. Vous pouvez également faire la même chose vous-même en utilisant ptrace() à rattacher au processus, insérer l'appel dans sa mémoire, etc., cependant c'est très compliqué à faire correctement et n'est pas recommandé.

Avec les privilèges appropriés, les autres façons de procéder impliqueraient de parcourir la mémoire du noyau, de charger un module du noyau ou de modifier autrement le noyau, mais je suppose que cela est hors de question.


Linux
  1. Linux - Limiter l'utilisation de la mémoire pour un seul processus Linux ?

  2. Comment calculer l'utilisation CPU d'un processus par PID sous Linux à partir de C ?

  3. bibliothèque Python pour la gestion des processus Linux

  4. Comment définir l'ID de processus sous Linux pour un programme spécifique

  5. Limiter l'utilisation de la mémoire pour un seul processus Linux

Comment vérifier tous les ports ouverts de votre système Linux

Comment trouver le PID et le PPID d'un processus sous Linux

Toutes les façons de vérifier si un port est ouvert sous Linux

Les 10 meilleurs gestionnaires de presse-papiers Open Source pour Linux

Les 10 outils de navigation de fichiers open source pour le système Linux

Les 10 meilleurs moteurs de rendu Open Source pour le système Linux