Digamos que tengo 20 usuarios registrados en mi Linux Box. ¿Cómo puedo saber cuánta memoria está usando cada uno de ellos?
20
Puede intentar usar smem (consulte ELC2009: Visualización del uso de memoria con smem para obtener más información). En particular, sudo smem -u
debería darle la información que desea.
--no-install-recommends
.Ignorando los problemas de memoria compartida, aquí hay un script rápido que le brinda RSS y VMEM para todos los usuarios registrados, ordenados por vmem y organizados en columnas lindas:
fuente
Para obtener la suma de RSS, creo que los siguientes trabajos. Esto sería para obtener la suma de RSS para los usuarios kbrandt y root.
fuente
Esa es una pregunta difícil. Puede resumir fácilmente las cantidades totales de intercambio RSS + en la salida "ps", pero ¿qué pasa con la memoria compartida? Diferentes usuarios podrían compartir fácilmente la misma página de códigos si están ejecutando el mismo proceso. ¿A quién le cuentas eso? ¿Qué pasa con las memorias intermedias y el caché? Realmente depende de qué tan preciso desea que sean sus resultados. Cuanto más preciso quieras, más difícil será.
fuente
No estoy seguro de cómo informar el uso de memoria por el usuario, pero si le preocupa controlar su uso, debería buscar ulimit. Le permitirá establecer límites rígidos y flexibles por usuario / grupo para la memoria y otros recursos en su sistema.
fuente
Puedes probar algo como:
fuente
ps aux | grep mysql | awk '{memory +=$4}; END {print memory }'
, donde mysql podría reemplazarse con el nombre de un usuario o proceso.Buscando lo mismo, descubrí esto
para imprimir procesos ordenados por mem, agrupados por usuario (columna1, $ 1), puede agrupar por otras cosas y sumar otras cosas, cambiando $ 1 y $ 4
Estaba feliz de encontrar la solución, solo quería compartir.
fuente
ps --no-headers -eo user,rss | awk '{arr[$1]+=$2}; END {for (i in arr) {print i,arr[i]}}' | sort -nk2
. El comando de clasificación necesita la-n
bandera para analizar la memoria como un número. También de esta manera puede reemplazar la palabra "usuario" con "comando" para agrupar por nombre de la aplicación.Este script de bash es probablemente feo como el infierno, pero gracias por el ejercicio, ¡mi bash se estaba oxidando!
Resultado:
Por favor comente / corrija y actualizaré la respuesta. También uso la salida de memoria rss de PS, ya que otros han discutido que hay ventajas / desventajas de usar este valor.
fuente
smem no estaba disponible en mi sistema, y el script de Dave no funcionó por alguna razón, así que escribí este feo onliner de Perl para procesar la salida ps:
Tenga en cuenta que algunos usuarios fueron identificados utilizando su UID en lugar de su nombre de usuario. Puede lidiar con esto analizando los nombres de usuario de / etc / passwd, usando el más feo:
fuente
Usando Bash Script
SALIDA
fuente
Puede obtener los UID
/etc/passwd
para hacer esto para todos los usuariosfuente
Bueno, en este estado del kernel de Linux, solo puedo pensar en una forma adecuada de lograr esta tarea: usar cgroups de memoria. Debería poner un usuario al iniciar sesión en su propio cgroup, y esto podría requerir el desarrollo del propio módulo pam o (más bien) modificar el módulo existente para eso.
Un documento útil para leer sobre esto es: Guía de gestión de recursos de RedHat®.
fuente