系统监控 / 命令文档

Linux TOP命令

$ top 7 个章节 Linux 命令详解

概述

系统性能监控的终极利器

基础概念与含义

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}'

同分类 · 其他命令文档