Con ps
o herramientas similares, solo obtendrá la cantidad de páginas de memoria asignadas por ese proceso. Este número es correcto, pero:
-
no refleja la cantidad real de memoria utilizada por la aplicación, solo la cantidad de memoria reservada para ella
-
puede ser engañoso si las páginas se comparten, por ejemplo, por varios hilos o mediante el uso de bibliotecas vinculadas dinámicamente
Si realmente desea saber qué cantidad de memoria usa realmente su aplicación, debe ejecutarla dentro de un generador de perfiles. Por ejemplo, Valgrind puede brindarle información sobre la cantidad de memoria utilizada y, lo que es más importante, sobre posibles pérdidas de memoria en su programa. La herramienta de perfilado de montón de Valgrind se llama 'massif':
Massif es un perfilador de montones. Realiza perfiles de montón detallados tomando instantáneas periódicas del montón de un programa. Produce un gráfico que muestra el uso del montón a lo largo del tiempo, incluida información sobre qué partes del programa son responsables de la mayoría de las asignaciones de memoria. El gráfico se complementa con un archivo de texto o HTML que incluye más información para determinar dónde se asigna la mayor cantidad de memoria. Massif ejecuta programas unas 20 veces más lento de lo normal.
Como se explica en la documentación de Valgrind, debe ejecutar el programa a través de Valgrind:
valgrind --tool=massif <executable> <arguments>
Massif escribe un volcado de instantáneas de uso de memoria (por ejemplo, massif.out.12345
). Estos proporcionan, (1) una línea de tiempo del uso de la memoria, (2) para cada instantánea, un registro de dónde se asignó la memoria de su programa. Una gran herramienta gráfica para analizar estos archivos es massif-visualizer. Pero encontré ms_print
, una herramienta simple basada en texto incluida con Valgrind, que ya es de gran ayuda.
Para encontrar fugas de memoria, use el (predeterminado) memcheck
herramienta de valgrind.
Pruebe el comando pmap:
sudo pmap -x <process pid>