Pregunta

Estoy simulando una sobrecarga de un servidor y recibo este error:

java.lang.OutOfMemoryError: unable to create new native thread

He leído en esta página http://activemq.apache.org/javalangoutofmemory.html, que puedo aumentar el tamaño de la memoria. Pero, ¿cómo hago eso? ¿Qué archivo necesito modificar? Intenté pasar los argumentos por el script bin / activemq pero no tuve suerte.

¿Fue útil?

Solución

Su caso corresponde a cantidad masiva de hilos . Hay 3 formas de resolverlo:

  • reduce el número de subprocesos (es decir, -Dorg.apache.activemq.UseDedicatedTaskRunner = false en el documento)
  • reduzca el tamaño de la pila por subproceso mediante la opción -Xss (valores predeterminados: 320 KiB para Java de 32 bits en Win / Linux, 1024 KiB para Java de 64 bits en Win / Linux, vea < a href = "http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom" rel = "nofollow noreferrer"> doc )
  • opción de reducir ( no extender ) tamaño de pila -Xmx para hacer un espacio para las pilas por hilo (512 MiB de forma predeterminada en el script ActiveMQ)

Nota : si la pila o el montón es demasiado pequeño, debe causar otro OutOfMemoryError .

Puede especificarlos usando la variable de shell ACTIVEMQ_OPTS (en UNIX). Por ejemplo, ejecute ActiveMQ como

ACTIVEMQ_OPTS=-Xss160k bin/activemq

Otros consejos

Marque aquí

Especifique el argumento -Xmx para la máquina virtual que ejecuta ActiveMQ - Tomcat, por ejemplo.

Puede asignar más memoria a la máquina virtual Java utilizando el argumento del comando -Xmx .
P.ej. java -Xmx512M MyClass

Nos encontramos con este problema en un sistema Linux (RedHat Enterprise 5) y descubrimos que en esta compilación el nprocs ulimit en /etc/security/limits.conf realmente controla el número de subprocesos a usuario puede generar.

Puede ver este límite utilizando el comando ulimit -a .

Fuera de la caja, se estableció en un límite suave de 100 y un límite rígido de 150, lo que es lamentablemente inferior al número de subprocesos necesarios para ejecutar un Servidor de aplicaciones moderno.
Eliminamos este límite por completo y resolvimos este problema por nosotros.

Esto no parece que se esté quedando sin espacio de almacenamiento dinámico, así que no aumente eso (la opción -Xmx). En su lugar, la aplicación se está quedando sin memoria de proceso y disminuye el espacio del montón liberará la memoria de proceso para uso nativo. La pregunta es, ¿por qué estás usando tanta memoria de proceso? Si no usas JNI, probablemente hayas creado demasiados hilos, y la publicación de habe ha explicado cómo solucionarlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top