温馨提示×

怎样定位linux慢日志

小樊
38
2026-10-05 09:48:11
栏目: 智能运维

在 Linux 下“慢日志”通常指数据库慢查询日志(如 MySQL、PostgreSQL),也可能是系统/服务响应慢的日志定位。下面按常见场景说明如何定位。


一、MySQL 慢日志定位(最常见)

1. 确认慢日志是否开启

mysql -u root -p -e "SHOW VARIABLES LIKE 'slow_query_log';"
mysql -u root -p -e "SHOW VARIABLES LIKE 'slow_query_log_file';"
mysql -u root -p -e "SHOW VARIABLES LIKE 'long_query_time';"

2. 开启慢日志(如未开启)

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;  -- 超过1秒记日志

或永久配置(my.cnf):

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1
log_queries_not_using_indexes = 1

3. 查看慢日志

tail -f /var/log/mysql/slow.log

4. 使用 mysqldumpslow 分析

mysqldumpslow -s t -t 10 /var/log/mysql/slow.log
  • -s t:按时间排序
  • -t 10:前 10 条

二、PostgreSQL 慢日志

1. 配置 postgresql.conf

logging_collector = on
log_directory = 'log'
log_min_duration_statement = 1000  # 毫秒

2. 查看日志

tail -f /var/lib/postgresql/data/log/postgresql-*.log

三、系统/服务“慢”问题定位(非数据库)

1. 看系统负载

top
htop
uptime

2. 看磁盘 IO

iostat -x 1

3. 看网络延迟

ping ip
traceroute ip

4. 看服务日志

journalctl -u nginx --since "10 min ago"
journalctl -u your-service -p err

四、Web 服务慢(如 Nginx)

Nginx 慢请求日志

log_format main '$request_time $upstream_response_time $request';
access_log /var/log/nginx/access.log main;

分析:

awk '{print $1}' /var/log/nginx/access.log | sort -n | tail

五、通用思路总结

  1. 明确“慢”的是什么(DB / 接口 / 系统)
  2. 开启对应慢日志
  3. 用工具分析(mysqldumpslow / awk / top)
  4. 结合资源(CPU / IO / 网络)综合判断

如果你能告诉我具体是哪种服务慢(MySQL?Nginx?自定义程序?),我可以直接给你更精确的命令。

0 踩