Jenkins应该运行多少个线程?

时间:2012-07-02 20:41:51

标签: jenkins

我有一台Jenkins服务器,内存不足,无法创建本机线程。我已经提升了内存并安装了Monitoring plugin

服务器上有大约150个项目,我一直在观察线程计数整天都在上升。它现在大约是990.我预计当它达到1024,这是线程的用户限制时,Jenkins会再次耗尽内存。

[edit]: I have hit 1016 threads and am now getting the out of memory error

这是Jenkins运行的适当线程数吗?我怎么能告诉Jenkins在线程结束时销毁线程?

2 个答案:

答案 0 :(得分:3)

<强> TL; DR:

有一个运行bash脚本的构建后操作没有通过stderr或stdout向Jenkins返回任何内容。因此,每次构建运行时,都会创建线程并卡住wait。我通过让bash脚本返回exit状态来解决此问题。

长答案

我在CentOS上运行Jenkins并通过RPM安装。在修改Winstone servlet容器方面,您可以在/etc/sysctrl/jenkins中的Jenkin的init脚本中更改它。但是,上面的选项只控制创建的HTTP线程数,而不是整体线程数。

如果我的线程在作为提交后操作的一部分访问Jenkins的HTTP API时挂起,那将是一个解决方案。但是,使用我的问题中提到的非常方便的监控插件,我检查了卡住的线程。

线程卡在com.trilead.ssh2.channel包中的某些内容上。 getChannelData方法有一个while(true)循环,用于在ssh流的stderrstdout上查找输出。线程在那个循环中变得很糟糕,因为没有任何东西通过。我在GrepCode上学到了这一点。

这是因为构建后的操作是通过SSH执行命令到服务器上并执行一个bash脚本来检查git repo。但是,git repo配置错误并且git命令会出错,但exit 1状态没有通过bash脚本冒泡(部分原因是if-elif-else语句错误)。

脚本已经完成,构建被认为是成功的,但是由于这个git错误,处理Jenkins的SSH连接的线程被搁置了。

但是,谢谢你对这个问题的帮助!

答案 1 :(得分:2)

如果您“开箱即用”运行Jenkins,它将使用Winstone servlet容器。您可以将命令行参数作为described here传递给它。其中一些参数可以限制线程数:

 --handlerCountStartup    = set the no of worker threads to spawn at startup. Default is 5
 --handlerCountMax        = set the max no of worker threads to allow. Default is 300
 --handlerCountMaxIdle    = set the max no of idle worker threads to allow. Default is 50

现在,我在前一段时间尝试过,并不是100%确信它有效,所以没有保证,但值得一试。