因此,我正在使用嵌入式码头和 maven app-assembler 插件运行 Web 服务器。当我直接调用 app-assembler 应用程序(以 root 身份运行)时,服务器启动正常。即使在 nohup 下运行,Web 服务器也可以完全正常启动。
当我将 app-assembler 脚本注册为 init.d 脚本(Runlevels 235 / Start pri 98 / Stop pri 20 )并使用 service 命令运行 init.d 脚本时,Web 服务器在启动期间挂起。
应用程序挂起的地方是在 Struts 2 约定插件中的类路径扫描期间。
如果我使用 'kill -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(Oracle) 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)