通过 Ubuntu 上的 Tomcat 日志定位并优化响应时间
一 建立可度量的日志基线
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${catalina.base}/logs"
prefix="access."
suffix=".log"
pattern="%h %l %u %t "%r" %s %b %D" />
说明:pattern 末尾的 %D 输出请求处理耗时(单位:毫秒)。-Xloggc:${catalina.base}/logs/gc.log
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=10M
二 用日志快速定位瓶颈
awk -F'"' '$NF ~ /^[0-9]+$/ && $NF > 1000 {print $0}' ${catalina.base}/logs/access.*.log | sort -kNF -nr | head
三 基于日志发现进行针对性优化
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" redirectPort="8443"
compression="on"
compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,application/json" />
JAVA_OPTS="$JAVA_OPTS -Xms2g -Xmx2g"
JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4"
四 持续监控与告警闭环
五 附录 Ubuntu 常用运维动作
/opt/tomcat/logs/catalina.out {
daily
rotate 30
missingok
compress
delaycompress
copytruncate
notifempty
dateext
}
/opt/tomcat/logs/access.*.log {
daily
rotate 30
missingok
compress
delaycompress
copytruncate
notifempty
dateext
}
/opt/tomcat/logs/gc.log {
daily
rotate 7
missingok
compress
delaycompress
copytruncate
notifempty
dateext
}
* soft nofile 40960
* hard nofile 40960
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
使配置生效:sysctl -p。以上动作可减少 “Too many open files”、提升连接处理能力,间接缩短响应时间。