命令参数及概念技巧
以下是 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. 监控指定进程的线程
-H:显示线程视图,结合 -p 监控特定进程的所有线程。
2. 输出到文件并脱机分析
3. 按内存排序并过滤高内存进程
4. 实时监控网络或磁盘I/O
结合 top 和 iotop/nethogs:
五、常见问题处理
1. top 显示异常(如字段错位)
- 重置配置:删除
~/.toprc 文件后重启 top。
2. 进程列表不更新
- 检查刷新间隔:确保未使用
-d 0(某些版本不支持0秒间隔)。
- 验证权限:确认有权限读取
/proc 目录下的进程信息。
3. 高CPU占用进程排查
1 2
| top -o %CPU ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head
|
六、跨平台差异
- macOS:
top 参数略有不同(如 -o 用于指定排序字段,而非 -sort)。
- Android:
adb 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 使用率公式
- 两次采样间隔内的总时间:
- 两次采样间隔内的空闲时间:
- 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))
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
|
输出示例:
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 done
|
(2) 实时持续监控
1 2
| watch -n 2 ./cpu_usage.sh
|
6. 注意事项
- 采样间隔:间隔时间越短,数据越实时,但可能受系统负载波动影响。
- 浮点运算:Bash 本身不支持浮点,需借助
bc 或 awk。
- 多核统计:若需监控每个核心的使用率,需遍历
/proc/stat 中的 cpu0, cpu1 行。
通过上述方法,您可以直接基于系统文件动态计算 CPU 使用率,无需依赖外部工具。
- 待机时检测升级包功能未实现,(要求平台升级过程在待机后进行) @尹利军 4月23日 超期7天
- 检测cache目录下有升级包时,弹窗提示未按照规范开发(要求倒计时15s,有更新后待机和立即确认待机及二次确认框,区别于正常待机弹框)@尹利军 4月23日 超期7天
- 在单播和组播的DHCP网络下release规则符合规范要求:能够正常看到release报文并且release内以单播方式进行请求,非广播方式(我司目前为广播方式不符合规范) @尹利军 4月24日 超期7天
- 一帧花屏比例超过20%才屏蔽花屏帧,低于20%正常输出花屏帧,上报花屏事件与局方要求不符(局方要求花屏占比超过20%(花屏占比大)要正常上报到探针平台,花屏占比小于20%可以不上报)@尹利军 4月24日 超期6天
- 【验收用例】零配置下发失败,未弹出自动下载配置失败的提示,点击手动配置进入手动配置流程,配置正确的业务相关信息后可以正常接入launcher @陈斌 4月30日 超期1天
- 开机过程中在开机动画展示期间出现黑屏3s @尹利军 4月30日 超期1天
- 【验收用例】偶现开机认证失败( 机顶盒开机成功获取v4 ip,但是此后arp查询网关mac,网关一直无响应,所以机顶盒的v4网络不通,无法用v4进行认证,所以导致认证失败) @尹利军 4月24日 超期6天
- 【验收用例】接AV口可以正常输出,输出制式自动更改为PAL制(我司未自动切换到PAL) @陈斌 4月24日 超期6天
- 发货型号硬件及电源适配器性能验证结果未提供,烦请在测试周期结束前及时提供 @尹利军 4月28日 超期 3天