我有一个Jenkins服务器,内存不足,无法创建本机线程.我已经提升了内存并安装了Monitoring插件.
服务器上有大约150个项目,我一直在观察线程计数整天都在上升.它现在大约是990.我预计当它达到1024,这是线程的用户限制时,Jenkins将再次耗尽内存.
[edit]: I have hit 1016 threads and am now getting the out of memory error
这是Jenkins运行的适当线程数吗?我怎么能告诉Jenkins在完成它们时销毁线程?
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连接的线程被挂起。
但是,谢谢您对这个问题的帮助!
| 归档时间: |
|
| 查看次数: |
9372 次 |
| 最近记录: |