Muy extraño OutOfMemoryError

Como siempre, una larga descripción del problema.

Actualmente estamos haciendo pruebas de estrés de nuestro producto, y ahora nos enfrentamos a un problema extraño. Después de una o dos horas, el espacio del montón comienza a crecer, la aplicación muere algún tiempo después.

El perfilado de la aplicación muestra una gran cantidad de objetos de Finalizer, llenando el montón. Bueno, pensamos que "podría ser el hilo finalizador extraño para frenar" el problema y se revisó para reducir la cantidad de objetos que necesitan finalizarse (controladores nativos JNA en este caso). Buena idea de todos modos y reducido miles de nuevos objetos ...

Las siguientes pruebas mostraron el mismo patrón, solo una hora después y no tan pronunciadas. Esta vez, los Finalizadores se originaron a partir de las secuencias FileInput y FileOutput que se utilizan en gran medida en el banco de pruebas. Todos los recursos están cerrados, pero los finalizadores ya no se limpian.

No tengo idea de por qué después de 1 o 2 horas (sin excepciones) el FinalizerThread parece dejar de funcionar repentinamente. Si forzamos System.runFinalization () a mano en algunos de nuestros hilos, el generador de perfiles muestra que los finalizadores están limpios. La reanudación de la prueba provoca inmediatamente una nueva asignación de almacenamiento dinámico para los finalizadores.

El FinalizerThread todavía está allí, preguntándole a la consola que está EN ESPERA.

EDITAR

Primero, inspeccionar el montón con HeapAnalyzer no reveló nada nuevo / extraño. HeapAnalyzer tiene algunas características interesantes, pero al principio tuve mis dificultades. Estoy usando jProfiler, que viene con buenas herramientas de inspección del montón y se quedará con él.

Tal vez me estoy perdiendo algunas características asesinas en HeapAnalyzer?

En segundo lugar, hoy configuramos las pruebas con una conexión de depuración en lugar del generador de perfiles: el sistema está estable durante casi 5 horas. Esto parece ser una combinación muy extraña de demasiados Finalizadores (que se han reducido en la primera revisión), el generador de perfiles y las estrategias de VM GC. Como todo funciona bien en este momento, no hay ideas reales ...

Gracias por la entrada hasta el momento, tal vez esté atento e interesado (ahora que puede tener más razones para creer que no hablamos sobre una simple falla de programación).

Respuestas a la pregunta(6)

Su respuesta a la pregunta