multithreading - (Tomcat) 网络服务 : OutOfMemoryError: unable to create new native thread

标签 multithreading web-services tomcat jakarta-ee jvm

我正在创建一个 Web 服务,它创建了大量超过 (10k) 的小型 Java 计时器线程。在出现 OutOfMemoryError: unable to create new native thread 之前,我似乎只能创建 2k 个计时器线程。我该如何解决这个问题?我正在使用 macbook pro 来运行我的 Tomcat 服务器。我已经将 ulimit (-u) 最大用户进程配置为以前的两倍,但我仍然遇到同样的问题。我有什么选择(如果有的话)来实现这一目标?

最佳答案

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

你能做什么?

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

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

关于multithreading - (Tomcat) 网络服务 : OutOfMemoryError: unable to create new native thread,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36466508/

相关文章:

c++ - operator new 是否在 THREAD 堆上分配?

java - 如何使用 javax.swing.text.AsyncBoxView 将 JTextPane 中的文本布局委托(delegate)给非 EDT 线程?

java - 确保线程在完成某些任务时完成的最优雅的方法

java - WS : what to return when saving?

web-services - 有状态与无状态 Web 服务

tomcat - 在 tomcat 7 中编码正斜杠和反斜杠?

C# 如何在多线程中使用 MemoryStream

java - 如何实现版本控制客户端说svn作为java web服务?

java - 将图像名称更改为不同的图像名称(在服务器上部署后添加)在 eclipse ee 开发中不起作用

java - JSP 应用程序的浏览器插件或调试面板