Frage

Ich bin eine Überlastung eines Servers simulieren und ich bekomme diese Fehlermeldung:

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

Ich habe auf dieser Seite lesen http://activemq.apache.org/javalangoutofmemory.html, dass ich die Speicherkapazität erhöhen kann. Aber wie kann ich das tun? Welche Datei muss ich ändern ,? Ich habe versucht, die Argumente der ist / activemq Skript übergeben, aber kein Glück.

War es hilfreich?

Lösung

Ihr Fall entspricht massive Anzahl von Threads . Es gibt 3 Möglichkeiten, es zu lösen:

  • reduziert Anzahl von Threads (d.h. -Dorg.apache.activemq.UseDedicatedTaskRunner = false in dem Dokument)
  • reduzieren pro-Thread-Stapelgröße von -Xss Option (Standardwerte: 320 KiB für 32-Bit-Java auf Win / Linux, 1024 KiB für 64-Bit-Java auf Win / Linux finden Sie unter < a href = "http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#threads_oom" rel = "nofollow noreferrer"> doc )
  • reduzieren ( nicht verlängern ) Heapgröße -Xmx ein Zimmer für pro-Thread-Stacks (512 MiB standardmäßig in ActiveMQ-Skript)
  • machen

Hinweis . Wenn Stack oder Heap zu klein ist, muss sie verursachen eine andere OutOfMemoryError

Sie können angeben, sie mit ACTIVEMQ_OPTS Shell-Variable (in UNIX). Beispielsweise führen ActiveMQ als

ACTIVEMQ_OPTS=-Xss160k bin/activemq

Andere Tipps

hier Überprüfen

Geben Sie das -Xmx Argument an die VM, die die ActiveMQ laufen -. Tomcat, zum Beispiel

Sie können die virtuelle Java-Maschine mehr Speicher mit dem -Xmx Befehl Argumente zuweisen.
Z.B. java -Xmx512M MyClass

Wir liefen in dieser Ausgabe auf einem Linux (RedHat Enterprise 5) System und entdeckt, dass auf dieser die nprocs ulimit in /etc/security/limits.conf bauen tatsächlich die Anzahl der Threads steuert ein Benutzer erzeugen kann.

Sie können diese Grenze sehen die ulimit -a Befehl.

Aus dem Kasten heraus, dies zu einer weichen Grenze von 100 und einer harten Grenze von 150 eingestellt wurde, die bedauerlicherweise kurz von der Anzahl der Threads notwendig ist, einen modernen App Server laufen zu lassen.
Ich entfernte diese Grenze völlig und es löste dieses Problem für uns.

Das sieht nicht wie Sie aus Heap-Speicher ausgeführt werden, so erhöhen Sie nicht, dass (die -Xmx Option). Stattdessen wird die Anwendung von Prozessspeicher ausgeführt und abnehmend der Heap-Speicher wird Prozessspeicher für native Nutzung freizugeben. Die Frage ist, warum Sie so viel Prozess-Speicher verwenden? Wenn Sie nicht über JNI verwenden, haben Sie wahrscheinlich zu viele Threads erstellt und Post habe erläutert, wie Sie das beheben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top