温馨提示×

centos tomcat日志中如何查看响应时间

小樊
36
2025-11-14 01:56:44
栏目: 智能运维

在 CentOS 的 Tomcat 中查看请求响应时间

一 准备与定位日志文件

  • 日志默认位于 $CATALINA_HOME/logs,常见文件:
    • catalina.out:启动与应用的标准输出/错误
    • localhost_access_log.yyyy-MM-dd.txt访问日志(是否记录响应时间取决于配置)。
  • 常用查看方式:
    • 实时查看:tail -f $CATALINA_HOME/logs/catalina.out
    • 实时查看访问日志:tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt
    • 如以 systemd 管理:journalctl -u tomcat -f
  • 若访问日志尚未输出响应时间,需按下方步骤开启对应字段。

二 配置访问日志输出响应时间

  • 编辑 $CATALINA_HOME/conf/server.xml,在 内添加或修改 AccessLogValve,通过 pattern 输出耗时字段:
    • 记录耗时(秒,浮点):%T
    • 记录耗时(毫秒,整数):%D
    • 示例(combined 格式并追加耗时毫秒):
      <Valve className="org.apache.catalina.valves.AccessLogValve"
             directory="logs"
             prefix="localhost_access_log."
             suffix=".txt"
             pattern="%h %l %u %t "%r" %s %b %{Referer}i %{User-Agent}i %D"
             resolveHosts="false"/>
      
    • 说明:
      • %T 单位为%D 单位为毫秒;二者可同时输出。
      • 修改后需重启 Tomcat:sudo systemctl restart tomcat
      • 常见 pattern 占位符含义可参考官方文档与常用配置说明。

三 常用命令快速查看与分析

  • 实时查看带耗时的访问日志(毫秒):
    • tail -f $CATALINA_HOME/logs/localhost_access_log.*.txt | awk '{print $NF}'
  • Top N 最慢请求(按毫秒耗时,取前10):
    • awk '{print $NF, $0}' $CATALINA_HOME/logs/localhost_access_log.*.txt | sort -nr | head -10
  • 统计平均耗时(秒级,保留两位小数):
    • awk '{sum+=$NF; n++;} END {printf "avg=%.2f ms\n", sum/n}' $CATALINA_HOME/logs/localhost_access_log.*.txt
  • 按 URL 聚合统计平均耗时(需按实际日志列号调整 $NF 与 $7 等字段):
    • awk '{url=$7; sum[url]+=$NF; cnt[url]++} END {for(u in sum) printf "%.2f ms\t%s\n", sum[u]/cnt[u], u}' $CATALINA_HOME/logs/localhost_access_log.*.txt | sort -nr | head
  • 说明:上述示例默认耗时在最后一列(即 %D);如使用 %T(秒),可将阈值与统计单位相应调整为秒。

四 常见问题与排查

  • 访问日志没有耗时字段:确认 AccessLogValve 已配置并包含 %T%D,修改后重启 Tomcat 生效。
  • 日志过大与轮转:
    • 使用 logrotate 管理 catalina.out,如保留最近 7 天并压缩:
      /usr/local/tomcat/logs/catalina.out {
        daily
        rotate 7
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
      }
      
    • 访问日志可按时间切割(如按小时):在 AccessLogValve 上设置 fileDateFormat="yyyy-MM-dd.HH"
  • 通过 systemd 运行的 Tomcat,也可用 journalctl -u tomcat -f 查看服务日志,但响应时间通常仍以访问日志为准。

0