top 是 Linux 内置的实时系统监控工具,相当于 Windows 任务管理器,能动态看整机负载、CPU/内存、进程/线程资源占用,默认 3秒 刷新一次。
一、启动与常用参数(命令行)
基本启动
bash
top # 默认:3秒刷新,显示所有进程
常用启动参数(必记)
- -d N :设置刷新间隔(秒), top -d 1 每秒刷新
- -p PID :只监控指定进程, top -p 1234 ;多进程用逗号分隔
- -u 用户名 :只看某用户进程, top -u root
- -H :显示线程(默认只看进程)
- -b :批处理模式(输出到文件/脚本用)
- -n 次数 :刷新 N 次后退出, top -b -n 5 > top.log 存日志
- -c :显示完整命令行(默认截断)
二、界面头部信息(系统全局状态)
打开 top 先看前5行,是系统核心指标:
plaintext
top - 22:30:00 up 10 days, 2:00, 1 user, load average: 0.1, 0.2, 0.3
Tasks: 120 total, 1 running, 119 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.0%us, 0.5%sy, 0.0%ni, 98.0%id, 0.3%wa, 0.0%hi, 0.2%si, 0.0%st
MiB Mem : 7856.2 total, 1234.5 free, 4567.8 used, 2053.9 buff/cache
MiB Swap: 8192.0 total, 8192.0 free, 0.0 used. 2890.1 avail Mem
1)第一行:系统时间、运行时长、负载
- 22:30:00 :当前时间
- up 10 days :系统运行10天
- 1 user :登录用户数
- load average: 0.1, 0.2, 0.3 :1/5/15分钟负载
- 单核:负载 ≤1 正常;>1 繁忙
- 多核:负载 ≤核心数 正常(4核≤4)
2)第二行:进程概况(Tasks)
- total :总进程数
- running :运行中(R状态)
- sleeping :休眠(S状态,正常)
- stopped :暂停(Ctrl+Z)
- zombie :僵尸进程(Z,需处理)
3)第三行:CPU 占用(%)
- us :用户进程(app)
- sy :系统内核
- ni :nice 调整过优先级的进程
- id :空闲(重点),越高越闲
- wa :IO等待(重点),高=磁盘慢/阻塞
- hi :硬中断
- si :软中断
- st :虚拟机被抢占(云服务器)
4)第四/五行:内存(Mem)/交换分区(Swap)
- total :总内存
- used :已用
- free :空闲
- buff/cache :缓存(可回收)
- avail Mem :可用内存(真实剩余)
- Swap used :交换分区用了多少(高=内存不足)
三、进程列表字段详解(重点)
plaintext
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 123456 45678 12345 S 5.2 1.2 0:12.34 nginx
核心列(必看)
- PID:进程ID(杀进程、查进程都靠它)
- USER:进程所属用户
- PR/NI:优先级(PR越小越高;NI=-20最高,19最低)
- VIRT:虚拟内存(申请的地址空间,含swap,不准)
- RES:实际物理内存(重点),进程真实占用
- SHR:共享内存(和其他进程共用)
- S:进程状态
- R:运行中
- S:休眠(等待资源)
- Z:僵尸(父进程没回收)
- T:暂停(Ctrl+Z)
- %CPU:CPU使用率(多核可超100%)
- %MEM:物理内存占比
- TIME+:累计CPU时间
- COMMAND:进程名/命令行
四、交互式快捷键(运行中按,大小写敏感)
1)排序(最常用)
- P:按 %CPU 降序(默认)
- M:按 %MEM 降序(查内存大户)
- T:按 TIME+ 降序
- N:按 PID 排序
2)显示控制
- 1:展开显示每个CPU核心的占用
- c:切换完整命令行显示
- H:显示线程(替代 -H 参数)
- i:隐藏空闲进程
- f:自定义显示字段(增删列)
- o:调整列顺序
3)进程管理(高危谨慎)
- k:输入PID → 发信号(默认15=正常终止;9=强制杀)
- r:输入PID → 改nice值(-20~19,root可负)
4)刷新与退出
- d/s:改刷新间隔(秒)
- 空格:立即刷新
- q:退出
- h:帮助
五、高频实战场景(直接套用)
场景1:查CPU占用高的进程
bash
top
# 按 P 排序,看 %CPU 最高的PID
# 按 k → 输入PID → 15(正常杀)或9(强杀)
场景2:查内存泄漏/内存大户
bash
top
# 按 M 排序,看 RES/%MEM 最高的进程
场景3:定位磁盘IO阻塞(wa高)
bash
top
# 看 %wa 持续 >50% → 磁盘慢,用 iostat 进一步查
场景4:监控特定进程
bash
top -p $(pidof nginx) # 监控nginx所有进程
场景5:保存监控日志
bash
top -b -n 10 > top_$(date +%Y%m%d).log
六、常见状态与问题排查
1)僵尸进程(Z)
- 原因:子进程结束,父进程未回收
- 处理:杀父进程,或 kill -9 子PID
2)负载高但CPU空闲(id高)
- 多为 IO阻塞(wa高),查磁盘/网络
3)%CPU超100%
- 多核正常(4核最高400%)
4)RES远大于实际内存
- 正常,因为共享内存(SHR)会被多进程共用
七、top vs jobs 区别
- top:系统级,看所有进程/线程(跨终端)
- jobs:Shell级,只看当前终端后台任务