为什么要监控系统?

服务器资源有限,需要监控:

  • CPU使用率
  • 内存占用
  • 磁盘空间
  • 进程状态

及时发现异常,避免服务崩溃。


top - 实时进程监控

基本用法

1
top

显示信息分为3部分:

  1. 系统汇总(顶部)
  2. 进程列表(中间)
  3. 快捷键提示(底部)

顶部信息解读

1
top - 10:00:00 up 1 day,  2:30,  2 users,  load average: 0.05, 0.10, 0.08
  • 10:00:00 - 当前时间
  • up 1 day - 系统运行时间
  • 2 users - 当前登录用户数
  • load average - 负载均衡(1/5/15分钟),数值等于CPU核心数是满载
1
Tasks: 120 total,   2 running, 118 sleeping,   0 stopped,   0 zombie
  • total - 总进程数
  • running - 运行中
  • sleeping - 休眠
  • zombie - 僵尸进程(异常)
1
%Cpu(s):  5.0 us,  2.0 sy,  0.0 ni, 92.0 id,  1.0 wa
  • us - 用户进程占用
  • sy - 内核进程占用
  • id - 空闲(越大越好)
  • wa - 等待IO(高说明磁盘读写慢)
1
MiB Mem: 4096.0 total, 2048.0 free, 1536.0 used, 512.0 cache
  • total - 总内存
  • free - 空闲
  • used - 已用
  • cache - 缓存(可释放)

进程列表字段

字段 含义
PID 进程ID
USER 运行用户
PR 优先级
NI Nice值(负数=高优先级)
VIRT 虚拟内存
RES 实际占用内存
%CPU CPU使用率
%MEM 内存使用率
TIME+ 运行时间
COMMAND 命令名

top快捷键

1
2
3
4
5
6
7
P       # 按CPU排序(默认)
M # 按内存排序
N # 按PID排序
q # 退出
k # 杀死进程(输入PID)
f # 自定义显示字段
1 # 显示每个CPU核心

htop - 进化的top(推荐)

安装

1
2
3
4
5
# Ubuntu/Debian
apt install htop

# CentOS/RHEL
yum install htop

优势

  • 彩色界面,更直观
  • 支持鼠标操作
  • 可以直接杀死进程
  • 显示进程树

基本用法

1
htop

htop快捷键

1
2
3
4
5
6
7
F1 ~ F10  # 功能键
F10 (q) # 退出
F9 (k) # 杀死进程
F6 (>) # 排序
F5 (t) # 树状视图
u # 过滤用户
/ # 搜索进程

ps - 查看进程快照

基本用法

1
2
3
ps                          # 当前终端的进程
ps aux # 所有进程(最常用)
ps -ef # 完整格式

ps aux详解

1
ps aux | grep nginx

字段含义:

  • USER - 运行用户
  • PID - 进程ID
  • %CPU - CPU使用率
  • %MEM - 内存使用率
  • VSZ - 虚拟内存
  • RSS - 实际内存
  • TTY - 终端
  • STAT - 状态
    • S - 休眠
    • R - 运行
    • Z - 僵尸
  • START - 启动时间
  • TIME - 占用CPU时间
  • COMMAND - 命令

常用组合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 查看特定进程
ps aux | grep nginx

# 按CPU排序
ps aux --sort=-%cpu | head

# 按内存排序
ps aux --sort=-%mem | head

# 查看完整命令行
ps auxf

# 查看进程树
ps -ejH

# 查看指定用户进程
ps -u username

实战场景

场景1:CPU占用过高

1
2
3
top                           # 查看哪个进程占用高
ps aux | grep 进程名 # 查看详细信息
kill -9 PID # 结束进程

场景2:内存不足

1
2
free -h                       # 查看内存
htop # 找占用最高的进程

场景3:服务挂了

1
2
ps aux | grep nginx           # 查看进程是否存在
systemctl status nginx # 查看服务状态

场景4:僵尸进程

1
2
3
4
ps aux | grep defunct         # 查找僵尸进程
# 找到父进程PID
ps -ef | grep 子进程PID
kill -9 父进程PID # 结束父进程

系统资源查看

free - 内存信息

1
2
free -h                       # 人类可读格式
free -m # MB单位

df - 磁盘使用

1
2
df -h                         # 人类可读格式
df -h / # 指定目录

uptime - 系统运行时间

1
uptime                        # 显示运行时间和负载

监控脚本示例

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
# 监控CPU和内存使用
while true; do
echo "==== $(date) ===="
free -h
echo ""
df -h
echo ""
ps aux --sort=-%cpu | head -5
echo ""
sleep 60
done

总结

  • top - 实时监控,按P/M排序
  • htop - 更好用,支持鼠标
  • ps aux - 快照查看,|grep 过滤
  • 排查CPU高:top → 找进程 → kill
  • 排查内存:free -hhtop → 找进程
  • 定期检查zombie进程

下一篇:Docker基础(容器入门)。