Disons que j'ai 20 utilisateurs connectés sur ma boîte Linux. Comment savoir combien de mémoire chacun utilise?
20
Vous pouvez essayer d'utiliser smem (voir ELC2009: Visualisation de l'utilisation de la mémoire avec smem pour plus d'informations). En particulier, sudo smem -u
devrait vous donner les informations que vous souhaitez.
--no-install-recommends
.Ignorant les problèmes de mémoire partagée, voici un script rapide qui vous donne RSS et VMEM pour tous les utilisateurs connectés, triés par vmem et organisés en colonnes mignonnes:
la source
Pour obtenir la somme de RSS, je pense que les œuvres suivantes. Ce serait d'obtenir la somme de RSS pour les utilisateurs kbrandt et root.
la source
Voilà une question délicate. Vous pouvez facilement résumer le montant total des échanges RSS + dans la sortie "ps", mais qu'en est-il de la mémoire partagée? Différents utilisateurs peuvent facilement partager la même page de codes s'ils exécutent le même processus. À qui expliquez-vous cela? Qu'en est-il des tampons et du cache? Cela dépend vraiment de la précision de vos résultats. Plus vous voulez de précision, plus ce sera difficile.
la source
Je ne sais pas comment signaler l'utilisation de la mémoire par utilisateur, mais si vous souhaitez contrôler leur utilisation, vous devriez rechercher ulimit. Il vous permettra de définir des limites matérielles et logicielles par utilisateur / groupe pour la mémoire et les autres ressources de votre système.
la source
Vous pouvez essayer quelque chose comme:
la source
ps aux | grep mysql | awk '{memory +=$4}; END {print memory }'
, où mysql pouvait être remplacé par le nom d'un utilisateur ou d'un processus.En cherchant la même chose, j'ai compris
pour imprimer les processus ordonnés par mem, groupés par utilisateur (colonne1, le $ 1), vous pouvez grouper par d'autres choses, et additionner d'autres choses, en changeant $ 1 et $ 4
J'étais heureux de trouver la solution, je voulais juste partager.
la source
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2
. La commande sort a besoin de l'-n
indicateur pour lui permettre d'analyser la mémoire sous forme de nombre. De cette façon, vous pouvez également remplacer le mot «utilisateur» par «commande» pour regrouper par nom d'application.Ce script bash est probablement moche comme l'enfer, mais merci pour l'exercice, mon bash rougissait!
Résultat:
Veuillez commenter / corriger et je mettrai à jour la réponse. J'utilise également la sortie mémoire rss de PS, comme d'autres l'ont expliqué, il y a des avantages / inconvénients à utiliser cette valeur.
la source
smem n'était pas disponible sur mon système, et le script de Dave ne fonctionnait pas pour une raison quelconque, j'ai donc écrit ce laid onliner Perl pour traiter la sortie ps:
Notez que certains utilisateurs ont été identifiés en utilisant leur UID plutôt que leur nom d'utilisateur. Vous pouvez résoudre ce problème en analysant les noms d'utilisateur de / etc / passwd, en utilisant le plus laid:
la source
Utilisation de Bash Script
PRODUCTION
la source
Vous pouvez obtenir les UID
/etc/passwd
pour le faire pour tous les utilisateursla source
Eh bien, dans cet état du noyau Linux, je ne peux penser qu'à un seul moyen approprié d'accomplir cette tâche - en utilisant des groupes de mémoire. Vous auriez besoin de mettre un utilisateur à la connexion dans son propre groupe de contrôle, et cela pourrait nécessiter le développement de son propre module pam ou (plutôt) la modification du module existant pour cela.
Un document utile à lire à ce sujet est: Guide de gestion des ressources par RedHat®.
la source