Herramienta simple para graficar el uso de memoria?

14

¿Existe un script que muestre el uso de la memoria como un gráfico, por ejemplo, como un gráfico circular, con cada proceso como un segmento separado?

No estoy buscando algo como Munin para graficar el uso de memoria con el tiempo, sino mostrar el uso de memoria por proceso en un solo punto en el tiempo.

Para hacer mi solicitud aún más oscura, es para un servidor sin cabeza (por lo que no hay aplicaciones X). La forma más sencilla sería escribir un archivo PNG, o posiblemente un archivo HTML (que podría usar Javascript para permitir el filtrado de procesos, cambiar entre tipos de gráficos, etc.)

dbr
fuente

Respuestas:

13

La contabilidad de memoria por proceso es complicada por varias razones por las que entraré en un minuto. Para una supervisión simple, gkrellmd o scripts nagios probablemente sea suficiente. Si desea una mayor precisión, deberá buscar más.

smem presenta el concepto de Tamaño de conjunto proporcional :

Debido a que grandes porciones de memoria física generalmente se comparten entre múltiples aplicaciones, la medida estándar del uso de memoria conocida como tamaño de conjunto residente (RSS) sobreestimará significativamente el uso de memoria. En cambio, PSS mide el "reparto justo" de cada aplicación de cada área compartida para dar una medida realista.

Ejemplo: inicia GNOME, provocando que se inicien varios procesos, uno para cada applet y programa. Todos se vinculan a libglib. Linux carga libglib en un bloque de memoria y lo asigna a cada proceso que quiere libglib. La contabilidad de memoria ingenua cuenta el tamaño completo de libglib contra cada proceso que se vincula a él.

smem divide el costo de libglib entre los procesos que lo utilizan, para dar una imagen más cercana de la realidad. También tiene una serie de opciones para mostrar el uso de la memoria (del sitio web):

  1. Mostrar información básica del proceso smem
  2. Mostrar vista del sistema smem -R 4G -K / ruta / a / vmlinux -w
  3. Mostrar totales y porcentajes smem -t -p
  4. Mostrar diferentes columnas smem -c "nombre de usuario pss"
  5. Mostrar procesos filtrados por mapeo smem -M libxml
  6. Mostrar asignaciones filtradas por proceso smem -m -P [e] volution
  7. Leer los datos de captura tarball smem --source capture.tar.gz
  8. Mostrar un gráfico de barras etiquetado por pid smem --bar pid -c "pss uss"
  9. Muestra un gráfico circular de RSS etiquetado por nombre smem --pie name -s rss

Sin embargo, necesitará un kernel muy reciente (> 2.6.27).

jldugger
fuente
1
Sí, su sugerencia de que 2.6.27 es razonablemente reciente es bastante ridícula. Las únicas distribuciones que sé que vienen con un kernel más nuevo son Fedora 10 y Ubuntu 9.01.
Dave Cheney
9.04; Ubuntu 8.10 se envió con 2.6.27, pero 2.6.30 está en rc3.
jldugger
Mis disculpas, he pasado mucho tiempo en tierra RHEL, donde 2.6.18 se considera reciente.
Dave Cheney
5

No puedo pensar en nada del estante

sin embargo, una combinación de un script PHP que ejecuta ps -AH v | awk '{print $ 8, $ 9, $ 10}' y usar eso con pChart podría proporcionarle una página web que haga lo que está buscando. (uso en Kb, porcentaje del total y nombre del proceso)

Mark Regensberg
fuente
1
+1, pensé en eso con la API de gráficos de Google. :)
Nodo
buen punto. Google Chart API es probablemente más rápido para trabajar ...
Mark Regensberg
2

Eche un vistazo a sarface : depende de los datos de sar y puede supervisar el uso de su memoria (y todos los demás datos de sar / sysstat) en vivo.

Jerjes
fuente
1

Hazlo tu mismo. Haga un script de shell simple que actualice la base de datos RRD. Luego dibuja un gráfico usando rrdtool.


fuente
1

Si realmente te gustan los niveles más bajos de detalle, no olvides el colectivo. Aquí hay un ejemplo de los tipos de utilización de memoria por proceso que puede informar:

REGISTRO 1 cag-dl585-02 (1244758290.002) (jue 11 de junio 18:11:30 2009)

RESUMEN DEL PROCESO (los contadores son / seg)
# Usuario PID S VmSize VmLck VmRSS VmData VmStk VmExe VmLib MajF MinF Command
 9089 raíz S 66856K 0 2328K 1440K 212K 736K 6812K 0 0 sendmail:
 9097 smmsp S 57600K 0 1772K 1304K 204K 736K 5904K 0 0 sendmail:
 9108 raíz S 6428K 0 360K 180K 84K 88K 1944K 0 0 gpm
 9120 raíz S 74808K 0 1136K 476K 520K 48K 1920K 0 0 crond
 9173 xfs S 20904K 0 1828K 1124K 88K 104K 3084K 0 0 xfs

Si está interesado en procesos específicos, puede especificar los filtros apropiados (incluido un interruptor para mostrar hilos).

Y si le interesa la memoria en general, también puede mostrar detalles de losa e incluso tiene una salida en formato vmstat. ¿Por qué querría mostrar datos en formato vmstat cuando la herramienta existente ya lo hace? Eso es fácil: colectivamente puede registrar estadísticas en un archivo y reproducirlo más tarde en múltiples formatos.

pruébalo, te gustará

Jeff Atwood
fuente
1
  1. Grep el proceso (s).
  2. Analice la salida y guárdela en un formato separado por comas en un archivo de texto.
  3. Abra el archivo separado por comas en Excel.
  4. Dibuje el gráfico para esos datos utilizando la utilidad de gráficos de Excel.

Si desea instantáneas de memoria en un intervalo de tiempo diferente ... configure el trabajo cron en el intervalo deseado y ejecute el script.

Espero que ayude....

Jeff Atwood
fuente
0

Esto no es exactamente lo que está buscando, pero quizás pueda adaptarlo a sus necesidades utilizando esta referencia (busque "Uso de memoria por proceso").

Ivan
fuente
0

Puedes usar #top o #sysstat

Rajat
fuente
0

No entre en más detalles, pero collectl tiene una opción para generar resultados separados por delimitadores, por lo que en el caso de gnuplot, solo genera sus datos con espacios y ya está todo listo. Incluso se cargará muy bien en Excel. Si desea comas, puede cambiar el delimitador y si realmente desea hacer la ruta rrd (¡solo tenga cuidado porque las parcelas no necesariamente coinciden con los datos!), Puede cambiar el delímetro a dos puntos e incluso cambiar las marcas de tiempo a UTC. -marca


fuente
0

kSar, basado en datos sar, pero está basado en java, por lo que es más o menos independiente de la plataforma y le permitirá ssh a un host remoto para obtener los datos.

http://ksar.atomique.net/

Greeblesnort
fuente
0

¿ Phpsysinfo no te da la posibilidad de ver la información del proceso de alguna manera?

djangofan
fuente