You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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这类监控系统,或者monitnagios这类工具来自动记录和告警,但临时需求的话,上面两种命令行方法就足够高效。

内容的提问来源于stack exchange,提问作者Some Name

火山引擎 最新活动