大家好,这里是 DBA 学习之路,专注于提升数据库运维效率。
概述
top 是 Linux 系统中最常用的实时系统监控命令之一,能够动态显示系统中正在运行的进程信息,包括 CPU 使用率、内存占用、系统负载等关键性能指标。
基本语法
界面说明
系统信息区域(前 5 行)
1 2 3 4 5
| top - 14:30:25 up 10 days, 5:42, 2 users, load average: 0.15, 0.25, 0.30 Tasks: 287 total, 1 running, 286 sleeping, 0 stopped, 0 zombie %Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.5 id, 0.2 wa, 0.0 hi, 0.0 si, 0.0 st MiB Mem : 16384.0 total, 2048.5 free, 8192.3 used, 6143.2 buff/cache MiB Swap: 4096.0 total, 4096.0 free, 0.0 used. 7680.1 avail Mem
|
第一行:系统时间和负载
14:30:25:当前时间
up 10 days, 5:42:系统运行时间
2 users:当前登录用户数
load average: 0.15, 0.25, 0.30:1 分钟、5 分钟、15 分钟的平均负载
第二行:进程统计
287 total:总进程数
1 running:运行中的进程数
286 sleeping:睡眠状态进程数
0 stopped:停止的进程数
0 zombie:僵尸进程数
第三行:CPU 使用率
us:用户空间占用 CPU 百分比
sy:内核空间占用 CPU 百分比
ni:改变过优先级的进程占用 CPU 百分比
id:空闲 CPU 百分比
wa:IO 等待占用 CPU 百分比
hi:硬中断占用 CPU 百分比
si:软中断占用 CPU 百分比
st:虚拟机占用 CPU 百分比
第四、五行:内存信息
total:总内存
free:空闲内存
used:已使用内存
buff/cache:缓冲和缓存内存
avail Mem:可用内存
进程列表区域
1 2
| PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 12345 root 20 0 162.5m 12.3m 8.9m S 2.3 0.8 0:05.67 oracle
|
PID:进程 ID
USER:进程所有者
PR:优先级
NI:nice 值
VIRT:虚拟内存
RES:物理内存
SHR:共享内存
S:进程状态(R 运行,S 睡眠,D 不可中断睡眠,Z 僵尸,T 停止)
%CPU:CPU 使用百分比
%MEM:内存使用百分比
TIME+:累计 CPU 时间
COMMAND:命令名称
常用选项
基本选项
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| top -u username
top -p 1234
top -b
top -n 5
top -d 2
|
交互式按键
在 top 运行时,可以使用以下按键进行交互:
显示控制
q:退出 top
h 或 ?:显示帮助信息
z:彩色/单色显示切换
B:粗体显示切换
排序控制
P:按 CPU 使用率排序(默认)
M:按内存使用率排序
T:按累计时间排序
N:按 PID 排序
R:颠倒排序顺序
进程管理
k:终止进程(需要输入 PID)
r:重新设置进程优先级
u:只显示特定用户的进程
显示选项
1:显示/隐藏每个 CPU 核心信息
t:切换 CPU 信息显示格式
m:切换内存信息显示格式
l:切换负载平均值和启动时间显示
f:添加或删除显示字段
o:改变显示字段顺序
实际应用场景
1. 系统性能监控
1 2 3 4 5
| top -d 2
top -n 10 -d 5
|
2. 问题排查
查找 CPU 占用高的进程
1 2 3
| # 按CPU使用率排序(默认) top # 然后按 'P' 键确保按CPU排序
|
查找内存占用高的进程
监控特定进程
1 2 3 4 5
| top -p $(pgrep oracle)
top -p 1234,5678,9012
|
3. 数据库运维场景
监控数据库进程
1 2 3 4 5
| top -u oracle
top -b -n 1 -u oracle > oracle_performance.txt
|
性能分析
1 2 3 4 5 6
| while true; do echo "=== $(date) ===" >> system_monitor.log top -b -n 1 >> system_monitor.log sleep 30 done
|
4. 服务器维护场景
服务器健康检查
1 2 3 4 5
| top -b -n 1 | head -10
top -b -n 1 | grep -E "(zombie|stopped)"
|
资源使用统计
1 2 3 4 5
| top -b -n 1 -o %MEM | head -20
top -b -n 1 -o %CPU | head -20
|
5. 自动化脚本示例
系统监控脚本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #!/bin/bash
LOGFILE="/var/log/system_monitor.log" THRESHOLD_CPU=80 THRESHOLD_MEM=90
while true; do CPU_TOP=$(top -b -n 1 | awk 'NR>7 {print $9,$12}' | sort -nr | head -1) CPU_USAGE=$(echo $CPU_TOP | awk '{print $1}') CPU_PROCESS=$(echo $CPU_TOP | awk '{print $2}')
MEM_TOP=$(top -b -n 1 | awk 'NR>7 {print $10,$12}' | sort -nr | head -1) MEM_USAGE=$(echo $MEM_TOP | awk '{print $1}') MEM_PROCESS=$(echo $MEM_TOP | awk '{print $2}')
echo "[$(date)] CPU: ${CPU_USAGE}% (${CPU_PROCESS}), MEM: ${MEM_USAGE}% (${MEM_PROCESS})" >> $LOGFILE
if (( $(echo "$CPU_USAGE > $THRESHOLD_CPU" | bc -l) )); then echo "WARNING: High CPU usage: ${CPU_USAGE}% by ${CPU_PROCESS}" >> $LOGFILE fi
if (( $(echo "$MEM_USAGE > $THRESHOLD_MEM" | bc -l) )); then echo "WARNING: High memory usage: ${MEM_USAGE}% by ${MEM_PROCESS}" >> $LOGFILE fi
sleep 60 done
|
高级使用技巧
1. 自定义显示字段
按 f 键进入字段选择界面,可以添加或删除显示列:
- 使用上下箭头选择字段
- 按空格键切换字段显示状态
- 按
q 退出字段选择
2. 保存配置
top 的配置可以保存到用户配置文件:
1 2
| # 在top界面按 'W' 键保存当前配置 # 配置文件位置:~/.toprc
|
3. 多核 CPU 监控
1 2 3
| # 显示每个CPU核心的使用情况 top # 然后按 '1' 键切换单个/多个CPU显示
|
4. 进程树显示
1 2 3
| # 显示进程树(需要按 'V' 键) top # 在界面中按 'V' 显示进程父子关系
|
性能优化建议
1. 系统负载分析
- 负载平均值 > CPU 核心数:系统可能过载
- 负载平均值 < CPU 核心数:系统正常
- 1 分钟负载 > 15 分钟负载:负载在上升
2. CPU 使用率分析
us 高:用户程序消耗 CPU 多
sy 高:系统调用多,可能 IO 密集
wa 高:IO 等待时间长,可能磁盘瓶颈
id 低:CPU 使用率高
3. 内存使用分析
free 很低但 available 充足:正常,系统在使用缓存
available 也很低:可能需要增加内存
- 大量
swap 使用:内存不足
注意事项
- 权限问题:某些进程信息需要 root 权限才能查看
- 性能影响:top 本身也会消耗系统资源,高频刷新会增加系统负载
- 数据准确性:瞬时数据可能不准确,建议观察一段时间的趋势
- 版本差异:不同 Linux 发行版的 top 可能有细微差异
替代工具
htop:增强版 top,界面更友好
atop:更详细的系统监控
iotop:专门监控 IO 使用情况
nethogs:网络使用监控
总结
top 命令是 Linux 系统管理员必须掌握的基础工具,通过合理使用各种选项和交互命令,可以有效监控系统性能、排查问题、优化系统资源配置。在日常运维工作中,建议结合脚本自动化监控,及时发现和处理系统异常。