Linux系统中怎么查找正在疯狂刷日志的服务

雨瑶大大_4587

雨瑶大大_4587

2026-09-15

807人浏览

原创

最准方式是直接检查 /proc/*/fd 中哪些进程正通过 fd 1 或 2 写入日志文件,结合 lsof +d /var/log 统计写操作进程,再用 ls -l /proc/pid/fd/ | grep -e '1|2|\.log$' 定位具体输出目标。

linux系统中怎么查找正在疯狂刷日志的服务

怎么快速定位高频写日志的进程

直接看 /proc/*/fd 里哪些进程正往文件描述符(尤其是 1、2)写大量内容,比盲扫日志文件更准——因为很多服务会重定向 stdout/stderr 到日志,但不一定会立刻 flush 到磁盘,lsofls -l /proc/*/fd/* 能抓到“正在写”的实时状态。

实操建议:

  • 运行 sudo lsof +D /var/log 2>/dev/null | awk '$5 ~ /^w/ {print $2}' | sort | uniq -c | sort -nr | head -10,列出对 /var/log 下文件有写权限(w)的 top 10 进程 PID
  • 对可疑 PID,查它当前打开的 fd:ls -l /proc/<pid>/fd/ 2>/dev/null | grep -E '1|2|log|\.log$'</pid>,重点看是否连着 /dev/ptspipe 或某个增长飞快的日志文件
  • 如果看到 anon_inode:[eventpoll]socket 占多数,说明它可能不是直接写日志,而是通过 syslog 或 journald 中转,得切到下一节查

systemd-journald 占用高时怎么确认源头

很多“狂刷日志”的表象其实是 journald 在缓存或转发日志,尤其当服务用 syslog()stdout 输出、且 StandardOutput=journal 时,真正刷盘的是 journald 自己,不是原进程。

实操建议:

  • 先看 journal 实时速率:journalctl -o json --since "1 minute ago" | wc -l,如果每分钟超 5000 行,基本算异常
  • journalctl -o json --since "30 seconds ago" | jq -r '.SYSLOG_IDENTIFIER // .UNIT // "-"' 抽出最近 30 秒日志来源,统计频次:... | sort | uniq -c | sort -nr
  • 查具体服务配置:systemctl show <unit-name> | grep -E "(StandardOutput|StandardError|SyslogIdentifier)"</unit-name>,确认它是否把输出直送 journal,且没设 RateLimitIntervalSecRateLimitBurst

怎么判断是应用层逻辑打点还是配置错误

高频日志往往分两类:一类是代码里写了死循环 log.Info("x=%v", x),一类是配置错导致反复重试/告警(比如数据库连不上,每秒重连并记 error)。前者看日志内容重复度高、变量值不变;后者常带堆栈、时间戳密集、错误码一致。

onewo-rtlinux
onewo-rtlinux

Linux 实时编程助手。生成、审查并修改用于周期性控制任务和中断驱动程序的 C 代码。强制实施实时调度策略。

下载

实操建议:

  • 对目标日志文件,用 tail -n 1000 /path/to/log | sort | uniq -c | sort -nr | head -5 看最高频的几行——如果某行出现几百次,基本是无意义打点
  • grep -E "(error|ERROR|panic|failed|refused|timeout)" /path/to/log | tail -n 500 | awk '{print $1,$2,$3}' | sort | uniq -c 查错误时间分布,如果集中在秒级精度(如 Jun 05 14:22:01 出现 20 次),大概率是失败重试
  • 临时限制某服务日志量验证:sudo systemctl set-property <unit-name> LogLevelMax=warning</unit-name>(需 systemd v240+),观察磁盘写入是否下降

别忽略 logrotate 和 sync 导致的假象

有时候你看到 du -sh /var/log/*.log 增长飞快,但 lsof 找不到对应写进程——可能是 logrotate 正在 copytruncate,旧文件句柄还被进程占着,新日志实际写进空文件;也可能是应用开了 O_SYNC 或频繁 fsync(),让小量日志引发大量磁盘 I/O。

实操建议:

  • 检查 logrotate 是否卡住:ls -lt /var/log/*.log* | head -5,看是否有 .1.2.gz 但主文件大小不变,同时 lsof | grep deleted 里存在已删日志文件的残留句柄
  • strace -p <pid> -e trace=write,fsync,fdatasync -s 64 2>&1 | grep -E "(write|fsync)"</pid> 抓真实系统调用,如果 write(2, ...) 每秒上百次但每次只写几十字节,就是 O_SYNC 类问题
  • iotop -oPa 看实际磁盘写入进程,注意区分 “DISK WRITE” 和 “SWAPIN” —— 有些服务日志量不大,但因内存不足频繁 swap,看起来像在刷日志

最麻烦的情况是日志被重定向到管道或 socket(比如 2>&1 | logger),此时 /proc/<pid>/fd/</pid> 显示的是 pipe inode,得顺着 pipe:[123456] 反查另一端进程。这个链路容易断,建议优先从 journalctl -u <unit></unit>rsyslog/var/log/syslog 入手追源头。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3630

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3153

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2213

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

5290

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

4962

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

2973

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

2485

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

2699

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

277

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习