Tenemos un servidor web java que usa eclipse-jetty versión 8.1.6. Recientemente comenzamos a notar un error de falta de memoria. Tuvimos pocos perfiles sobre el número de subprocesos activos. Esto parece ser razonable alrededor de 100. El proceso tiene una memoria de almacenamiento dinámico máxima de 5 GB y una memoria de almacenamiento dinámico inicial de 4 GB.
Process Details Environment: Docker(kubernetes) java.version="1.8.0_91" java.vm.info="mixed mode" java.vm.name="Java HotSpot(TM) 64-Bit Server VM" thread size = 1024K ulimit is unlimited for max process per user. Container(Pod) Max memory is allocated to be 8GB
El servidor web recibe un promedio de 350 solicitudes por minuto. También ejecutamos muchas instancias de este tipo detrás de ELB (servicio Kubernetes). Después de funcionar durante unas horas notamos este OOM. El problema es aleatorio y ocurre en la prueba de esfuerzo.
Rastreo de pila de OOM:
java.lang.OutOfMemoryError: unable to create new native thread at java.lang.Thread.start0(Native Method) [na:1.8.0_91] at java.lang.Thread.start(Thread.java:714) [na:1.8.0_91] at org.eclipse.jetty.util.thread.QueuedThreadPool.startThread(QueuedThreadPool.java:441) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903] at org.eclipse.jetty.util.thread.QueuedThreadPool.dispatch(QueuedThreadPool.java:366) [jetty-util-8.1.16.v20140903.jar:8.1.16.v20140903]
Dado que el número de hilos es razonable. Sospecho que alguna pérdida de memoria. Pero no puedo encontrar el tamaño de memoria fuera del montón en un contenedor acoplable. ¿Hay alguna manera de encontrarlo?
Después de buscar por un tiempo, encontré este error a continuación en el embarcadero.
¿Cómo verificar si el error se debe a un problema a continuación sin actualizar el embarcadero?
ID de error relacionado: https://bugs.eclipse.org/bugs/show_bug.cgi?id=477817
Podría intentar agregar -XX:-HeapDumpOnOutOfMemoryError en sus parámetros de inicio de Java y buscar en el volcado.