命令参数及概念技巧

以下是 top 命令的完整用法及注释,涵盖命令行参数、交互式快捷键和实用技巧:


一、基本用法

1. 启动 top

1
top [选项]

2. 常用命令行参数

参数 说明
-d <秒> 刷新间隔时间(默认3秒),如 top -d 1(每秒刷新)
-p <PID1,PID2> 监控指定进程,如 top -p 1234,5678
-u <用户名> 显示指定用户的进程,如 top -u root
-b 批处理模式(非交互式),适合输出到文件,如 top -b > log.txt
-n <次数> 限制刷新次数后退出,如 top -n 5(刷新5次后退出)
-H 显示线程(需在 top 运行时按 H 切换)
-i 隐藏空闲(idle)进程
-o <字段名> 按指定字段排序(如 -o %CPU 按CPU降序)
-c 显示完整命令行(默认截断长命令)

二、交互式命令(运行时按键)

1. 全局控制

按键 说明
h? 显示帮助菜单
k 终止进程(输入PID后发送信号,默认SIGTERM)
q 退出 top
Space 立即刷新屏幕
Z 切换彩色/黑白显示
W 保存当前配置到 ~/.toprc(自定义设置持久化)

2. 显示选项

按键 说明
l 切换显示负载信息(uptime及平均负载)
t 切换显示CPU状态(简略/详细模式)
m 切换显示内存使用情况(简略/详细模式)
f 进入字段管理界面,选择显示/隐藏列
F 选择排序字段(按字段字母选择,如 P 按CPU,M 按内存)
R 反转排序顺序(升序 ↔ 降序)
S 切换累计时间模式(显示进程总CPU时间)
V 切换进程树视图(显示父子进程关系)

3. 进程过滤

按键 说明
o 交互式过滤进程(输入条件如 %CPU>10 显示CPU超过10%的进程)
O 选择过滤字段(类似 o,但通过字段字母选择)
= 清除所有过滤条件

4. 多核CPU监控

按键 说明
1 切换显示所有CPU核心的总览/单个核心详情
2 在NUMA架构中切换节点视图(需系统支持)

三、输出字段说明

1. 顶部汇总信息

1
2
3
4
5
top - 14:30:00 up 10 days,  2:30,  2 users,  load average: 0.00, 0.01, 0.05
Tasks: 200 total, 1 running, 199 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 1.2 sy, 0.0 ni, 96.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7856.3 total, 102.3 free, 4096.0 used, 3658.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 3567.5 avail Mem
  • load average :系统1/5/15分钟的平均负载(理想值 ≤ CPU核心数)。
  • %Cpu(s)
    • us:用户态CPU时间占比
    • sy:内核态CPU时间占比
    • id:空闲CPU时间占比
    • wa:I/O等待时间占比

2. 进程列表字段

字段 说明
PID 进程ID
USER 进程所有者
PR 进程优先级(Priority)
NI 进程的Nice值(-20到19,值越小优先级越高)
VIRT 虚拟内存使用量(包含交换分区和共享库)
RES 实际物理内存使用量(Resident Memory)
SHR 共享内存大小
%CPU 进程占用的CPU百分比
%MEM 进程占用的内存百分比
TIME+ 进程使用的累计CPU时间(格式:分:秒.百分秒)

四、高级用法示例

1. 监控指定进程的线程

1
top -H -p <PID>
  • -H:显示线程视图,结合 -p 监控特定进程的所有线程。

2. 输出到文件并脱机分析

1
top -b -n 3 > top.log  # 记录3次刷新数据

3. 按内存排序并过滤高内存进程

1
top -o %MEM -u appuser  # 按内存排序,仅显示用户appuser的进程

4. 实时监控网络或磁盘I/O

结合 topiotop/nethogs

1
top -d 1 -b | grep "wa"  # 监控高I/O等待的进程


五、常见问题处理

1. top 显示异常(如字段错位)

  • 重置配置:删除 ~/.toprc 文件后重启 top

2. 进程列表不更新

  • 检查刷新间隔:确保未使用 -d 0(某些版本不支持0秒间隔)。
  • 验证权限:确认有权限读取 /proc 目录下的进程信息。

3. 高CPU占用进程排查

1
2
top -o %CPU    # 按CPU排序
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head # 类似功能

六、跨平台差异

  • macOStop 参数略有不同(如 -o 用于指定排序字段,而非 -sort)。
  • Androidadb shell top 功能受限,建议使用 adb shell dumpsys cpuinfo

掌握这些用法后,可高效监控系统资源并快速定位性能问题。

通过/proc/stat文件计算cpu占用

要通过文件计算 CPU 占用率,在 Linux 系统中通常需要分析 /proc/stat 文件。以下是具体步骤和脚本示例:


