Jenkins应该运行多少个线程?

Cam*_*ues 6 jenkins

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

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

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

这是Jenkins运行的适当线程数吗?我怎么能告诉Jenkins在完成它们时销毁线程?

Cam*_*ues 5

tl; dr:

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

长答案

我在CentOS上运行Jenkins,并已通过RPM安装。关于修改Winstone Servlet容器,您可以在Jenkin的init脚本中对其进行更改/etc/sysctrl/jenkins。但是,以上选项仅控制所创建的HTTP线程数,而不控制总体线程数。

如果我的线程在提交后操作中一直挂在访问Jenkins的HTTP API,那将是一个解决方案。但是,使用问题中提到的方便的Monitoring插件,我检查了卡住的线程。

线程卡在了com.trilead.ssh2.channel包装中的某物上。该getChannelData方法具有一个while(true)循环,该循环在ssh流的stderr或上寻找输出stdout。线程在该循环中变得糟透了,因为什么都没有通过。我在GrepCode上学到了这一点

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

脚本完成并且构建被认为是成功的,但是由于此git错误,以某种方式处理来自Jenkins的SSH连接的线程被挂起。

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