大家好,这里是 DBA 学习之路,专注于提升数据库运维效率。
概述
top 是 Linux 系统中最常用的实时系统监控命令之一,能够动态显示系统中正在运行的进程信息,包括 CPU 使用率、内存占用、系统负载等关键性能指标。
基本语法
top [选项]
界面说明
系统信息区域(前 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:可用内存
进程列表区域
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:进程 IDUSER:进程所有者PR:优先级NI:nice 值VIRT:虚拟内存RES:物理内存SHR:共享内存S:进程状态(R 运行,S 睡眠,D 不可中断睡眠,Z 僵尸,T 停止)%CPU:CPU 使用百分比%MEM:内存使用百分比TIME+:累计 CPU 时间COMMAND:命令名称
常用选项
基本选项
# 显示特定用户的进程
top -u username
# 显示特定进程ID
top -p 1234
# 批处理模式,适合脚本使用
top -b
# 指定刷新次数后退出
top -n 5
# 设置刷新间隔(秒)
top -d 2
交互式按键
在 top 运行时,可以使用以下按键进行交互:
显示控制
q:退出 toph或?:显示帮助信息z:彩色/单色显示切换B:粗体显示切换
排序控制
P:按 CPU 使用率排序(默认)M:按内存使用率排序T:按累计时间排序N:按 PID 排序R:颠倒排序顺序
进程管理
k:终止进程(需要输入 PID)r:重新设置进程优先级u:只显示特定用户的进程
显示选项
1:显示/隐藏每个 CPU 核心信息t:切换 CPU 信息显示格式m:切换内存信息显示格式l:切换负载平均值和启动时间显示f:添加或删除显示字段o:改变显示字段顺序
实际应用场景
1. 系统性能监控
# 持续监控系统性能,每2秒刷新一次
top -d 2
# 监控特定时间段,运行10次后退出
top -n 10 -d 5
2. 问题排查
查找 CPU 占用高的进程
# 按CPU使用率排序(默认)
top
# 然后按 'P' 键确保按CPU排序
查找内存占用高的进程
# 启动top后按 'M' 键按内存排序
top
# 或者直接使用命令行方式
top -o %MEM
监控特定进程
# 监控oracle进程
top -p $(pgrep oracle)
# 监控多个进程
top -p 1234,5678,9012
3. 数据库运维场景
监控数据库进程
# 监控oracle相关进程
top -u oracle
# 批处理模式输出到文件
top -b -n 1 -u oracle > oracle_performance.txt
性能分析
# 每30秒记录一次系统状态,持续记录24小时
while true; do
echo "=== $(date) ===" >> system_monitor.log
top -b -n 1 >> system_monitor.log
sleep 30
done
4. 服务器维护场景
服务器健康检查
# 快速查看系统概况
top -b -n 1 | head -10
# 检查是否有异常进程
top -b -n 1 | grep -E "(zombie|stopped)"
资源使用统计
# 获取内存使用前10的进程
top -b -n 1 -o %MEM | head -20
# 获取CPU使用前10的进程
top -b -n 1 -o %CPU | head -20
5. 自动化脚本示例
系统监控脚本
#!/bin/bash
# system_monitor.sh
LOGFILE="/var/log/system_monitor.log"
THRESHOLD_CPU=80
THRESHOLD_MEM=90
while true; do
# 获取CPU使用率最高的进程
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 的配置可以保存到用户配置文件:
# 在top界面按 'W' 键保存当前配置
# 配置文件位置:~/.toprc
3. 多核 CPU 监控
# 显示每个CPU核心的使用情况
top
# 然后按 '1' 键切换单个/多个CPU显示
4. 进程树显示
# 显示进程树(需要按 '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 系统管理员必须掌握的基础工具,通过合理使用各种选项和交互命令,可以有效监控系统性能、排查问题、优化系统资源配置。在日常运维工作中,建议结合脚本自动化监控,及时发现和处理系统异常。
📚 推荐阅读:DBA 学习之路
如果这篇文章对你有帮助,推荐访问我的 Oracle DBA 系统学习站点,涵盖 100 天完整学习路线:
- 🔧 Oracle 安装部署 · RMAN 备份恢复 · Data Pump 数据迁移
- 🏗️ RAC 高可用 · DataGuard 容灾 · 多租户架构
- 🔍 故障排查 · 升级迁移 · GoldenGate 数据同步