Tengo un sistema (Ubuntu) con muchos procesos y uno (o más) tiene una pérdida de memoria. ¿Hay una buena manera de encontrar el proceso que tiene la fuga? Algunos de los procesos son JVM, otros no. Algunos son de cosecha propia, algunos son de código abierto.cómo encuentro qué proceso está perdiendo memoria
Respuesta
Tarea difícil. Normalmente sugeriría tomar un depurador/perfilador de memoria como Valgrind y ejecutar los programas uno a uno en él. Pronto o más tarde encontrará el programa que se filtra y puede decirle al devloper o arreglarlo usted mismo.
Puede ejecutar el comando top
(para ejecutar de forma no interactiva, escriba top -b -n 1
). Para ver las aplicaciones que están perdiendo memoria, mirada en las siguientes columnas:
- RPRVT - residente tamaño del espacio de direcciones privadas
- RSHRD - dirección compartida del tamaño del espacio residente
- RSIZE - tamaño de la memoria residente
- VPRVT - dirección privada del tamaño del espacio
- VSIZE - tamaño de memoria total
Lo estaba intentando pero cualquier argumento de línea de comando que pase a la cima no da un resultado que tenga esta información. Me sale algo así como 'PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND '. ¿Alguna sugerencia de cómo obtener el resultado requerido? – niko
Como suggeseted, el camino a seguir es valgrind. Es un generador de perfiles que verifica muchos aspectos del rendimiento de ejecución de su aplicación, incluido el uso de la memoria.
El funcionamiento de su aplicación a través de Valgrind le permitirá verificar si se olvida de quitar memoria asignada con malloc, si liberar la misma memoria dos veces etc.
No estaba preguntando cómo rastrear las pérdidas de memoria de cierto programa. Pero cómo identificar, cuáles de los procesos fueron los filtrados. – akauppi
Además de arriba, puede utilizar Monitor de sistema (System - Administración - Monitor del sistema, luego seleccione la pestaña Procesos). Seleccione Ver - Todos los procesos, vaya a Editar - Preferencias y habilite la columna Memoria virtual. Ordene por esta columna o por la columna de memoria
¡GNOME definitivamente tiene este! – thanikkal
si el programa tiene una fuga durante un tiempo prolongado, la parte superior puede no ser práctica. Escribiría un script de shell simple que agrega el resultado de "ps aux" a un archivo cada X segundos, dependiendo de cuánto se tarda en filtrar cantidades significativas de memoria. Algo así como:
while true
do
echo "---------------------------------" >> /tmp/mem_usage
date >> /tmp/mem_usage
ps aux >> /tmp/mem_usage
sleep 60
done
Si no puede hacerlo por deducción, tenga en cuenta la señal de bengala patrón de depuración: Aumentar la cantidad de memoria asignada por un proceso en un factor de diez. Luego ejecuta tu programa.
Si la cantidad de memoria que se filtró es la misma, ese proceso no fue la fuente de la fuga; restaurar el proceso y hacer la misma modificación en el siguiente proceso.
Cuando llegue al proceso responsable, verá el tamaño de su salto de fuga de memoria (el "destello de señal"). Puede restringirlo aún más al aumentar selectivamente el tamaño de asignación de declaraciones separadas dentro de este proceso.
Sugiero el uso de htop, como una mejor alternativa a la parte superior.
- 1. IE está perdiendo ClearType
- 2. La implementación de Java SSL de Sun está perdiendo memoria?
- 3. Cuánta memoria está bloqueada en un proceso
- 4. ¿Por qué Valgrind dice que el programa SDL básico está perdiendo memoria?
- 5. ¿Cómo encuentro qué aplicación está utilizando mi puerto?
- 6. cómo investigar qué está haciendo un proceso?
- 7. Android USB Host - bulkTransfer() está perdiendo datos
- 8. editTexto no está perdiendo el foco
- 9. Determine qué proceso está bloqueando el portapapeles
- 10. ¿Cómo saber qué proceso está usando un archivo dado?
- 11. ¿Cómo saber qué proceso (stat: T) está conectado por gdb?
- 12. ¿Cómo puedo saber qué proceso Linux está esperando?
- 13. ¿Qué sucede cuando mongodb está sin memoria?
- 14. Compruebe si la ventana está perdiendo el foco
- 15. ¿Por qué New Relic está comiendo mucha memoria Tomcat?
- 16. C formato # fecha está perdiendo separadores de barra
- 17. NUnit Assert.Equals ¿Qué me estoy perdiendo?
- 18. Banderas de bits: ¿Qué me estoy perdiendo?
- 19. diseño de memoria de proceso de Windows
- 20. Git está perdiendo historial/contenido en archivos individuales
- 21. ¿Cómo encuentro qué archivo .emacs se ha cargado?
- 22. Determinar qué plantilla de proceso TFS se está utilizando
- 23. ¿Qué proceso está utilizando todo mi disco? IO
- 24. Limitación de memoria de proceso con MaxWorkingSet
- 25. ¿Cómo encuentro el directorio actual?
- 26. ¿Cómo se está acabando la memoria en Erlang?
- 27. ¿Uso de memoria de un proceso hijo?
- 28. Perdiendo estado de sesión
- 29. ¿Cómo optimizar el uso de la memoria del proceso php?
- 30. Mi regex está causando un desbordamiento de pila en Java; ¿Qué me estoy perdiendo?
try [valgrind] (http://valgrind.org/) – nickleefly