Jolokia 阻止 Tomcat 关机
Jolokia prevents Tomcat Shutdown
我将 jolokia 与我的 tomcat 集成(tomcat 7.0.53,jdk 1.8.0_45)
我在 tomcat-directory/bin/setenv.sh:
中配置了 java 代理
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/jolokia-jvm-1.2.0-agent.jar=config=/path/to/config.properties"
现在,我无法关闭 tomcat。 ps 告诉我,java 进程已经是 运行。
这是关机的输出:
-bash-4.1$ ./shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat/7.0.53/instance/ingest-news
Using CATALINA_HOME: /usr/local/tomcat/7.0.53/instance/ingest-news
Using CATALINA_TMPDIR: /usr/local/tomcat/7.0.53/instance/ingest-news/temp
Using JRE_HOME: /usr/local/java64/jdk1.8.0_45
Using CLASSPATH: /usr/local/tomcat/7.0.53/instance/ingest-news/bin/bootstrap.jar:/usr/local/tomcat/7.0.53/instance/ingest-news/bin/tomcat-juli.jar
Using CATALINA_PID: /var/run/tomcat/ingestnews.pid
Tomcat did not stop in time. PID file was not removed. To aid diagnostics a thread dump has been written to standard out.
这是线程转储:
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]
2015-07-10 11:46:04
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):
"DestroyJavaVM" #31 prio=5 os_prio=0 tid=0x00007f69f05c4800 nid=0x370a waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Keep-Alive-Timer" #22 daemon prio=8 os_prio=0 tid=0x00007f6974142800 nid=0x372f waiting on condition [0x00007f697eefd000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:172)
at java.lang.Thread.run(Thread.java:745)
"Thread-7" #20 daemon prio=5 os_prio=0 tid=0x00007f6980435000 nid=0x372b runnable [0x00007f69b4dc6000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.epollWait(Native Method)
at sun.nio.ch.EPollPort$EventHandlerTask.poll(EPollPort.java:194)
at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:268)
at java.lang.Thread.run(Thread.java:745)
"PoolCleaner[683287027:1436521533079]" #19 daemon prio=5 os_prio=0 tid=0x00007f698039d800 nid=0x372a in Object.wait() [0x00007f69b52c7000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000c51153f0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"GC Daemon" #16 daemon prio=2 os_prio=0 tid=0x00007f69f04ec000 nid=0x371e in Object.wait() [0x00007f69b5d6b000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000c473d598> (a sun.misc.GC$LatencyLock)
at sun.misc.GC$Daemon.run(GC.java:117)
- locked <0x00000000c473d598> (a sun.misc.GC$LatencyLock)
"Service Thread" #15 daemon prio=9 os_prio=0 tid=0x00007f69f02dd000 nid=0x371b runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread2" #14 daemon prio=9 os_prio=0 tid=0x00007f69f02d1800 nid=0x371a waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" #13 daemon prio=9 os_prio=0 tid=0x00007f69f02c7800 nid=0x3719 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #12 daemon prio=9 os_prio=0 tid=0x00007f69f02b0000 nid=0x3718 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Jolokia Agent Cleanup Thread" #11 daemon prio=5 os_prio=0 tid=0x00007f69f02bc800 nid=0x3717 in Object.wait() [0x00007f69d85c3000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1245)
- locked <0x00000000c47b9298> (a org.jolokia.discovery.MulticastSocketListenerThread)
at java.lang.Thread.join(Thread.java:1319)
at org.jolokia.jvmagent.CleanupThread.joinThreads(CleanupThread.java:110)
at org.jolokia.jvmagent.CleanupThread.run(CleanupThread.java:60)
"Thread-5" #10 prio=5 os_prio=0 tid=0x00007f69ac001000 nid=0x3716 runnable [0x00007f69d84c2000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000c47b9a40> (a sun.nio.ch.Util)
- locked <0x00000000c47b9a30> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000c47b9898> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:352)
at java.lang.Thread.run(Thread.java:745)
"Thread-3" #8 prio=5 os_prio=0 tid=0x00007f69f02bb000 nid=0x3714 runnable [0x00007f69d86c4000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
- locked <0x00000000c47b9638> (a java.net.PlainDatagramSocketImpl)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:144)
- locked <0x00000000c47b9638> (a java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:812)
- locked <0x00000000c43e3998> (a java.net.DatagramPacket)
- locked <0x00000000c47b95e8> (a java.net.MulticastSocket)
at org.jolokia.discovery.MulticastSocketListenerThread.receiveMessage(MulticastSocketListenerThread.java:113)
at org.jolokia.discovery.MulticastSocketListenerThread.run(MulticastSocketListenerThread.java:70)
"server-timer" #7 daemon prio=5 os_prio=0 tid=0x00007f69f026b000 nid=0x3713 in Object.wait() [0x00007f69d87c5000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000c460e9c0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007f69f017e000 nid=0x3712 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f69f0146000 nid=0x3711 in Object.wait() [0x00007f69d91fe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000000c43e39c0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f69f0144000 nid=0x3710 in Object.wait() [0x00007f69d92ff000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)
- locked <0x00000000c43e3a00> (a java.lang.ref.Reference$Lock)
"VM Thread" os_prio=0 tid=0x00007f69f013f000 nid=0x370f runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f69f001f000 nid=0x370b runnable
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f69f0021000 nid=0x370c runnable
"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f69f0022800 nid=0x370d runnable
"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f69f0024800 nid=0x370e runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f69f02df800 nid=0x371c waiting on condition
JNI global references: 269
Heap
PSYoungGen total 284672K, used 39633K [0x00000000ec100000, 0x0000000100000000, 0x0000000100000000)
eden space 250880K, 3% used [0x00000000ec100000,0x00000000ec960a58,0x00000000fb600000)
from space 33792K, 91% used [0x00000000fdf00000,0x00000000ffd53bd0,0x0000000100000000)
to space 37888K, 0% used [0x00000000fb600000,0x00000000fb600000,0x00000000fdb00000)
ParOldGen total 89600K, used 41901K [0x00000000c4200000, 0x00000000c9980000, 0x00000000ec100000)
object space 89600K, 46% used [0x00000000c4200000,0x00000000c6aeb770,0x00000000c9980000)
Metaspace used 51923K, capacity 52642K, committed 52864K, reserved 1095680K
class space used 6257K, capacity 6462K, committed 6528K, reserved 1048576K
当我现在从 catalina_opts 中删除 java 代理时,一切又恢复正常了。我在 Whosebug 上搜索过,但没有找到任何解决方案。
这是 1.2.3 中修复的已知问题 --> https://github.com/rhuss/jolokia/issues/155
建议至少升级到1.2.3,当然最好升级到最新最好的1.3.1 ;-)
我将 jolokia 与我的 tomcat 集成(tomcat 7.0.53,jdk 1.8.0_45)
我在 tomcat-directory/bin/setenv.sh:
中配置了 java 代理CATALINA_OPTS="$CATALINA_OPTS -javaagent:/path/to/jolokia-jvm-1.2.0-agent.jar=config=/path/to/config.properties"
现在,我无法关闭 tomcat。 ps 告诉我,java 进程已经是 运行。 这是关机的输出:
-bash-4.1$ ./shutdown.sh
Using CATALINA_BASE: /usr/local/tomcat/7.0.53/instance/ingest-news
Using CATALINA_HOME: /usr/local/tomcat/7.0.53/instance/ingest-news
Using CATALINA_TMPDIR: /usr/local/tomcat/7.0.53/instance/ingest-news/temp
Using JRE_HOME: /usr/local/java64/jdk1.8.0_45
Using CLASSPATH: /usr/local/tomcat/7.0.53/instance/ingest-news/bin/bootstrap.jar:/usr/local/tomcat/7.0.53/instance/ingest-news/bin/tomcat-juli.jar
Using CATALINA_PID: /var/run/tomcat/ingestnews.pid
Tomcat did not stop in time. PID file was not removed. To aid diagnostics a thread dump has been written to standard out.
这是线程转储:
INFO: Destroying ProtocolHandler ["ajp-bio-8009"]
2015-07-10 11:46:04
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.45-b02 mixed mode):
"DestroyJavaVM" #31 prio=5 os_prio=0 tid=0x00007f69f05c4800 nid=0x370a waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Keep-Alive-Timer" #22 daemon prio=8 os_prio=0 tid=0x00007f6974142800 nid=0x372f waiting on condition [0x00007f697eefd000]
java.lang.Thread.State: TIMED_WAITING (sleeping)
at java.lang.Thread.sleep(Native Method)
at sun.net.www.http.KeepAliveCache.run(KeepAliveCache.java:172)
at java.lang.Thread.run(Thread.java:745)
"Thread-7" #20 daemon prio=5 os_prio=0 tid=0x00007f6980435000 nid=0x372b runnable [0x00007f69b4dc6000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPoll.epollWait(Native Method)
at sun.nio.ch.EPollPort$EventHandlerTask.poll(EPollPort.java:194)
at sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:268)
at java.lang.Thread.run(Thread.java:745)
"PoolCleaner[683287027:1436521533079]" #19 daemon prio=5 os_prio=0 tid=0x00007f698039d800 nid=0x372a in Object.wait() [0x00007f69b52c7000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000c51153f0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"GC Daemon" #16 daemon prio=2 os_prio=0 tid=0x00007f69f04ec000 nid=0x371e in Object.wait() [0x00007f69b5d6b000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000c473d598> (a sun.misc.GC$LatencyLock)
at sun.misc.GC$Daemon.run(GC.java:117)
- locked <0x00000000c473d598> (a sun.misc.GC$LatencyLock)
"Service Thread" #15 daemon prio=9 os_prio=0 tid=0x00007f69f02dd000 nid=0x371b runnable [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C1 CompilerThread2" #14 daemon prio=9 os_prio=0 tid=0x00007f69f02d1800 nid=0x371a waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread1" #13 daemon prio=9 os_prio=0 tid=0x00007f69f02c7800 nid=0x3719 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"C2 CompilerThread0" #12 daemon prio=9 os_prio=0 tid=0x00007f69f02b0000 nid=0x3718 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Jolokia Agent Cleanup Thread" #11 daemon prio=5 os_prio=0 tid=0x00007f69f02bc800 nid=0x3717 in Object.wait() [0x00007f69d85c3000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Thread.join(Thread.java:1245)
- locked <0x00000000c47b9298> (a org.jolokia.discovery.MulticastSocketListenerThread)
at java.lang.Thread.join(Thread.java:1319)
at org.jolokia.jvmagent.CleanupThread.joinThreads(CleanupThread.java:110)
at org.jolokia.jvmagent.CleanupThread.run(CleanupThread.java:60)
"Thread-5" #10 prio=5 os_prio=0 tid=0x00007f69ac001000 nid=0x3716 runnable [0x00007f69d84c2000]
java.lang.Thread.State: RUNNABLE
at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:79)
at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
- locked <0x00000000c47b9a40> (a sun.nio.ch.Util)
- locked <0x00000000c47b9a30> (a java.util.Collections$UnmodifiableSet)
- locked <0x00000000c47b9898> (a sun.nio.ch.EPollSelectorImpl)
at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
at sun.net.httpserver.ServerImpl$Dispatcher.run(ServerImpl.java:352)
at java.lang.Thread.run(Thread.java:745)
"Thread-3" #8 prio=5 os_prio=0 tid=0x00007f69f02bb000 nid=0x3714 runnable [0x00007f69d86c4000]
java.lang.Thread.State: RUNNABLE
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
- locked <0x00000000c47b9638> (a java.net.PlainDatagramSocketImpl)
at java.net.AbstractPlainDatagramSocketImpl.receive(AbstractPlainDatagramSocketImpl.java:144)
- locked <0x00000000c47b9638> (a java.net.PlainDatagramSocketImpl)
at java.net.DatagramSocket.receive(DatagramSocket.java:812)
- locked <0x00000000c43e3998> (a java.net.DatagramPacket)
- locked <0x00000000c47b95e8> (a java.net.MulticastSocket)
at org.jolokia.discovery.MulticastSocketListenerThread.receiveMessage(MulticastSocketListenerThread.java:113)
at org.jolokia.discovery.MulticastSocketListenerThread.run(MulticastSocketListenerThread.java:70)
"server-timer" #7 daemon prio=5 os_prio=0 tid=0x00007f69f026b000 nid=0x3713 in Object.wait() [0x00007f69d87c5000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.util.TimerThread.mainLoop(Timer.java:552)
- locked <0x00000000c460e9c0> (a java.util.TaskQueue)
at java.util.TimerThread.run(Timer.java:505)
"Signal Dispatcher" #4 daemon prio=9 os_prio=0 tid=0x00007f69f017e000 nid=0x3712 waiting on condition [0x0000000000000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" #3 daemon prio=8 os_prio=0 tid=0x00007f69f0146000 nid=0x3711 in Object.wait() [0x00007f69d91fe000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
- locked <0x00000000c43e39c0> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)
"Reference Handler" #2 daemon prio=10 os_prio=0 tid=0x00007f69f0144000 nid=0x3710 in Object.wait() [0x00007f69d92ff000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Object.java:502)
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:157)
- locked <0x00000000c43e3a00> (a java.lang.ref.Reference$Lock)
"VM Thread" os_prio=0 tid=0x00007f69f013f000 nid=0x370f runnable
"GC task thread#0 (ParallelGC)" os_prio=0 tid=0x00007f69f001f000 nid=0x370b runnable
"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x00007f69f0021000 nid=0x370c runnable
"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x00007f69f0022800 nid=0x370d runnable
"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x00007f69f0024800 nid=0x370e runnable
"VM Periodic Task Thread" os_prio=0 tid=0x00007f69f02df800 nid=0x371c waiting on condition
JNI global references: 269
Heap
PSYoungGen total 284672K, used 39633K [0x00000000ec100000, 0x0000000100000000, 0x0000000100000000)
eden space 250880K, 3% used [0x00000000ec100000,0x00000000ec960a58,0x00000000fb600000)
from space 33792K, 91% used [0x00000000fdf00000,0x00000000ffd53bd0,0x0000000100000000)
to space 37888K, 0% used [0x00000000fb600000,0x00000000fb600000,0x00000000fdb00000)
ParOldGen total 89600K, used 41901K [0x00000000c4200000, 0x00000000c9980000, 0x00000000ec100000)
object space 89600K, 46% used [0x00000000c4200000,0x00000000c6aeb770,0x00000000c9980000)
Metaspace used 51923K, capacity 52642K, committed 52864K, reserved 1095680K
class space used 6257K, capacity 6462K, committed 6528K, reserved 1048576K
当我现在从 catalina_opts 中删除 java 代理时,一切又恢复正常了。我在 Whosebug 上搜索过,但没有找到任何解决方案。
这是 1.2.3 中修复的已知问题 --> https://github.com/rhuss/jolokia/issues/155
建议至少升级到1.2.3,当然最好升级到最新最好的1.3.1 ;-)