在 CentOS 上排查 Java 应用日志中的慢请求(慢调用),通常可以从 日志分析、JVM 工具、系统层面、应用监控 四个方向入手。下面按实战方式给你一套清晰思路。
先明确:
不同场景排查方式不同。
如果是 Spring Boot / Tomcat:
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
在 application.yml 开启:
logging:
level:
org.springframework.web.filter: DEBUG
或使用拦截器打印耗时:
long start = System.currentTimeMillis();
// 业务
log.info("request {} cost {} ms", uri, System.currentTimeMillis() - start);
jps
jstack <pid> > jstack.log
查找:
BLOCKEDWAITING例如:
"http-nio-8080-exec-3" #23 prio=5 os_prio=0
java.lang.Thread.State: RUNNABLE
at com.xxx.Service.slowMethod
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
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
top
iostat -x 1
netstat -anp | grep java
看是否:
jstat -gcutil <pid> 1000
如果:
说明是 GC 停顿,不是业务慢。
✅ Web 慢接口
access log + arthas trace
✅ 偶发慢
arthas monitor + jstack
✅ 整体变慢
jstat + top + GC 日志
✅ SQL 慢
mysql slow log
为了给你更精确的方案,可以补充:
我可以直接帮你写 具体命令或脚本。