Cómo ver el uso de memoria resumida de grupos de comandos (en lugar de procesos)


10

¿Hay alguna manera de agrupar procesos similares cuando se usan herramientas como top / htop? A veces solo quiero saber qué está consumiendo mi memoria y algunos programas (en su mayoría navegadores) están utilizando múltiples procesos, lo que dificulta la lectura de la cantidad de RAM que realmente usan.

Hasta ahora solo se me ocurrió algo así:

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

Respuestas:


7

Puede usar ps -Cpara mostrar solo información de proceso para un nombre de comando en particular.

p.ej

ps -C opera

Luego puede usar otras psopciones para extraer solo los datos que está buscando. En particular, ho --no-headerspara suprimir los encabezados de columna, y -o pmempara mostrar el porcentaje de memoria utilizada por el proceso.

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

Eso le dará un montón de porcentajes de uso de memoria, uno por línea.

Existen numerosos métodos para sumar datos como ese, uno de los métodos que uso con frecuencia es canalizarlo en xargs para convertirlo en una línea con elementos delimitados por espacios, luego en sed para convertir espacios en +símbolos y luego bcpara realizar el cálculo. Su método de conexión paste -sd+funciona bien o podría decirse que mejor | xargs | sed.

Al poner todo eso en conjunto, obtienes:

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

o

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

En otras palabras, puede usar en ps -Clugar de múltiples greps si solo desea datos sobre un programa en ejecución en particular.

NOTA: Puede usar múltiples -Copciones en la misma línea de comando si desea información sobre más de un programa a la vez. p.ej

ps -C iceweasel -C chromium -C opera

¡Yay, primera persona que realmente entendió / leyó mi pregunta!
korda

El único problema que veo con este enfoque es que algunos programas tienen el mismo comando y, sin embargo, no me gustaría agruparlos (por ejemplo, java ... y como soy desarrollador de Java, generalmente tengo al menos algunos programas Java en ejecución). Supongo que no hay una solución perfecta ...
korda

siempre hay, ps h -C java -o pmem,args | awk '/foo/ {print $1}' | ...por ejemplo, buscar un programa java llamado foo.
cas

0

Puedes hacer un script de 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

Esto le dará la aplicación de mayor uso de memoria.


He intentado que esto funcione y no me dio resultados interesantes. Por ejemplo, solo muestra un programa, y ​​no es el que ocupa la mayor parte de la memoria
korda

¿Lo es? Bueno, ¿quieres algo como top? en caso afirmativo, puede modificar el script con un retraso de 2 o 1 segundo y ejecutar lo mismo en algún momento o por un tiempo. Para mí, muestra la aplicación de uso de memoria más alta en el momento en que ejecuto este script. qué tipo de cosas está intentando, simplemente ejecute: ps af -o pmem, cmd | sort -r Te dará la aplicación de uso de
memoria

No está funcionando para mi. Supongo que la razón es que ese tipo incluye espacios en blanco principales
korda

¿Quiere decir que no está recibiendo el nombre correcto del proceso?
RahulAN

Sí, porque ps agrega espacios a las sangrías. Cuando un proceso tiene un uso de 2 dígitos, los valores de uso de un dígito se sangrarán y comenzarán con un espacio inicial. Supongo que agregar algo como sed -e 's/^[[:space:]]*//'debería solucionarlo. ¿También su script agrega el uso de memoria de los procesos con el mismo comando?
korda

0

Desde el interior de la parte superior puede usar lo siguiente:

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

También puedes probar:

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

Este comando dará los 5 procesos principales por uso de memoria.

¡Espero que encuentres útil esta información!


0

Esto se puede simplificar con termsql .

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

Tenga en cuenta que actualmente no se carga en PyPI , y también solo se puede instalar en todo el sistema ( setup.pyestá un poco roto), como sudo pip install https://github.com/tobimensch/termsql/archive/master.zip.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.