Linux TOP命令
概述
系统性能监控的终极利器
基础概念与含义
TOP命令是什么? Linux系统中最重要的实时性能监控工具,相当于Windows的任务管理器,能够动态显示系统中所有进程的资源使用情况。
核心功能
实时监控
动态更新系统状态
进程管理
查看/终止/调整进程
资源分析
CPU/内存/I/O监控
性能诊断
快速定位系统瓶颈
主要使用场景
性能诊断 - 系统运行缓慢时快速定位问题 资源监控 - 实时观察CPU、内存、I/O使用情况 故障排查 - 系统异常时识别异常进程 容量规划 - 长期监控为硬件升级提供依据 进程管理 - 交互式管理系统进程
TOP界面详细解析
top - 15:30:45 up 2 days, 3:25, 2 users, load average: 0.15, 0.20, 0.18 当前时间 运行时间 用户数 系统负载(1分钟,5分钟,15分钟) Tasks: 180 total, 2 running, 178 sleeping, 0 stopped, 0 zombie 进程总数 运行中 睡眠中 停止 僵尸进程 %Cpu(s): 5.2 us, 2.1 sy, 0.0 ni, 92.1 id, 0.5 wa, 0.0 hi, 0.1 si, 0.0 st 用户态 系统态 nice 空闲 等待I/O 硬中断 软中断 虚拟化 MiB Mem : 7936.2 total, 2234.5 free, 3456.8 used, 2244.9 buff/cache 内存总量 空闲内存 已用内存 缓冲/缓存 MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 3876.4 avail Mem 交换分区总量 空闲交换 已用交换 可用内存 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 root 20 0 156780 45632 12345 S 5.2 0.6 0:12.34 nginx 5678 mysql 20 0 1234567 234567 23456 S 3.1 2.9 1:23.45 mysqld
LOAD AVERAGE
系统负载:< CPU核心数正常
%CPU
进程CPU占用百分比
%MEM
进程内存占用百分比
VIRT/RES
虚拟内存/物理内存
进程状态说明: R = Running(运行中) | S = Sleeping(睡眠) D = Disk Sleep(等待I/O) | T = Stopped(停止) Z = Zombie(僵尸进程)
基础命令详解
启动参数
top # 基本启动 top -d 2 # 每2秒刷新一次 top -n 5 # 刷新5次后退出 top -b # 批处理模式(脚本友好) top -u nginx # 只显示nginx用户的进程 top -p 1234 # 只监控PID为1234的进程 top -H # 显示线程而不是进程 top -o %CPU # 按CPU使用率排序 top -o %MEM # 按内存使用率排序
组合使用
top -b -n 1 | head -n 20 # 获取前20行 top -b -n 1 | grep "nginx" # 过滤nginx进程 top -b -d 5 -n 12 > monitor.log # 监控1小时保存文件 top -p $(pgrep -d, nginx) # 监控所有nginx进程
交互式操作
注意:以下命令需要在TOP运行时按键操作!
P 按CPU排序
M 按内存排序
T 按时间排序
k 终止进程
r 调整优先级
u 按用户过滤
1 切换CPU显示
H 显示线程
f 选择字段
q 退出TOP
运维实战案例
场景1:CPU使用率异常高
# 问题:系统响应缓慢,CPU使用率达到90%+ top # 启动监控 # 按 'P' 键按CPU排序 top -H -p 异常进程ID # 查看进程线程 # 按 'k' 键终止异常进程(谨慎操作) # 持续监控 top -d 1 -o %CPU # 1秒刷新,CPU排序
场景2:内存泄漏排查
# 问题:内存使用率持续上升,从60%→90% top -o %MEM # 按内存排序 # 按 'M' 键确保内存排序 top -d 30 -b -n 120 > mem.log # 监控1小时 # 分析特定用户进程 top -u apache # 监控apache用户进程
场景3:系统负载过高
# 问题:load average超过CPU核心数
top -d 1 # 快速刷新观察
# 按 '1' 键显示每个CPU核心使用率
# 观察 %Cpu 行中的 'wa' 值(I/O等待)
# 统计进程状态分布
top -b -n 1|awk 'NR>7{s[$8]++}END{for(i in s)print i,s[i]}'场景4:服务进程监控
# 监控特定服务(如nginx) top -p $(pgrep -d, nginx) # 监控所有nginx进程 top -H -p $(pgrep nginx | head -1) # 查看主进程线程 # 监控Java应用 top -H -p $(pgrep java) # 显示Java进程所有线程
高级技巧与监控脚本
性能监控脚本
#!/bin/bash # system_monitor.sh - 系统监控脚本 DATE=$(date '+%Y-%m-%d %H:%M:%S') LOG="/var/log/system_monitor.log" echo "=== $DATE ===" >> $LOG # 系统基本信息 top -b -n 1 | head -5 >> $LOG # CPU占用TOP10 echo "CPU TOP10:" >> $LOG top -b -n1|head -17|tail -10 >> $LOG # 内存占用TOP5 echo "Memory TOP5:" >> $LOG top -b -o%MEM -n1|head -12|tail -5 >> $LOG # 定时任务设置 # crontab -e # */5 * * * * /path/to/system_monitor.sh
实用一行命令
# 找出CPU占用最高的10个进程
top -b -n1|head -17|tail -10|sort -k9 -nr
# 监控指定进程的CPU使用率变化
while true; do top -b -n1 -p PID|tail -1; sleep 2; done
# 获取系统负载并发送告警(负载>4时)
load=$(top -b -n1|head -1|awk '{print $12}'|cut -d, -f1)
if (( $(echo "$load > 4" | bc -l) )); then
echo "High Load: $load" | mail admin@company.com
fi
# 找出内存占用超过10%的进程
top -b -n1|awk 'NR>7 && $10>10.0 {print $1,$2,$10,$12}'
# 监控僵尸进程
top -b -n1|head -2|tail -1|awk '{print $10}'