用日志驱动定位与优化 Tomcat 响应时间
一 建立可度量的日志基线
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="access." suffix=".log"
pattern="%h %l %u %t "%r" %s %b %D" />
说明:pattern 末尾的 %D 输出请求处理时间(微秒),也可用 %T(秒)。配合 logging.properties 将级别调为 WARN/ERROR 减少同步日志开销,必要时采用异步日志(如将 ConsoleHandler 换为 org.apache.juli.AsyncFileHandler)。为长期可观测,建议接入 ELK/Graylog 做聚合、可视化与告警。二 从日志中发现瓶颈
三 日志驱动的优化闭环
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="300" minSpareThreads="20"
acceptCount="100" connectionTimeout="20000"
redirectPort="8443" />
同时用 JMX/VisualVM 观察线程池使用率,逐步调参并压测验证。-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=100
-Xlog:gc*:file=/var/log/tomcat/gc.log:time
目标是降低停顿并减少 Full GC 次数,再对照访问日志的 %D 分布验证改善幅度。<Connector port="8080" protocol="HTTP/1.1"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,application/json" />
同时用 iotop/iftop 与 ping/mtr 排查 I/O 与网络延迟。四 关键日志与配置示例
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" prefix="access." suffix=".log"
pattern="%h %l %u %t "%r" %s %b %D" />
<Connector port="8080" protocol="HTTP/1.1"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/plain,application/json" />
-Xms2048m -Xmx2048m -XX:+UseG1GC -XX:MaxGCPauseMillis=100
-Xlog:gc*:file=/var/log/tomcat/gc.log:time
<Connector port="8080" protocol="HTTP/1.1"
maxThreads="300" minSpareThreads="20"
acceptCount="100" connectionTimeout="20000"
redirectPort="8443" />
五 验证与持续观测