TL;博士:
有运行bash脚本,并没有通过stderr返回任何标准输出或詹金斯一个生成后的行动。因此,每次构建运行时,都会创建线程并卡住wait
。我通过让bash脚本返回exit
状态来解决此问题。
长的答案
我运行詹金斯在CentOS,并通过RPM安装英寸在修改Winstone servlet容器方面,您可以在Jenkin的初始化脚本/etc/sysctrl/jenkins
中更改它。但是,上面的选项只控制所创建的HTTP线程的数量,而不是整个线程的数量。
这将是一个解决方案,如果我的线程挂在访问Jenkins的HTTP API作为后提交操作的一部分。但是,使用我的问题中提到的方便的Monitoring插件,我检查了卡住的线程。
线程卡在com.trilead.ssh2.channel
软件包中。 getChannelData
方法有一个while(true)
循环,该循环在ssh流的stderr
或stdout
上查找输出。线程在这个循环中变得越来越糟,因为没有任何东西可以通过。我在GrepCode上了解到这一点。
这是因为构建后的操作是通过SSH在服务器上执行一个命令并执行一个bash脚本来检查git仓库。但是,git repo配置错误,git命令会出错,但exit 1
状态没有通过bash脚本冒泡(部分原因是由于if-elif-else语句不正确)。
该脚本完成,构建被认为是成功的,但不知何故处理来自Jenkins的SSH连接的线程由于这个git错误而被挂起。
但是,谢谢你对这个问题的帮助!
@ruffin,LOL,但请保留您的意见专业 –
当您的线程用完时,您可以从Jenkins日志中发布错误消息吗? –
另外,请说明您正在使用的詹金斯版本。 –