1. 理解 /proc/stat 文件

  • 文件路径/proc/stat
  • 内容格式
    1
    2
    3
    4
    cpu  12345 678 9012 34567 89 123 456 0 0 0
    cpu0 1234 56 789 12345 67 89 12 0 0 0
    cpu1 2345 67 890 23456 78 90 34 0 0 0
    ...
    • 第一行 (cpu) : 所有 CPU 核心的汇总统计。
    • 后续行 (cpu0, cpu1…) : 每个 CPU 核心的独立统计。
    • 字段含义(单位:jiffies,即时钟滴答次数):
      • user:用户态时间
      • nice:低优先级用户态时间
      • system:内核态时间
      • idle:空闲时间
      • iowait:I/O 等待时间
      • irq:硬件中断时间
      • softirq:软件中断时间
      • steal:虚拟机被抢占时间
      • guest:运行虚拟 CPU 时间
      • guest_nice:低优先级虚拟 CPU 时间

2. 计算 CPU 使用率公式

  1. 两次采样间隔内的总时间
  2. 两次采样间隔内的空闲时间
  3. CPU 使用率

3. 脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/bin/bash

# 第一次采样
read -r cpu user nice system idle iowait irq softirq steal rest < <(grep '^cpu ' /proc/stat)
total1=$((user + nice + system + idle + iowait + irq + softirq + steal))
idle1=$((idle + iowait))

# 间隔 1 秒
sleep 1

# 第二次采样
read -r cpu user nice system idle iowait irq softirq steal rest < <(grep '^cpu ' /proc/stat)
total2=$((user + nice + system + idle + iowait + irq + softirq + steal))
idle2=$((idle + iowait))

# 计算差值
total_diff=$((total2 - total1))
idle_diff=$((idle2 - idle1))

# 计算使用率
cpu_usage=$(echo "scale=2; (100 * ($total_diff - $idle_diff) / $total_diff)" | bc)
echo "CPU 使用率: ${cpu_usage}%"

4. 运行脚本

1
2
chmod +x cpu_usage.sh
./cpu_usage.sh

输出示例

1
CPU 使用率: 12.34%


5. 扩展场景

(1) 监控多核 CPU 使用率

1
2
3
4
5
6
7
#!/bin/bash
cores=$(grep -c '^cpu[0-9]' /proc/stat)

for ((i=0; i<cores; i++)); do
# 每个核心的采样和计算逻辑(类似步骤3)
# ...
done

(2) 实时持续监控

1
2
# 每 2 秒刷新一次
watch -n 2 ./cpu_usage.sh

6. 注意事项

  • 采样间隔:间隔时间越短,数据越实时,但可能受系统负载波动影响。
  • 浮点运算:Bash 本身不支持浮点,需借助 bcawk
  • 多核统计:若需监控每个核心的使用率,需遍历 /proc/stat 中的 cpu0, cpu1 行。

通过上述方法,您可以直接基于系统文件动态计算 CPU 使用率,无需依赖外部工具。

  1. 待机时检测升级包功能未实现,(要求平台升级过程在待机后进行) @尹利军 4月23日 超期7天
  2. 检测cache目录下有升级包时,弹窗提示未按照规范开发(要求倒计时15s,有更新后待机和立即确认待机及二次确认框,区别于正常待机弹框)@尹利军 4月23日 超期7天
  3. 在单播和组播的DHCP网络下release规则符合规范要求:能够正常看到release报文并且release内以单播方式进行请求,非广播方式(我司目前为广播方式不符合规范) @尹利军 4月24日 超期7天
  4. 一帧花屏比例超过20%才屏蔽花屏帧,低于20%正常输出花屏帧,上报花屏事件与局方要求不符(局方要求花屏占比超过20%(花屏占比大)要正常上报到探针平台,花屏占比小于20%可以不上报)@尹利军 4月24日 超期6天
  5. 【验收用例】零配置下发失败,未弹出自动下载配置失败的提示,点击手动配置进入手动配置流程,配置正确的业务相关信息后可以正常接入launcher @陈斌 4月30日 超期1天
  6. 开机过程中在开机动画展示期间出现黑屏3s @尹利军 4月30日 超期1天
  7. 【验收用例】偶现开机认证失败( 机顶盒开机成功获取v4 ip,但是此后arp查询网关mac,网关一直无响应,所以机顶盒的v4网络不通,无法用v4进行认证,所以导致认证失败) @尹利军 4月24日 超期6天
  8. 【验收用例】接AV口可以正常输出,输出制式自动更改为PAL制(我司未自动切换到PAL) @陈斌 4月24日 超期6天
  9. 发货型号硬件及电源适配器性能验证结果未提供,烦请在测试周期结束前及时提供 @尹利军 4月28日 超期 3天