温馨提示×

centos java日志慢请求如何查

小樊
41
2026-09-12 00:36:17
栏目: 编程语言

在 CentOS 上排查 Java 应用日志中的慢请求(慢调用),通常可以从 日志分析、JVM 工具、系统层面、应用监控 四个方向入手。下面按实战方式给你一套清晰思路。


一、先确认“慢请求”定义

先明确:

  • 接口响应慢(HTTP)
  • 还是 某个方法执行慢
  • 还是 SQL 慢
  • 还是 GC 导致整体卡顿

不同场景排查方式不同。


二、从 Java 应用日志查慢请求(最常用)

1️⃣ 应用自身日志(Access / 业务日志)

如果是 Spring Boot / Tomcat:

Tomcat Access Log

cd /var/log/tomcat/
ls

示例:

192.168.1.10 - - [10/Oct/2024:10:20:01 +0800] "GET /api/user HTTP/1.1" 200 1234 1523

最后数字(毫秒)就是响应时间。

筛选慢请求:

awk '{if ($NF > 1000) print}' localhost_access_log.*.txt

2️⃣ Spring Boot 接口耗时日志

application.yml 开启:

logging:
  level:
    org.springframework.web.filter: DEBUG

或使用拦截器打印耗时:

long start = System.currentTimeMillis();
// 业务
log.info("request {} cost {} ms", uri, System.currentTimeMillis() - start);

三、使用 JVM 工具定位慢点(核心)

3️⃣ jstack(看线程卡在哪)

jps
jstack <pid> > jstack.log

查找:

  • BLOCKED
  • WAITING
  • 长时间 RUNNABLE 的线程

例如:

"http-nio-8080-exec-3" #23 prio=5 os_prio=0
   java.lang.Thread.State: RUNNABLE
   at com.xxx.Service.slowMethod

4️⃣ arthas(强烈推荐)

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

查看方法耗时

trace com.xxx.service.UserService getUser

监控慢调用

monitor com.xxx.service.UserService getUser -c 5

看最耗时的方法

profiler start
profiler stop --format html

四、数据库慢请求(非常常见)

5️⃣ MySQL 慢查询日志

vim /etc/my.cnf

开启:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

查看:

mysqldumpslow -s t /var/log/mysql/slow.log

五、系统层面排查(排除非 Java 问题)

6️⃣ CPU / IO / 网络

top
iostat -x 1
netstat -anp | grep java

看是否:

  • CPU 100%
  • 磁盘 IO 高
  • 网络延迟

7️⃣ GC 导致“假慢”

jstat -gcutil <pid> 1000

如果:

  • FGCT 很大
  • O 区满

说明是 GC 停顿,不是业务慢。


六、推荐组合方案(实战)

Web 慢接口

access log + arthas trace

偶发慢

arthas monitor + jstack

整体变慢

jstat + top + GC 日志

SQL 慢

mysql slow log


七、你可以告诉我

为了给你更精确的方案,可以补充:

  1. Java 版本(8 / 11 / 17)
  2. 应用类型(Spring Boot / Tomcat / 微服务)
  3. 慢的是 HTTP 接口还是定时任务
  4. 是否有日志样例

我可以直接帮你写 具体命令或脚本

0