如何每2秒获取基于前2秒聚合的Top CPU占用进程?
每2秒获取基于前2秒聚合的Top CPU进程解决办法
问题根源
top的首次输出是即时的CPU快照,不会按照-d指定的2秒间隔做使用率聚合;只有从第二次刷新开始,才会计算两次刷新之间(也就是前2秒)的CPU使用率。
直接可用的脚本
修改循环逻辑,让top执行两次刷新,跳过第一次的无效结果,只保留第二次的聚合数据:
while true; do # 执行2次top刷新,过滤出第二次的进程统计部分(表头+前10个进程) top -n 2 -d 2 | grep -A11 "PID USER" # 用分隔线区分每次的采样结果,方便日志阅读 echo "========================================" # 无需额外sleep,top的两次刷新已经耗时2秒 done > top_cpu_users
脚本细节解释
-n 2:让top完成2次完整的输出循环-d 2:设置刷新间隔为2秒,第二次输出就是基于这2秒的CPU使用率聚合值grep -A11 "PID USER":精准匹配进程列表的表头行,同时取后续11行,刚好对应原来head -n12的输出内容(表头+10个进程)
另一种简化写法(仅保留进程数据)
如果不需要每次都输出表头,可以用awk定位进程行:
while true; do # 跳过首次输出和第二次输出的头部内容,直接提取进程行 top -n 2 -d 2 | awk 'NR>17 && NR<=27' echo "========================================" done > top_cpu_users
注意:
NR>17 && NR<=27是基于默认top输出的行号调整的,不同系统可能有差异,你可以自己运行top -n1数清楚进程列表的起始和结束行号后再修改。
内容的提问来源于stack exchange,提问作者lmat - Reinstate Monica
相关产品推荐
相关产品推荐

