2008-11-17 16 views

Respuesta

13

Todas las fugas de memoria del programa perl serán un XS que se aferra a una referencia, o una estructura de datos circular. Devel::Cycle es una gran herramienta para encontrar referencias circulares, si sabe qué estructuras es probable que contengan los bucles. Devel::Peek se puede usar para encontrar objetos con un recuento de referencias mayor al esperado.

Si no sabe dónde más buscar, Devel::LeakTrace::Fast podría ser un buen primer lugar, pero necesitará un perl creado para la depuración.

Si sospecha que la fuga está dentro del espacio XS, es mucho más difícil, y Valgrind será probablemente su mejor opción. Test::Valgrind puede ayudarlo a reducir la cantidad de código que necesita para buscar, pero esto no funcionará en Windows, por lo que tendría que realizar un puerto (al menos la parte con fugas) a Linux para hacerlo.

5

Devel::Gladiator le mostrará una lista de cuántos de cada tipo de variable Perl tiene en memoria en un momento dado, y a qué se refieren. Muy útil para averiguar qué tipo de objetos se crean pero no se liberan.

4

Dado que no se ha mencionado aún, Devel::Size informará el tamaño de una estructura de datos. No se proporciona ninguna otra información y las reglas que utiliza para determinar el 'límite' de su estructura de datos son opacas. Para estructuras simples esto no es un problema.

Devel::SizeMe es un proyecto de mis aficiones que tiene como objetivo resolver los problemas de Devel :: El tamaño y permitir la visualización de todo el uso de la memoriade un intérprete de Perl. Consulte my blog para obtener información adicional, incluidos enlaces a screencasts y videos. Uno de mis objetivos es permitir la detección y visualización de fugas, pero eso aún está lejos todavía.

actualizaciones:

Además de los otros comentarios, es posible encontrar mi Perl Memory Use talk en LPW2013 útil. Recomiendo ver the screencast ya que explica las diapositivas y tiene algunas imágenes lindas y algunos Q & A al final.

También sugiero mirar el módulo Paul Evans Devel::MAT que menciono en la charla.

Cuestiones relacionadas