そのため、組み込みの jetty と maven アプリ アセンブラー プラグインを使用して Web サーバーを実行しています。アプリ アセンブラー アプリを (ルートとして実行して) 直接呼び出すと、サーバーは正常に起動します。Nohup で実行しても、Web サーバーは完全に正常に起動します。
アプリ アセンブラー スクリプトを 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 を実行していないことと、私が知る限り、同じユーザーが同じ方法でアプリを実行していることです。
service コマンドの動作を模倣する (スクリプトの開始前に「env -i」を実行する) 場合でも、スクリプトを直接実行してもハングしません。
この問題を解決するためのアドバイスや指針、またはそれを回避する方法を探しています。
更新 (2012 年 4 月 8 日)
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)