Estimaciones falsas del uso de RAM con herramientas de línea de comando

-2

Estoy tratando de medir el uso de RAM de MyProcess args

Tiempo GNU

Después de esta publicación

gtime -v ./MyProcess args

[..]
Maximum resident set size (kbytes): 303316992 # (303 GB)
[..]

¡Claramente no tengo 303 GB de RAM en mi computadora!

zsh - time

Siguiendo esta publicación

zsh
TIMEFMT='%J   %U  user %S system %P cpu %*E total'$'\n'\
'avg shared (code):         %X KB'$'\n'\
'avg unshared (data/stack): %D KB'$'\n'\
'total (sum):               %K KB'$'\n'\
'max memory:                %M MB'$'\n'\
'page faults from disk:     %F'$'\n'\
'other page faults:         %R'

time ./MyProcess args

avg shared (code):         0 KB
avg unshared (data/stack): 0 KB
total (sum):               0 KB
max memory:                73204 MB # (73 GB)
page faults from disk:     0
other page faults:         18528

¡Tampoco tengo 73 GB de RAM en mi máquina!

tstime

Siguiendo esta publicación ... no pude instalarla !

Monitor de actividad

El monitor de actividad me da un uso de RAM de unos 60 MB. Esto suele ser el uso de RAM que esperaba.

Por supuesto, MyProcess es determinista y el uso de RAM no debe variar de una ejecución a otra.

¿Puedes ayudarme a descubrir qué está mal (si es que ocurre algo) y cómo puedo medir el uso de RAM de un proceso con un tipo de comando time como?

Para tu información, uso Mac OS X 10.11.3

    
pregunta Remi.b 27.03.2017 - 02:35

1 respuesta

3

El primer OS X no es Linux, así que no asumas que la documentación de Linux funciona.

Creo que en realidad obtuviste la respuesta correcta en la salida del tiempo: el tamaño máximo de conjunto residente es de 73 MB. (Este fragmento de código implica que non macOS tiene el tamaño en kilobytes, mientras que Apple como en la documentación a continuación está en los bytes)

Las páginas de comando man de OSX comienzan en man time - entonces time -l ./process da

  

-l Se imprimen los contenidos de la estructura del rusage.

La estructura rusage está establecida por getrusage() que incluye campos

struct rusage {
             struct timeval ru_utime; /* user time used */
             struct timeval ru_stime; /* system time used */
             long ru_maxrss;          /* max resident set size */

y

  

ru_maxrss el tamaño máximo de conjunto residente utilizado (en bytes).

así que time -l ./MyProcess args debería dar lo que quieres.

    
respondido por el Mark 27.03.2017 - 03:50

Lea otras preguntas en las etiquetas