我正在创建一个 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/