Comment afficher l'utilisation résumée de la mémoire des groupes de commandes (au lieu des processus)


10

Existe-t-il un moyen de regrouper des processus similaires lors de l'utilisation d'outils tels que top / htop? Parfois, je veux simplement savoir ce qui mange ma mémoire et certains programmes (navigateurs principalement) utilisent plusieurs processus, ce qui rend difficile la lecture de la quantité de RAM qu'ils utilisent réellement.

Jusqu'à présent, je suis venu avec seulement quelque chose comme ça:

ps ax -o pmem,cmd | grep opera | grep -oE '^[ ]*[0-9.]+' | paste -sd+ - | bc

Réponses:


7

Vous pouvez utiliser ps -Cpour afficher uniquement les informations de processus pour un nom de commande particulier.

par exemple

ps -C opera

Vous pouvez ensuite utiliser d'autres psoptions pour extraire uniquement les données que vous recherchez. En particulier, hou --no-headerspour supprimer les en-têtes de colonne, et -o pmempour afficher le pourcentage de mémoire utilisé par le processus.

ps -C opera --no-headers -o pmem

Cela vous donnera un tas de pourcentages d'utilisation de la mémoire, un par ligne.

Il existe de nombreuses méthodes pour additionner des données comme celle-ci, l'une des méthodes que j'utilise fréquemment est de les canaliser en xargs pour les convertir en une seule ligne avec des éléments délimités par des espaces, puis en sed pour convertir des espaces en +symboles, puis en bcpour effectuer la calcul. Votre méthode de canalisation dans les paste -sd+travaux aussi bien ou sans doute mieux que | xargs | sed.

En mettant tout cela ensemble, vous obtenez:

ps -C opera --no-headers -o pmem | xargs | sed -e 's/ /+/g' | bc

ou

ps -C opera --no-headers -o pmem | paste -sd+ | bc

En d'autres termes, vous pouvez utiliser ps -Cau lieu de plusieurs greps si vous voulez simplement des données sur un programme en cours d'exécution particulier.

REMARQUE: vous pouvez utiliser plusieurs -Coptions sur la même ligne de commande si vous souhaitez obtenir des informations sur plusieurs programmes à la fois. par exemple

ps -C iceweasel -C chromium -C opera

Oui, première personne qui a réellement compris / lu ma question!
korda

Le seul problème que je vois avec cette approche est que certains programmes ont la même commande et pourtant je ne voudrais pas les regrouper (par exemple java ... et puisque je suis développeur java, j'ai généralement au moins quelques programmes java en cours d'exécution). Je suppose qu'il n'y a pas de solution parfaite ...
korda

il y a toujours ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...par exemple pour rechercher un programme java appelé foo.
ČAS

0

Vous pouvez créer un script shell

#!/bin/bash
Total=`cat /proc/meminfo | head -n1 | awk '{print $2}'`
max_usage=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $1}'`
name=`ps ax -o pmem,fname | sort -r | head -n2 | tail -n1 | awk '{print $NF}'`
echo "$Total $max_usage $name"
echo "($max_usage*$Total)/(100*1024)" | bc

Cela donnera l'application d'utilisation mem la plus élevée.


J'ai essayé de faire fonctionner cela et cela ne m'a pas donné de résultats intéressants. Par exemple, il ne montre qu'un seul programme, et ce n'est pas celui qui
utilise

C'est ça? Eh bien, vous voulez quelque chose comme top ?? si oui, vous pouvez modifier le script avec un retard de 2 ou 1 sec et exécuter la même chose dans un certain temps ou pour. Pour moi, cela montre l'application d'utilisation de la mémoire la plus élevée au moment où j'exécute ce script. quel genre de choses que vous essayez, lancez simplement: ps af -o pmem, cmd | sort -r Il vous donnera l'application d'utilisation mem la plus élevée
RahulAN

Ça ne fonctionne pas pour moi. Je suppose que la raison en est que ce type inclut les principaux espaces blancs
korda

Vous voulez dire que vous n'obtenez pas le nom correct du processus ??
RahulAN

Oui, beacuse ps ajoute des espaces aux éléments en retrait. Lorsqu'un processus a une utilisation à 2 chiffres, les valeurs d'utilisation à un chiffre seront mises en retrait et commenceront par un espace à gauche. Je suppose que l'ajout de quelque chose comme ça sed -e 's/^[[:space:]]*//'devrait le réparer. Votre script ajoute-t-il également l'utilisation de la mémoire des processus avec la même commande?
korda

0

De l'intérieur en haut, vous pouvez utiliser les éléments suivants:

Press SHIFT+f
Press the Letter corresponding to %MEM
Press ENTER

Vous pouvez également essayer:

ps -eo pmem,pcpu,vsize,pid,cmd | sort -k 1 -nr | head -5

Cette commande donnera les 5 premiers processus en fonction de l'utilisation de la mémoire.

J'espère que vous trouverez ces informations utiles!


0

Cela peut être simplifié avec termsql .

ps -C chromium-browser -o pmem | termsql -1 "SELECT SUM([%MEM]) FROM tbl"

Notez qu'actuellement, il n'est pas téléchargé sur PyPI et ne peut également être installé qu'à l'échelle du système ( setup.pyest un peu cassé), comme sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.