Tenemos una aplicación de servidor de larga ejecución que ejecuta Java 5, y al perfilarla podemos ver que la generación anterior crece lentamente con el tiempo. Está liberado correctamente en un GC completo, pero me gustaría poder mirar los objetos inalcanzables en Eclipse MAT usando un volcado de pila. Obtuve exitosamente un volcado de pila con + XX: HeapDumpOnCtrlBreak, pero la JVM siempre hace un GC antes de volcar el montón. Aparentemente esto no ocurre en Java 6, pero estamos estancados en 5 por ahora. hay alguna forma de prevenir esto?¿Cómo puedo hacer un volcado de heap en Java 5 sin recoger basura primero?
Respuesta
Sugiero un generador de perfiles de terceros como YourKit, que puede permitirle tomar instantáneas sin iniciar antes el GC. Además, puedes tomar una instantánea sin las trampas de ctrl-break.
jProfiler (ej-technologies) puede hacer esto.
tengo algo de código aquí que la programación puede tomar un volcado del montón sobre JMX:
Enlace: JmxHeapDumper.java
Los comentarios en el código fuente contienen 2 enlaces a artículos que contenían información útil acerca de cómo tomar montón deshecho. No estoy seguro, pero si tiene suerte, tal vez el enfoque JMX tendría alguna forma de evitar el GC. Espero que esto ayude !
Genial, gracias, voy a echar un vistazo y ver si es GC de antemano o no. Ser capaz de hacerlo programáticamente parece bastante útil, en realidad. – Colin
¿Has probado la herramienta estándar jmap enviada con el JDK? La cifra de jmap se introdujo oficialmente en Java 5.
Ejemplo línea de comando: /java/bin/jmap -heap: format = b
El resultado puede ser procesada con la herramienta jhat estándar o con aplicaciones GUI como MAT.
use jconsole o visualvm o jmc o ... otra consola de administración de jmx. abrir HotSpotDiagnostic en com.sun.management. Elija un método para dumpHeap y la entrada de dos parámetros:
- ruta de acceso al archivo de volcado
- (verdadero/falso) descargan objetos solamente en directo. use
false
para volcar todos los objetos.
Tenga en cuenta que el archivo de volcado será escrito por la JVM a la que se conectó, no por JVisualVM, por lo que si la JVM se ejecuta en un sistema diferente, se escribirá en ese sistema.
- 1. ¿Incluye un volcado del heap Java pilas de hilos
- 2. Cuándo recoger basura
- 3. ¿Debería recoger a la generación joven primero en una recolección de basura completa?
- 4. constantPoolClass en Java Heap?
- 5. Java Heap Space - ¿Cómo funciona -Xmx exactamente?
- 6. ¿Cómo puedo saber si un objeto Java está en tenencia o espacio eden desde el volcado del heap?
- 7. Herramientas para consultar colecciones en el volcado de heap
- 8. Obtener el volcado del heap desde una aplicación remota en Java usando JVisualVM
- 9. Vaciado de volcado webstart de Java
- 10. ¿Cómo puedo hacer una actualización en Class :: DBI sin seleccionar primero un registro?
- 11. Diferencia entre javacore, volcado de hebras y volcado de heap en Websphere
- 12. Genera un volcado de hilo Java sin reiniciar.
- 13. Java.lang.OutOfMemory Java Heap Space JDeveloper
- 14. Applet: Java heap space
- 15. Cómo leer fotogramas de un volcado de memoria (sin GDB)?
- 16. crear volcado dinámico desde la aplicación, sin HotSpotDiagnosticMXBean
- 17. Java tiene un núcleo 39G volcado
- 18. Volcado de hilo Java: BLOQUEADO hilo sin "esperar para bloquear ..."
- 19. Error de Java Heap Space en glassfish
- 20. Herramienta para analizar grandes volcados de heap Java
- 21. Cómo puedo hacer un Java Daemon
- 22. ¿Cómo puedo hacer un JAR desde .java
- 23. ¿Cómo puedo ver los últimos commits de un repositorio de Git remoto sin hacer un clon primero?
- 24. Crear un volcado de almacenamiento en java desde un volcado de memoria de Windows
- 25. ¿Cómo puedo ver qué recolector de basura java está usando
- 26. ¿Puedo forzar la recolección de basura en Java?
- 27. Convierta un volcado de PostgreSQL en un volcado de MySQL
- 28. ¿Cómo puedo hacer un espacio sin interrupciones en reStructuredText?
- 29. Solicitar el volcado del he va en java (volcado del núcleo) desde la aplicación
- 30. ¿Cómo hacer un JFrame desplazable en Java?
Gracias, en realidad tiene una copia de JProfiler, pero no me di cuenta que podía hacer esto. Voy a darle una oportunidad. – Colin