Java: Unable to create new native thread
Ich habe eine Java-Anwendung gehostet wird, die auf die von einem web-hosting-Unternehmen. Alle paar Tage meine app geht nach unten mit:
[2011-03-09 15:52:14,501] ERROR http-12021-9
java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:597)
Hosting-Unternehmen sagt, es bedeutet, dass meine app ist undicht Speicher, aber die Werkzeuge, die ich habe, zeigen den freien Speicher noch verfügbar ist. Da die Fehlermeldung ist immer die Schaffung eines neuen nativen thread-mein denken ist, dass das Thema in der JVM-Konfiguration/OS-Ressourcen.
Wie kann ich verhindern, dass dieser Fehler passiert?
InformationsquelleAutor tvfoodmaps | 2011-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seine wahrscheinlich das problem mit der JVM-web-server-Ende. Überprüfen Sie bitte die folgenden link, um einige details,
http://blog.egilh.com/2006/06/2811aspx.html
Gibt es eine einfache Möglichkeit aus java-code selbst, um die Anzahl der threads, die im Zusammenhang mit meinem Prozess? Da dies ein webhosting-Unternehmen JVM habe ich sehr wenig Zugang zu JVM-level-Werkzeuge. Ich kann mein instrument code aber.. (das ist, was ich getan habe zu bekommen, JVM-Speicher info).
es gibt keine Möglichkeit, soweit ich weiß, aber hosting Unternehmen support-team, wer kann dump die threads für Sie, wenn Sie Ihnen beibringen wie.
InformationsquelleAutor Tayyab
Eine Möglichkeit ist, dass Sie erreicht haben, Ihre Benutzer-Grenze für die Anzahl der geöffneten Dateien.
Ich glaube, dass jeder Prozess/Thread verbraucht eine oder mehrere Datei-Deskriptoren.
Zum Beispiel, wenn dies der Fall für Ihre Benutzer dann "Nein" shell-Befehl funktionieren wird, da die shell-Befehle Gabel aus einem Prozess ausgeführt (sehen Sie Fehler wie "-bash: fork: retry: Resource temporarily unavailable")
Ich dieses Problem und fand heraus, dass nur der aktuelle Benutzer nicht in der Lage war, um zu laichen procct... andere user wurden davon unberührt.
Zu beheben, bis Ihr ulimit -n (max-Dateien öffnen) Einstellung... details Folgen.
Können Sie Ihre Benutzer-limits mit dem Befehl:
Bis Sie Ihre max file limit mit den folgenden:
Hier ist, was ich jetzt haben:
All das sehen, klare Grenzen für Ihr system:
Bitte beachten Sie: ich bin mit Oracle Linux 6.3 - Ergebnisse leicht unterscheiden kann zwischen den Distributionen.
InformationsquelleAutor jatal
Wenn Sie starten Sie Ihren Prozess, der JVM hat eine begrenzte heap-Größe (Standardwert ist 128 MB). Dieser server kann auch mehr Speicher, aber deine JVM nicht - Sie verwendet Sie alle.
Können Sie dies ändern mit der
-Xms
und-Xmx
Kommandozeilen-Argumente, aber ich würde vorschlagen, die Suche nach dem memory-leak erste 🙂Verstehen, ich bin mit diesen Begriff im allgemeinsten Sinn, da es keine Möglichkeit gibt, um Speicher direkt in java dann den überblick verlieren, wie Sie es konnten in C. Wie sind Sie mit der Reinigung bis diese threads, die du gestartet?
Danke, hatte diesen Fehler mit arduino und mit Xms100m es gelöst!
InformationsquelleAutor Brian Roach
Hast du keine Speicher-tracking? Feuer bis jconsole und Uhr oder melden Sie Ihr Gedächtnis Verbrauch über einen Zeitraum von 24 Stunden. Wenn es (im Durchschnitt) nach oben geht ohne zu kommen zurück nach unten, dann sind Sie der Speicher ausgeht und möglicherweise nicht genügend Speicher zum speichern der details Ihrer neuen thread.
InformationsquelleAutor Edwin Buck
Es ist das problem mit linux zu handhaben keine.der Dateien öffnen
Geben Sie wie folgt vor
ulimit -n 65536
(jede Zahl u geben kann)
InformationsquelleAutor sugan
Sieht aus wie Gewinde undicht. Threads erstellt werden, aber dann irgendwo hängen geblieben. Dump die threads in regelmäßigen Abständen, um zu sehen, wenn die Zahl der zugewiesenen threads wächst. Look für jeden Schlaf - /hanging threads in der Müllhalde.
InformationsquelleAutor Vladimir Dyuzhev