如何避免关机时的完整线程转储?

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 停止操作时间长。这正是为了调查关机问题。我建议查看线程转储而不是试图避免它。