我已经启动了一个码头服务器和一个ehcache实例,很快当我启动另一个jave进程时,我遇到了linux上的线程限制。
错误消息unable to create new native thread
(附言我的Linux操作系统是CentOS 6.2)。
然后我用ps -xH
知道两个 java 进程(jetty 和 ehcache)生成了近 800 个线程,ps -xH
总数为 1023,ulimit -u
显示 1024。
所以,我的问题是,为什么 java 会生成线程,但我遇到了进程数的限制?
附言我有足够的内存
因为对于 Linux 线程来说,进程基本上是一回事。它们之间的区别在于线程共享内存、文件描述符等内容,而进程则不共享。
查看此内容以获取更深入的见解。因此,线程和进程都计入 1023 个进程的限制。
您可能应该尝试创建更少的线程,这对我来说似乎是一个巨大的问题。
到目前为止,这是过多的线程,至少对于Jetty来说是这样。除非您以每秒数百个请求向服务器施加压力,否则这不应该发生。 仔细检查线程是否没有无限期阻塞。在任何情况下,请配置在排队或拒绝请求之前允许的最大线程数。