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

0 multithreading tomcat jvm web-services java-ee

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

Ola*_*ock 5

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

你能做什么?

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

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