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

Multithreading (Tomcat)Web服务:OutOfMemoryError:无法创建新的本机线程,multithreading,web-services,tomcat,jakarta-ee,jvm,Multithreading,Web Services,Tomcat,Jakarta Ee,Jvm,我正在创建一个web服务,它创建了超过(10k)的大量小型java计时器线程。在获得OutOfMemoryError之前,我似乎只能创建2k计时器线程:无法创建新的本机线程。我如何解决这个问题?我正在使用MacBookPro运行我的Tomcat服务器。我已经将ulimit(-u)max用户进程配置为以前的两倍,但我仍然遇到同样的问题。如果有的话,我的选择是什么呢?对于web应用程序来说,启动自己的(少数)线程,更不用说10K线程,然后“作为计时器”通常是个坏主意?认真地不要去那里 你能做什么

我正在创建一个web服务,它创建了超过(10k)的大量小型java计时器线程。在获得OutOfMemoryError之前,我似乎只能创建2k计时器线程:无法创建新的本机线程。我如何解决这个问题?我正在使用MacBookPro运行我的Tomcat服务器。我已经将ulimit(-u)max用户进程配置为以前的两倍,但我仍然遇到同样的问题。如果有的话,我的选择是什么呢?

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

你能做什么

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

对于web应用程序来说,启动自己的(少数)线程通常是个坏主意,更不用说10K线程了——然后“作为计时器”?认真地不要去那里

你能做什么

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

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

我建议重新考虑你的方法,考虑是否真的需要用线程来建模。即使您可以正确地配置它,我也会质疑线程是否是正确的方法。我建议您重新考虑您的方法,并考虑是否真的需要使用线程对此进行建模。即使您可以正确地配置它,我也会质疑线程是否是正确的方法。