2016-08-18 19 views
0

のうち、私はこのarguement入れて再起動Tomcat用のスクリプト: XX:OnOutOfMemoryError='myscript.sh'OOMが を発生したとき、私は自動再起動Tomcatのスクリプトに取り組んでいるメモリ

をしかし、スクリプトはTomcatを再起動したとき、それはstocketがまだ開いているので失敗します私はtomcatのPIDを殺したのですが

私はmyscript.shからスクリプトを起動しようとしましたが、この新しいスクリプト(OOM.sh)はまだ変更されていないように在庫によってオープンされています。

どうすればいいですか?

答えて

0

おそらく、あなたのスクリプトではなく、すぐに再起動Tomcatをしようとするビットを待つ必要がある

感謝。代わりに、このようなあなたのスクリプトを書くの

#!/bin/sh 
export CATALINA_HOME=... 
export CATALINA_BASE=... 
export CATALINA_PID_FILE=... 
export PID=$(cat $CATALINA_PID_FILE) 
while [ "1" == "$(kill -0 $PID)" ]; do 
    sleep 1 
done 
$CATALINA_HOME/bin/catalina.sh start 

Tomcatがシャットダウンされるまで、これがスリープ状態になります。

#!/bin/sh 
export CATALINA_HOME=... 
export CATALINA_BASE=... 
$CATALINA_HOME/bin/catalina.sh start 

ではなく、このようにそれを実行してください。 Tomcatがきれいにシャットダウンするためにある程度の時間を待ってから、プロセスをkill -9のタイムアウトに追加することができます。おそらく10秒のようなものです。

+0

お返事ありがとうございます。スクリプトを起動すると、問題は、まだここで、彼は同じファイルディスクリプタを持って、私はアドレスの輸送dt_socketというのリスニングにTomcat を起動したときstocketはまだ 開いている:5007 javaの7411ルート4UのIPv4 43872 0t0 TCP *:5007(LISTEN) OOM.sh 7447ルート4u IPv4 43872 0t0 TCP *:5007(LISTEN) – sytolaw

+0

このコメントは読めません。スクリプトにデバッグを追加して、何が起きているのかを確認してください。 –

関連する問題