如何回溯查询Linux服务器历史时段高CPU占用进程

能不能查询指定历史时段的高CPU占用进程,核心取决于服务器有没有提前开启进程级性能数据的持久化采集。原生Linux默认不会留存进程级的历史CPU占用记录,进程退出后实时状态数据就会被清除,没有提前采集的情况下没法直接精准定位到具体进程。
无提前采集时的间接排查思路
如果服务器上没装任何性能采集工具,只能通过系统现有日志找关联线索,拿不到精确的进程CPU占用数值:
- 翻对应时段的系统日志:
/var/log/messages、/var/log/syslog,查有没有服务异常、进程崩溃、OOM杀进程的相关记录 - 查定时任务日志:
/var/log/cron,核对10:00~11:00这个区间有没有触发的定时任务 - 如果服务器开了auditd审计,可以检索对应时段的进程执行事件,匹配当时启动过的异常进程
装了常见采集工具的直接查询方法
如果提前部署过性能采集工具,可以直接精准查到对应时段的CPU占用排名:
- sysstat(pidstat)
这是很多云服务器默认镜像自带的采集组件,先看配置文件/etc/default/sysstat里ENABLED="true"就是开启状态,历史日志按天存在/var/log/sa/目录下,文件名是sa+当月日期(比如当月15号的日志就是sa15)。
跑下面的命令就能导出指定时段所有进程的CPU占用数据,按%CPU列排序就能找到占用最高的进程:pidstat -u -s 10:00:00 -e 11:00:00 -f /var/log/sa/saXX - atop
atop存的进程性能数据更全,历史日志默认放在/var/log/atop/目录下,文件名格式是atop_YYYYMMDD。
执行atop -r /var/log/atop/atop_对应日期打开历史日志,进入交互界面后按t/T可以往前/往后切采样时间点,跳到10:00~11:00的区间后按大写C,进程就会按CPU使用率从高到低排序。 - Prometheus+node_exporter/Grafana监控栈
如果搭了这类监控,直接在面板选10:00~11:00的时间范围,看进程CPU使用率的指标,排序就能找到高占用进程。
后续避坑配置
为了下次再出同类问题不会没法回溯,建议开个轻量采集就行,几乎不占资源:
- 直接开sysstat采集:把配置里的ENABLED改成true,采样间隔设5-10分钟就够用,默认日志留28天,CPU、内存占用不到1%,完全不影响业务
- 需要更细排查维度的话,装个atop设开机自启,日志默认压缩存储,占的磁盘空间可以忽略。
内容的提问来源于stack exchange,提问作者htc-stk
相关产品推荐
相关产品推荐

