2016-04-07 8 views
0

Ich erstelle einen Web-Service, der eine riesige Menge von kleinen Java-Timer-Threads über (10k) erzeugt. Ich kann anscheinend nur 2k-Timer-Threads erstellen, bevor ich den OutOfMemoryError erhalte: Ich kann keinen neuen nativen Thread erstellen. Wie löse ich das? Ich benutze ein MacBook Pro, um meinen Tomcat Server zu starten. Ich habe die ulimit (-u) max-Benutzerprozesse so konfiguriert, dass sie das verdoppeln, was es früher war, aber ich bekomme immer noch das gleiche Problem. Was sind meine Optionen, wenn dies möglich ist?(Tomcat) Web-Service: OutOfMemoryError: unable neuen native Thread erstellen

+2

Ich würde vorschlagen, Ihren Ansatz zu überdenken und darüber nachzudenken, ob Sie das wirklich mit Threads modellieren müssen. Auch wenn Sie es richtig konfigurieren können, würde ich in Frage stellen, ob Threads der richtige Ansatz dafür waren. –

Antwort

5

Es ist oft eine schlechte Idee für Web-Anwendungen, ihre eigenen (einige) Threads zu starten, geschweige denn 10K-Threads - und dann "als Timer"? Ernst? Geh nicht dorthin.

Was können Sie tun?

  • Verlassen Sie sich nicht auf die Fähigkeit, diese Threads zu erstellen.
  • Ändern Sie Ihre Architektur! Verwenden Sie eine Scheduler-Bibliothek, die dieses Problem bereits gelöst hat (z. B. Quartz oder andere).
  • Wenn Sie nicht wollen, um eine externe Bibliothek verwenden (warum würden Sie nicht?): Einen einzelnen Timer-Thread implementieren, die die geplanten Operationen ausführen, wenn sie fällig sind. Sie keinen neuen Thread für jede geplante Operation verwenden

Wenn Sie 100 Eier kochen wollten, würden Sie 100 Timer kaufen?

Verwandte Themen