【发布时间】:2013-01-10 10:23:40
【问题描述】:
在我们的项目中,我创建了很多 java 线程来做一些连续的工作。
在大多数情况下,这些线程处于休眠状态,因此总 CPU 成本较低。
使用1168 线程,system overload 应低于 0.20
但后来我注意到,如果我用 jvm 创建超过 1000 个线程,那么我会得到 p>
fork: retry: Resource temporarily unavailable
当我想通过ssh 连接vm(我的意思是VM,而不是jvm)时,这似乎是一个关于系统资源的严重问题..
而且我非常担心我的程序中会发生什么..
【问题讨论】:
-
你只是用完了可用的线程/进程。 到底为什么需要超过 1000 个线程?
-
在我看来,您超出了 linux 内核参数。它们中的大多数都非常可调。见:stackoverflow.com/questions/9361816/…
-
@thkala 是的,我确实有很多单独的工作应该在单独的线程中完成。正如我所说,很多时候,这些线程都在等待系统 IO
-
@jackalope:你的日志怎么说?你用完了哪个资源?进程/线程槽?内存?
-
@jackalope:启动大量线程很少是答案。处理器数量大约增加一倍就足够了——你应该对其他一切使用异步 I/O...
标签: java linux multithreading