Estoy tratando de encontrar un error muy evasivo en un software de servidor que parece una pérdida de memoria, pero memcheck no ayudó en absoluto. Mi suposición es que la memoria que ha sido instanciada y nunca eliminada no se ha filtrado, por lo que hay una referencia a ella, pero ahora es inútil para el programa y debe eliminarse. ¿Existe alguna herramienta que pueda contar los accesos, no las referencias, en la memoria, y así dar una evaluación del uso efectivo de los objetos en el montón?lista áreas de memoria "frías"
Respuesta
que terminó con la implementación de mi propia herramienta. Mi enfoque era un poco diferente de lo que pretendía: escribí un malloc hooking library. Enloca malloc, realloc y free, y mantiene una lista de bloques de memoria malloc vivos. Cada vez que envíe un SIGUSR1 a su aplicación, volcará su información en un archivo y lo evaluará como una expresión Mathematica. El cuaderno de Mathematica finalmente proporciona algunos gráficos muy útiles: instancias de puntaje superior by call stack, y una descripción completa de calls to malloc. Con estas herramientas, tuve que pasar el mouse sobre el punto verde más grueso y más distante del centro del segundo gráfico, y, voilà, tengo la dirección que ejemplifica una gran cantidad de memoria no filtrada pero inútil.
P.S. Las llamadas circulares que se pueden ver en el segundo gráfico son definitivamente un error en el backtrace de libc().
Me sorprende que valgrind no haya hecho lo que usted quería, no ha habido un escape de memoria que valgrind no haya recogido para mí. – dreamlax
Este error es extremadamente elusivo por otra razón: otro tipo ha encontrado una manera de desencadenarlo de forma confiable en su compilación, pero ese método no funciona para el mío (la misma fuente nueva y sin tocar, por supuesto). Entonces, Memcheck no encontró nada obviamente para mí, pero este tipo me dijo que sí ejecutó Memcheck y no devolvió nada, y no tengo motivos para pensar que haya hecho algo mal. Los datos que se muestran en los gráficos provienen también de su construcción. Sospecho que de alguna manera está relacionado con la bitness, construye ejecutables de 32 bits para poder compartir la misma compilación en cualquier servidor, mientras que construí solo ejecutables de 64 bits. –
Probablemente esta herramienta (Visual Leak Detector) te ayude. Es gratis.
parece un detector de fugas normal, como he dicho, mi problema es que la memoria extra en uso no se ha filtrado técnicamente, porque todavía hay referencias a ella. Además, estoy trabajando con gcc. –
- 1. Áreas de desplazamiento anidadas
- 2. Áreas portátiles Vs áreas de proyectos múltiples?
- 3. Comparta áreas de memoria entre trabajadores de apio en una máquina
- 4. controladores divididos por áreas
- 5. ¿RedirigirAcción entre áreas?
- 6. uso de Áreas en MVC2
- 7. MVC Html.BeginForm utilizando Áreas
- 8. Excel Get_Range con múltiples áreas
- 9. Enrutamiento ASP.NET MVC y áreas
- 10. Complementos de relleno de áreas con matplotlib
- 11. Áreas de orden y texto de Php
- 12. En memoria 'lista appender' para log4j
- 13. Áreas de multiproyectos en ASP.Net MVC 3
- 14. Mismo nombre de controlador en diferentes áreas
- 15. Dibujar áreas seleccionadas de un UIImage
- 16. ¿Qué áreas de código usa f # para?
- 17. selectionStart-End, con áreas de texto
- 18. reduciendo los requisitos de memoria para la lista de adyacencia
- 19. Estructura de datos efectiva para áreas espaciales superpuestas
- 20. Áreas TFS, definición óptima y configuración
- 21. ASP.NET MVC3 - Áreas en ensamblajes separados
- 22. ASP.net MVC - Compartir parciales entre áreas
- 23. MVC Áreas para empresas, ¿buenas o malas?
- 24. Usando _ViewStart en áreas para contenido anidado
- 25. iPhone, Mapa, áreas no rectangulares seleccionables
- 26. ASP.NET MVC Áreas con distribución compartida
- 27. Google Maps API V3 Gray Áreas
- 28. Symfony2 No se redirigir en áreas restringidas
- 29. ¿Cómo uso un _ViewStart común en áreas?
- 30. REQUISITOS memoria para la lista de gran pitón
Valgrind debe informar cosas que nunca se han liberado como "todavía alcanzables"; ver http://valgrind.org/docs/manual/faq.html#faq.deflost. –
@oli: es posible que desee publicar su comentario como respuesta para que pueda marcarse como aceptado. Parece que es la respuesta correcta para mí, de todos modos. – casualcoder
Ya he ejecutado memcheck con este programa y no mostró nada. –