如何避免关机时的完整线程转储?
How to avoid full thread dump on shutdown?
我是 运行 Tomcat 8.5,每次我通过控制脚本关闭 tomcat 时,它都会转储它的线程:
Full thread dump OpenJDK 64-Bit Server VM (25.232-b09 mixed mode):
"Framework stop" #101 daemon prio=5 os_prio=0 tid=0x00007fb540004800 nid=0x1a05 runnable [0x00007fa8a10ed000]
java.lang.Thread.State: RUNNABLE
...
JNI global references: 1348
Heap
garbage-first heap total 13041664K, used 3910741K [0x00007fb5e7800000, 0x00007fb5e80031c0, 0x00007fbe2c000000)
region size 8192K, 1 young (8192K), 0 survivors (0K)
Metaspace used 94108K, capacity 99079K, committed 99244K, reserved 100352K
之后大约需要 2 分钟才能到达下一条日志消息:
INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
所有线程的转储似乎需要相当长的时间,我在正常关机期间确实不需要。
我们在 EC2 Linux 实例上使用 OpenJDK 11。
控制脚本正在使用 catalina.sh
,它本身似乎使用关闭端口。
catalina.sh stop
是脚本发出的命令
当我在 Tomcat 实例上执行 kill -3
时会发生相同的行为。
kill -15
不显示此行为。
是否可以在 Tomcat 配置或 JVM 参数中停用此行为?
显然,线程转储不是原因,而是应用程序未及时关闭的结果。
catalina.sh
故意makes a thread dump 停止操作时间长。这正是为了调查关机问题。我建议查看线程转储而不是试图避免它。
我是 运行 Tomcat 8.5,每次我通过控制脚本关闭 tomcat 时,它都会转储它的线程:
Full thread dump OpenJDK 64-Bit Server VM (25.232-b09 mixed mode):
"Framework stop" #101 daemon prio=5 os_prio=0 tid=0x00007fb540004800 nid=0x1a05 runnable [0x00007fa8a10ed000]
java.lang.Thread.State: RUNNABLE
...
JNI global references: 1348
Heap
garbage-first heap total 13041664K, used 3910741K [0x00007fb5e7800000, 0x00007fb5e80031c0, 0x00007fbe2c000000)
region size 8192K, 1 young (8192K), 0 survivors (0K)
Metaspace used 94108K, capacity 99079K, committed 99244K, reserved 100352K
之后大约需要 2 分钟才能到达下一条日志消息:
INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.stop Stopping ProtocolHandler ["ajp-nio-8009"]
INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["http-nio-8080"]
INFO [main] org.apache.coyote.AbstractProtocol.destroy Destroying ProtocolHandler ["ajp-nio-8009"]
所有线程的转储似乎需要相当长的时间,我在正常关机期间确实不需要。
我们在 EC2 Linux 实例上使用 OpenJDK 11。
控制脚本正在使用 catalina.sh
,它本身似乎使用关闭端口。
catalina.sh stop
是脚本发出的命令
当我在 Tomcat 实例上执行 kill -3
时会发生相同的行为。
kill -15
不显示此行为。
是否可以在 Tomcat 配置或 JVM 参数中停用此行为?
显然,线程转储不是原因,而是应用程序未及时关闭的结果。
catalina.sh
故意makes a thread dump 停止操作时间长。这正是为了调查关机问题。我建议查看线程转储而不是试图避免它。