2012-04-08 92 views
1

因此,我運行一個使用嵌入式jetty和maven app-assembler插件的web服務器。當我直接調用app-assembler應用程序(以root身份運行)時,服務器啓動正常。即使在nohup下運行,Web服務器也完全正常啓動。Java服務器掛在CentOS啓動5

當我將app-assembler腳本註冊爲init.d腳本(Runlevels 235/Start pri 98/Stop pri 20)並使用service命令運行init.d腳本時,Web服務器在啓動過程中會掛起。

應用程序掛起的地方是在Struts 2約定插件中的類路徑掃描期間。

如果我殺了使用「殺-QUIT」 web服務器,代碼看起來是停留在Unix文件系統:

"main" prio=10 tid=0x09add800 nid=0xb33 runnable [0xb7361000] 
    java.lang.Thread.State: RUNNABLE 
     at java.io.UnixFileSystem.getBooleanAttributes0(Native Method) 
     at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:228) 
     at java.io.File.isDirectory(File.java:754) 

我做了一些研究,似乎有可能是性能問題與NFS,Java和文件系統訪問。

我遇到的問題是我們沒有在我們的服務器上運行NFS,並且據我所知我們正在以相同的方式,由同一用戶運行該應用程序。

即使模仿服務命令的工作方式(在腳本啓動之前運行'env -i'),直接運行腳本也不會掛起。

尋找任何建議或指針來解決這個問題,或任何方式來解決它。

更新(4/8/12)

我使用Sun(甲骨文)JDK 1.6.0_31

/usr/java/latest/bin/java -version 
java version "1.6.0_31" 
Java(TM) SE Runtime Environment (build 1.6.0_31-b04) 
Java HotSpot(TM) Server VM (build 20.6-b01, mixed mode) 
+0

你在使用OpenJDK嗎? – Quaternion 2012-04-08 23:55:27

+0

我正在使用Sun JDK。更新的問題包括這個信息 – ArcSine 2012-04-09 00:05:49

+0

這將是很好的嘗試OpenJDK。有一個關於它成爲標準的Oracle/Sun視頻。我所知道的僅僅是我所使用的並且沒有任何問題(Ubuntu 11.10/Netbeans/Web應用程序開發/ Glassfish) – Quaternion 2012-04-09 00:32:42

回答

0

所以,我想通了這個問題。看起來像線程被困在文件系統操作中的問題,是由於遞歸符號鏈接,Java將無限期地遵循。任何來自Unix系統根目錄的掃描都應該導致相同的問題(CPU使用率100%,文件掃描掛起)。

最終的問題是服務腳本從根目錄運行,從當前工作目錄直接調用腳本。我修改了我的啓動腳本,在運行之前移動應用程序組裝腳本的根目錄,一切正常。