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日誌中發佈錯誤消息嗎? –
另外,請說明您正在使用的詹金斯版本。 –