(Tomcat)Web服务:OutOfMemoryError:无法创建新的本机线程

时间:2016-04-07 04:05:03

标签: multithreading web-services tomcat java-ee jvm

我正在创建一个Web服务,它可以在(10k)上创建大量的小型Java计时器线程。在得到OutOfMemoryError之前,我似乎只能创建2k计时器线程:无法创建新的本机线程。我该如何解决这个问题?我正在使用macbook pro来运行我的Tomcat服务器。我配置了ulimit(-u)最大用户进程以使其过去加倍,但我仍然遇到同样的问题。如果有的话,我有什么选择可以做到这一点?

1 个答案:

答案 0 :(得分:5)

对于Web应用程序来说,启动自己的(少数)线程,更不用说10K线程,然后“作为定时器”,这通常是一个坏主意?真的吗?不要去那里。

你能做什么?

  • 不要依赖于创建这些线程的能力。
  • 改变你的架构!使用已解决此问题的调度程序库(例如Quartz或其他)。
  • 如果你不想使用外部库(为什么不呢?):实现一个计时器线程,它在到期时执行计划的操作。 不要为每个计划的操作使用新线程

如果你想煮100个鸡蛋,你会买100个鸡蛋吗?