2016-10-18 10 views
0

私はTomcatに奇妙な問題があります。私はTomcatを正常に起動することができ、問題があれば正常に動作しています。しかし、シャットダウン(shutdown.shスクリプトを呼び出す)を実行すると、接続が拒否されたことが示されます。私はこれを試しましたSpringブートアプリケーションがehcacheとともにデプロイされたときにTomcatがシャットダウンしない

Tomcat doesn't stop. How can I debug this?しかし、私の問題は解決しません。私は私の春のブートアプリケーションを削除しようとしており、それは問題なしで正常に動作しています。私はTomcatを開始して停止することができます。それ以降の分析の後、私はそれがスプリングブートアプリケーションで設定されたehacheのためであることがわかりました。 ehcacheのシャットダウンリスナーは、春の起動時にそれを行うための最良の方法は、設定する必要があります。

私もこのオプションを試しました。

How to shutdown a Spring Boot Application in a correct way?

./shutdown.sh 
Using CATALINA_BASE: /app/tomcat/myapp 
Using CATALINA_HOME: /app/tomcat/myapp 
Using CATALINA_TMPDIR: /app/tomcat/myapp/temp 
Using JRE_HOME:  /usr/java/jdk1.8.0_71 
Using CLASSPATH: 

    /app/tomcat/myapp/bin/bootstrap.jar:/app/tomcat/myapp/bin/tomcat-juli.jar 
    Oct 18, 2016 5:36:33 AM org.apache.catalina.startup.Catalina stopServer 
    SEVERE: Could not contact localhost:8005. Tomcat may not be running. 
Oct 18, 2016 5:43:31 AM org.apache.catalina.startup.Catalina stopServer 
SEVERE: Catalina.stop: 
java.net.ConnectException: Connection refused 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
     at java.net.Socket.connect(Socket.java:589) 
     at java.net.Socket.connect(Socket.java:538) 
     at java.net.Socket.<init>(Socket.java:434) 
     at java.net.Socket.<init>(Socket.java:211) 
     at org.apache.catalina.startup.Catalina.stopServer(Catalina.java:476) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:497) 
     at org.apache.catalina.startup.Bootstrap.stopServer(Bootstrap.java:408) 
     at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:497) 

#-> netstat -anpl|grep -i 8005 
tcp6  0  0 127.0.0.1:8005   :::*     LISTEN  21668/java 

なぜこれが起こっているのかわかりません。なぜこのようなことが起こるのか?なぜシャットダウンポートを聞くことができないのですか?なぜシャットダウンポートが127.0.0.1になったのですか?他のプロセスはそれを持っていないのですか?

は私がポートにTelnetを実行しようとしました、それは

telnet 127.0.0.1 8005 
Trying 127.0.0.1... 
Connected to 127.0.0.1. 
Escape character is '^]'. 

これが問題になる理由を任意のアイデアを接続しています。

--------更新

私たちは、スタンドアロンとしてehcacheを持つスプリングブートアプリを展開するときにこれが起こっている考え出しました。 ehcacheのシャットダウンフックが呼び出される必要があります....春のブートでそれを行うための最善の方法は何ですか?

+0

サーバーに問題が発生する可能性のあるものはありますか? –

+0

はい、それは春のブートで問題があるように見えます。 – Harry

+1

tomcat embedded!= tomcat。ちょうどtomcatを停止するapplciationをシャットダウンします。 –

答えて

0

デフォルトでは、Springブートアプリケーションはスタンドアロンで実行するように設定されています。

Application Server(Tomcatなど)の内部で実行する場合は、最初に行う必要があるのは、競合や競合を防ぐために、組み込みコンテナの依存関係を削除することです。あなたはそれを行う方法について素敵なガイドを見つけることができますhere

これを実行しても問題が解決しない場合、デーモンではないスレッドがApplication Server内で実行されたままになっていることを意味します(終了できない)。 jstackを使用してこれらを識別し、ServletContextFinalizerと書いて、これらのスレッドを正常に停止させることができます。contextDestroyed

+0

私は依存関係を再移動しました。 jstackはエラーを表示しません。 – Harry

+0

死んでいないpidに対してjstackを実行すると、何が表示されますか? – jamesfmackenzie

関連する問題