Linux下如何查看进程CPU使用率的历史峰值?
好问题!确实,/proc/[pid]/status里的VmHWM能直接给出进程内存使用的历史峰值,但Linux内核本身并没有提供类似的CPU使用率历史峰值的proc接口——毕竟CPU使用率是基于时间窗口计算的动态值,不是像内存那样有明确的“最高分配记录”。不过我们有几种实用的方法来获取这个数据,下面给你详细说说:
方法1:用pidstat持续监控并提取峰值
pidstat是sysstat工具集里的实用命令,专门用来跟踪进程的资源使用情况。如果你的系统没装,先通过包管理器安装:
# Debian/Ubuntu系 sudo apt install sysstat # RHEL/CentOS系 sudo yum install sysstat
之后可以后台启动它,持续记录指定进程的CPU使用率:
# 每隔1秒记录一次进程[pid]的CPU数据,输出到cpu_peak.log,后台运行 nohup pidstat -p [pid] 1 > cpu_peak.log &
当你需要查看峰值时,用awk和排序工具提取最大值就好:
# 跳过前两行表头,提取CPU使用率列(默认是第8列,要是输出不一样可以自己调整),然后取最大值 awk '{if(NR>2) print $8}' cpu_peak.log | sort -n | tail -1
方法2:top批处理模式日志分析
top支持批处理输出,能把进程的实时数据记录到文件,之后再分析峰值:
# 每隔2秒输出一次进程[pid]的信息,共输出1000次(去掉-n 1000就能一直记录),后台运行 top -b -p [pid] -d 2 -n 1000 > top_cpu.log &
提取峰值的命令:
# 匹配进程pid开头的行,提取CPU使用率列(默认是第9列),取最大值 awk '/^[pid]/ {print $9}' top_cpu.log | sort -n | tail -1
补充说明
- 为啥内核没原生保存CPU峰值?因为CPU使用率是一段时间内的CPU占用比例,不是像内存那样有“曾经分配过的最大内存量”这种静态记录,所以必须通过持续采样才能算出历史峰值。
- 如果需要长期监控,还可以用
prometheus+node_exporter这类监控系统,或者monit、nagios这类工具来自动记录和告警,但临时需求的话,上面两种命令行方法就足够高效。
内容的提问来源于stack exchange,提问作者Some Name




