Existe-t-il un moyen de vérifier l'utilisation des ulimits pour un utilisateur donné? Je sais que vous pouvez modifier les ulimits pour un seul processus lorsque vous le démarrez ou pour un seul shell lors de son exécution, mais je veux pouvoir "surveiller" à quel point un utilisateur est proche d'atteindre ses limites. Je prévois d'écrire un script bash
qui rendra compte à statsd du pourcentage d'utilisation actuel. Plus précisément, je veux suivre:
ulimit -n
)ulimit -u
)ulimit -i
)Ce que je veux, c'est le pourcentage d'utilisation (0-100).
Peut-être que cela aide pour la première question:
Si vous connaissez les ID de processus (PID) de l'utilisateur spécifique, vous pouvez obtenir les limites de chaque processus avec:
cat /proc/<PID>/limits
Vous pouvez obtenir le nombre de fichiers ouverts pour chaque PID avec:
ls -1 /proc/<PID>/fd | wc -l
Et puis il suffit de comparer la valeur de Max open files
avec le nombre de descripteurs de fichiers ouverts de la deuxième commande pour obtenir un pourcentage.
Générez le pourcentage de fichiers ouverts, de proc et de signaux en attente de l'utilisateur actuel par plusieurs méthodes et outils standard peu pratiques:
paste <(grep 'open files\|processes\|pending signals' /proc/self/limits |
cut -c27-38) \
<(i=`whoami` ; lsof -u $i | tail -n +2 | awk {'print $9'} | wc -l;
ps --no-headers -U $i -u $i u | wc -l ;
ps -u $i -o pid= | xargs printf "/proc/%s/status\n" |
xargs grep -s 'SigPnd' |
sed 's/.*\t//' | paste -sd+ | bc ; ) |
while read a b ; do echo $((${b}00/a))%; done
Sortie sur mon système:
59%
9%
0%
En supposant que ces chiffres sont bons, cette réponse montre que cela peut être fait dans Shell, mais ne devrait probablement pas, à moins qu'il existe de bien meilleures méthodes Shell. Au contraire, ce Q serait mieux fait avec gcc
, ou python
, etc.