利用 Debian 上的 Tomcat 日志优化内存
一 从日志定位内存压力信号
tail -f catalina.out | egrep -i "error|exception|outofmemory|gc|metaspace|permgen"grep -o 'OutOfMemoryError' catalina.out | sort | uniq -cgrep -i 'GC' catalina.out | wc -l(配合时间窗口观察趋势)二 通过日志配置降低内存与 GC 压力
三 结合日志驱动的 JVM 内存与 GC 调优
四 落地配置与验证步骤
handlers = 1catalina.org.apache.juli.AsyncFileHandler, \
2localhost.org.apache.juli.AsyncFileHandler, \
3manager.org.apache.juli.AsyncFileHandler, \
4host-manager.org.apache.juli.AsyncFileHandler, \
java.util.logging.ConsoleHandler
.level = INFO
org.apache.catalina.level = WARNING
org.apache.catalina.startup.level = WARNING
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = /var/log/tomcat
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 7
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = /var/log/tomcat
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 7
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.level = WARNING
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
/var/log/tomcat/*.log {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
JAVA_OPTS="$JAVA_OPTS -server \
-Xms2g -Xmx2g \
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m \
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/tomcat \
-Dfile.encoding=UTF-8"
tail -f 观察日志量与 GC 线索是否下降;通过 jstat -gc