web-dev-qa-db-ja.com

Tomcatのシャットダウンはプロセスを強制終了しません

Tomcatインスタンスに問題があります。 Linux用のApache-Tomcat-6.0.20を使用しています。私のOSはCENTOSです。

コマンドを実行すると

# bin/shutdown.sh

Tomcatを実行しているプロセスは閉じません。

どんな体でも私にいくつかのアイデアを教えてもらえますか?プロセスで何が起こっているのか。

2
vijay.shad

この問題はTomcatで数回見ました。役立つかもしれないいくつかのこと:

  1. プロセスが実際にシャットダウンしていないことを確認するために、しばらく時間を取ってください。 Tomcatシャットダウンスクリプトはクリーンシャットダウンを実行しようとします。シャットダウンスクリプトを呼び出したときにTomcatサーバーで多数のスレッドが開いている場合は、しばらく時間がかかることがあります。 5〜10分以上かかる場合は、他の問題が発生している可能性があります。
  2. ログファイル(通常はメインのTomcatディレクトリの下にあるlogs/catalina.out)を調べます。10回のうち9回は、少なくとも根本的な問題へのポインタを取得します。さらにヘルプが必要な場合は、ここに進んでエラーメッセージを投稿してください。
4
gareth_bowles

プロファイリングがインストールされていますか? Tomcatには、インストールされていると正しくシャットダウンしないというプロファイリングに関する既知の問題があります。 shutdown.shスクリプトには回避策のmodがありますが、私はまだそれを自分で探しています。これはTomcat7にあり、Tomcat6にもあるかどうかはわかりません。

0
user447607

Tomcatをシャットダウンする最良の方法は、シャットダウンスクリプトを使用することです。しかし、多くの人が問題に直面し、プロセスを手動で強制終了することになります。

シャットダウンスクリプトは、シャットダウンプロセス中にアクセスされるスクリプトが次のいずれかである場合にのみ正しく機能します。

  1. ユーザーが所有します。
  2. ユーザーのPRIMARYグループが所有

ユーザーがセカンダリグループに属している場合、これは機能しません。

プロセスを強制終了することを選択する必要がある場合は、以下のスクリプトを使用して、単一のコマンドとして作成できます(プロセスを見つけて強制終了します)。スクリプト内に配置して、実行中のTomcatを強制終了するときはいつでも実行してください。

#Finds the Tomcat process id
ps aux | grep Tomcat | grep JavaVirtualMachines | awk -F  " " '{print $2}' > tomcatProcessID

#Kills the process id returned from above mentioned command.
kill -9 `cat tomcatProcessID` && tput setaf 3 && echo "Tomcat killed Successfully" ;rm -rf tomcatProcessID

#Not a mandatory command.
#Used to show all the remaining processes with 'Tomcat' keyword in it.
#To inform on the console that the Tomcat (running ess or indexer) is killed.
ps aux | grep Tomcat | grep -v grep | grep -v killtomcat

必要に応じて、最後にps aux | grep Tomcat | grep -v grep | grep -v killtomcatを追加して、強制終了が試行された後の残りのTomcatプロセスを表示できます。

お役に立てば幸いです。

0

システムのシャットダウンに失敗しますか? (例:ハング?)そうでない場合は、プロセスが確実にシャットダウンされますが、希望する方法ではありません。そして、スタートアップスクリプトはあなたが書いたものでしたか、それともパッケージに入っていましたか? /etc/init.dスクリプトで何らかの作業を行ったと想定するのは正しいですか?あなたは私たちにもう少し情報を与えたいと思うでしょう。

たぶん、chkconfigにプロセスを登録する必要があります。 Kscriptを/etc/rc#.d/に配置するだけでは不十分です。これは、chkconfigがKscriptを認識していない場合に呼び出されるとは思わないためです。

基本的に、スクリプトの上部に次の行が必要です。

#chkconfig:345 99 10 
#説明:これは私のスクリプトが行うことです。

最初の行には、これを開始する必要のあるランレベルと、優先度の高い起動レベルとシャットダウンレベルが示されています。 (/etc/rc3.d、/etc/rc4.d、/etc/rc5.dにS99スクリプトを作成し、残りすべてにK10スクリプトを作成します)

これに加えて、chkconfigは/ var/lock/subsys /をチェックして、サービスのロックファイルがあるかどうかを確認します。そのため、サービスの開始時にそのディレクトリ内のサービスと同じ名前のファイルをタッチし、終了時に削除します。

スクリプトに上記の項目があると仮定すると、chkconfigに登録する必要があります。スクリプトを追加するには、chkconfig --add <name>を実行します。スクリプトが/etc/init.d/に適切な名前で含まれていることを確認してください。

0