90% 的运维都不知道:top 命令还能这样用!

大家好,这里是 DBA 学习之路,专注于提升数据库运维效率。

概述

top 是 Linux 系统中最常用的实时系统监控命令之一,能够动态显示系统中正在运行的进程信息,包括 CPU 使用率、内存占用、系统负载等关键性能指标。

基本语法

bash 复制代码
top [选项]

界面说明

系统信息区域(前 5 行)

yaml 复制代码
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:可用内存

进程列表区域

perl 复制代码
  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:命令名称

常用选项

基本选项

bash 复制代码
# 显示特定用户的进程
top -u username

# 显示特定进程ID
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. 系统性能监控

bash 复制代码
# 持续监控系统性能,每2秒刷新一次
top -d 2

# 监控特定时间段,运行10次后退出
top -n 10 -d 5

2. 问题排查

查找 CPU 占用高的进程

bash 复制代码
# 按CPU使用率排序(默认)
top
# 然后按 'P' 键确保按CPU排序

查找内存占用高的进程

bash 复制代码
# 启动top后按 'M' 键按内存排序
top
# 或者直接使用命令行方式
top -o %MEM

监控特定进程

bash 复制代码
# 监控oracle进程
top -p $(pgrep oracle)

# 监控多个进程
top -p 1234,5678,9012

3. 数据库运维场景

监控数据库进程

bash 复制代码
# 监控oracle相关进程
top -u oracle

# 批处理模式输出到文件
top -b -n 1 -u oracle > oracle_performance.txt

性能分析

bash 复制代码
# 每30秒记录一次系统状态,持续记录24小时
while true; do
    echo "=== $(date) ===" >> system_monitor.log
    top -b -n 1 >> system_monitor.log
    sleep 30
done

4. 服务器维护场景

服务器健康检查

bash 复制代码
# 快速查看系统概况
top -b -n 1 | head -10

# 检查是否有异常进程
top -b -n 1 | grep -E "(zombie|stopped)"

资源使用统计

bash 复制代码
# 获取内存使用前10的进程
top -b -n 1 -o %MEM | head -20

# 获取CPU使用前10的进程
top -b -n 1 -o %CPU | head -20

5. 自动化脚本示例

系统监控脚本

bash 复制代码
#!/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 的配置可以保存到用户配置文件:

bash 复制代码
# 在top界面按 'W' 键保存当前配置
# 配置文件位置:~/.toprc

3. 多核 CPU 监控

bash 复制代码
# 显示每个CPU核心的使用情况
top
# 然后按 '1' 键切换单个/多个CPU显示

4. 进程树显示

bash 复制代码
# 显示进程树(需要按 'V' 键)
top
# 在界面中按 'V' 显示进程父子关系

性能优化建议

1. 系统负载分析

  • 负载平均值 > CPU 核心数:系统可能过载
  • 负载平均值 < CPU 核心数:系统正常
  • 1 分钟负载 > 15 分钟负载:负载在上升

2. CPU 使用率分析

  • us 高:用户程序消耗 CPU 多
  • sy 高:系统调用多,可能 IO 密集
  • wa 高:IO 等待时间长,可能磁盘瓶颈
  • id 低:CPU 使用率高

3. 内存使用分析

  • free 很低但 available 充足:正常,系统在使用缓存
  • available 也很低:可能需要增加内存
  • 大量 swap 使用:内存不足

注意事项

  1. 权限问题:某些进程信息需要 root 权限才能查看
  2. 性能影响:top 本身也会消耗系统资源,高频刷新会增加系统负载
  3. 数据准确性:瞬时数据可能不准确,建议观察一段时间的趋势
  4. 版本差异:不同 Linux 发行版的 top 可能有细微差异

替代工具

  • htop:增强版 top,界面更友好
  • atop:更详细的系统监控
  • iotop:专门监控 IO 使用情况
  • nethogs:网络使用监控

总结

top 命令是 Linux 系统管理员必须掌握的基础工具,通过合理使用各种选项和交互命令,可以有效监控系统性能、排查问题、优化系统资源配置。在日常运维工作中,建议结合脚本自动化监控,及时发现和处理系统异常。


📚 推荐阅读:DBA 学习之路

如果这篇文章对你有帮助,推荐访问我的 Oracle DBA 系统学习站点,涵盖 100 天完整学习路线:

  • 🔧 Oracle 安装部署 · RMAN 备份恢复 · Data Pump 数据迁移
  • 🏗️ RAC 高可用 · DataGuard 容灾 · 多租户架构
  • 🔍 故障排查 · 升级迁移 · GoldenGate 数据同步

👉 立即访问 ora100.com →

相关推荐
Lucifer三思而后行2 小时前
Asianux 8 一键安装 Oracle 11GR2 单机
后端
Lucifer三思而后行2 小时前
Centos 7.9 一键安装 Oracle 12CR2(240116)单机 NON-CDB 多实例
后端
Lucifer三思而后行2 小时前
115篇!国庆 ⑦ 天,我从 〇 开始撸了个 Linux 系统!(建议收藏)
后端
Lucifer三思而后行2 小时前
100+ 新特性!OGG 23ai 到底强在哪?
后端
Lucifer三思而后行2 小时前
19.30 先别用了,有 BUG!
后端
Lucifer三思而后行2 小时前
11GR2 rac 2节点一键安装演示
后端
Lucifer三思而后行2 小时前
Asianux 8 一键安装 Oracle 19C 单机
后端
Lucifer三思而后行2 小时前
2026 年了,DBA 该有自己的 AI 助手了!
后端