在部署在tomcat上的web应用程序中,catalina.out文件不断增长(它在GB中增长)。
因此,为了禁用它,我找到了设置CATALINA_OUT=/dev/null的解决方案。这如预期的那样工作,但我们也使用kill -3 <PID>命令来捕获线程转储,随时需要。
这个线程转储被写入catalina.out文件,但是现在我已经禁用了catalina.out,所以我看不到线程转储。
如何获得线程转储?
因为它是一个生产系统,所以我们使用的是JRE而不是JDK,否则我们就会使用jmap/jcmd/j堆栈命令来捕获线程转储。
因此,我想,tomcat应该停止创建catalina.out文件,或者不要在其中编写log4j语句。如果它被禁用了,那么如何获得线程转储呢?
发布于 2022-10-18 09:09:15
最后,我找到了我正在寻找的解决方案。我在tomcat/bin/startup.sh文件中添加了下面的语句行
export CATALINA_OUT=/dev/null
export JAVA_OPTS="$JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=thread_dump.log"设置为/dev/null的CATALINA_OUT将停止在catalina.out日志中写入日志语句。
JAVA_OPTS -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=thread_dump.log配置用于编写使用kill –3 <PID>命令生成的线程转储语句。它还将打印正在使用的JVM相关配置。
我希望这能帮到别人。
https://stackoverflow.com/questions/74071639
复制相似问题