我的情況類似於這個: Eclipse CDT Headless build hangs after build is finished,但我挖了一點點,並發現其他問題。Java死鎖與Eclipse CDT無頭版本
場景:我在Linux(Debian Jessie 8.2)上有一個C++應用程序和一個Jenkins構建服務器。我在我的開發環境中安裝了Eclipse CDT,它完美地構建了我的C++應用程序(本地構建)。我在構建服務器上安裝了Eclipse CDT,並且我的Jenkins腳本運行了一個headlessbuild來構建我的應用程序。
問題:Jenkins即使在構建完成後也會掛起。但這不是詹金斯的錯。我從等式中刪除了Jenkins,並在構建服務器中執行了Eclipse headlessbuild,結果相同,打印出「Build Finished」後掛起。值得注意的是,如果我在構建服務器中打開Eclipse CDT並使用UI觸發構建,則可以成功構建應用程序。
版本:在構建服務器中,我嘗試了Java 1.7和1.8。至於Eclipse,我嘗試過開普勒,月神,火星和霓虹燈(最後一個需要Java 1.8)。對於這篇文章中,我使用這個:
java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (IcedTea 2.6.7) (7u111-2.6.7-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.111-b01, mixed mode)
命令:這裏是無頭的構建,我使用的Eclipse CDT的命令:
~/eclipse/eclipse -nosplash -application org.eclipse.cdt.managedbuilder.core.headlessbuild -import ~/myAppProj/ -build myAppProj/Release -data ~/workspace/
觀察:
雖然Java掛起,我可以殺死它的進程,並獲得可執行文件 準備使用。當我從Jenkins觸發構建並殺死Java進程時,Jenkins繼續正常運行 更多腳本。
在構建服務器,而Java是janging,如果我跑:
jstack【JAVA PID]
然後我得到如下:
Attaching to process ID 25262, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.111-b01
Deadlock Detection:
java.lang.RuntimeException: Unable to deduce type of thread from address 0x00007fc5c8032800 (expected type JavaThread, CompilerThread, ServiceThread, JvmtiAgentThread, or SurrogateLockerThread)
結論:它看起來好像是Java是dea Eclipse在無頭模式下運行時會崩潰。它不會一直髮生,但我猜是99%。此外,它不會永久懸掛,它會在一兩個小時後回來,這對任何構建服務器都是不利的。
那麼,有沒有人有這樣的問題?
很奇怪,它掛着,jstack什麼也沒有顯示。有一種情況我可以看到,如果jstack正在以不同於java進程的用戶身份運行,那麼得到的錯誤消息是:https://bugzilla.redhat.com/show_bug.cgi?id=1095504 –
其他要嘗試的東西。 1)'--launcher.suppressErrors',以便eclipse不會嘗試在錯誤出口創建UI 2)添加'-no-indexer',因爲有時索引器會死鎖(需要Mars?或更新版本)。 –
@JonahGraham,你建議的'-no-indexer'選項到目前爲止(在火星上)工作得非常好,可以節省生命。我已經嘗試過launcher.suppressErrors並且沒有冒煙,但是索引器的東西很搖滾。請繼續回答這個帖子,以便我可以標記爲已解決。非常感謝。 –