Featured image of post VPS 进程管理与系统诊断实战:从入门到精通

VPS 进程管理与系统诊断实战:从入门到精通

全面掌握 VPS 进程查看、CPU/内存/磁盘 I/O 监控、日志分析与网络诊断的核心命令,从 ps 到 journalctl 一站式搞定服务器排障

引言

诊断是运维的第一性原理。

当你发现 VPS 变慢、CPU 飙升、内存不足或磁盘 IO 异常时,第一步不是慌忙重启,而是系统地定位问题。本文将带你从零开始掌握 Linux 进程管理与系统诊断的核心技能——不是罗列命令,而是教你建立一套可复用的排障思维。

所有命令均适用于 Ubuntu 24.04 / Debian 12 / AlmaLinux 9,覆盖 CPU、内存、磁盘 I/O、网络、日志五大维度。


一、进程查看:ps 与 pstree 的进阶用法

1.1 ps 核心命令速查

# 查看所有进程的完整信息(最常用)
ps aux

# 按内存使用量排序(找出内存大户)
ps aux --sort=-%mem | head -20

# 按 CPU 使用率排序
ps aux --sort=-%cpu | head -20

# 只看某个用户的进程
ps -u www-data

# 以树状结构显示进程关系(查看父子进程)
ps auxf

# 只显示特定 PID 的进程详情
ps -p 1234 -o pid,ppid,cmd,%cpu,%mem,etime

1.2 关键输出字段解读

字段含义排障提示
%CPU进程占用 CPU 百分比持续 >90% 需重点关注
%MEM物理内存占用百分比警惕内存泄漏
VSZ虚拟内存大小(KB)过大可能预示问题
RSS实际物理内存(KB)比 VSZ 更真实
STAT进程状态(见下方)D=不可中断睡眠,Z=僵尸进程
etime进程运行时长判断是否为异常长期进程

1.3 STAT 状态速查

R  → 运行中(Running)
S  → 可中断睡眠(等待事件)
D  → 不可中断睡眠(通常在等磁盘 I/O)⚠️
Z  → 僵尸进程(已死但父进程未回收)⚠️
T  → 已停止(Stopped)
X  → 死亡(Dead)

当发现大量 D 状态进程时,说明系统存在严重的磁盘 I/O 瓶颈;Z 僵尸进程需要清理父进程。

1.4 pstree:看清进程血缘

# 查看完整进程树
pstree -p

# 只看某个进程的子孙
pstree -p 1234

# 显示进程启动命令
pstree -apul

二、实时监控:top 与 htop

2.1 top 命令详解

# 启动 top(默认每 3 秒刷新)
top

# 指定刷新间隔(秒)
top -d 1

# 只显示某个用户的进程
top -u www-data

# 按内存排序(进入后按 M)
top

# 按 CPU 排序(进入后按 P)
top

# 直接输出一次快照(非交互)
top -b -n 1

top 界面关键区域:

  • 第一行:系统运行时间、登录数、负载平均值(1/5/15 分钟)
  • 第二行:进程总数、运行/睡眠/僵尸进程数
  • 第三行:CPU 使用率(us=用户态,sy=内核态,id=空闲,wa=IO等待)
  • 第四行:内存使用(total/free/buff/cache)
  • 第五行:交换分区(swap)

负载均值解读:

  • 负载 < CPU 核数:系统健康
  • 负载 ≈ CPU 核数:适中
  • 负载 > CPU 核数 × 2:严重过载,需立即排查

2.2 htop:更现代的交互界面

# 安装(Debian/Ubuntu)
sudo apt install htop

# 启动 htop
htop

# 按 F2 进入设置,配置自定义列
# 按 F3 搜索进程
# 按 F9 发送信号(终止/挂起等)
# 按 F10 退出

htop 相比 top 的优势:

  • 彩色显示,一目了然
  • 支持鼠标操作
  • 可直接杀死进程(F9)
  • 更直观的磁盘和网络 IO 条形图
  • 可按线程查看

三、磁盘 I/O 分析:iotop 与 iostat

3.1 iotop:找出 IO 大户

# 安装
sudo apt install iotop

# 实时监控(需要 root)
sudo iotop

# 只展示有 IO 行为的进程
sudo iotop -o

# 一次性快照
sudo iotop -b -n 1

关键字段:

  • DISK READ/WRITE:当前读写速度
  • IO %:IO 占用百分比
  • SWAPIN / OUTIN:交换区 IO 比例

3.2 iostat:查看设备级 IO 统计

# 安装
sudo apt install sysstat

# 每秒刷新一次,共 5 次
iostat -xz 1 5

# 只看磁盘设备(不显示 CPU)
iostat -dx 1 5

# 查看历史 IO 数据(如果启用)
 sar -d -p

关键指标解读:

  • await:平均每次 IO 请求的等待时间(ms),>20ms 需关注
  • %util:设备利用率,接近 100% 说明磁盘已成瓶颈
  • r_await/w_await:读/写平均响应时间
  • rkB/s wkB/s:读写吞吐量

四、内存深度分析

4.1 free 命令

# 人性化显示
free -h

# 以 MB 为单位
free -m

输出解读:

              total        used        free      shared  buff/cache   available
Mem:           7.6G        2.1G        3.2G        256M        2.3G        5.0G
Swap:          2.0G        0.0B        2.0G

关键点: available 比 free 更有参考价值——它表示实际应用可用内存(包含可回收的 buff/cache)。

4.2 深入内存:smem 与 /proc/meminfo

# 安装 smem(更准确的内存统计)
sudo apt install smem

# 按 RSS 排序(真正占用的物理内存)
smem -t -k

# 按 PSS 排序(考虑共享库后的公平分配)
smem -t -k -p

# 查看内核内存细节
cat /proc/meminfo | head -30

# 查看内存数值统计(非人性华)
cat /proc/meminfo | grep -E "MemTotal|MemFree|MemAvailable|Buffers|Cached|SwapTotal|SwapFree"

4.3 检测内存泄漏

# 跟踪某个进程的内存变化
watch -n 1 'ps aux --sort=-%mem | head -10'

# 查看进程的详细内存映射
cat /proc/<PID>/smaps | head -50

# 强制释放缓存(只释放干净页,不影响运行)
sudo sync; echo 1 > /proc/sys/vm/drop_caches

五、CPU 性能分析

5.1 mpstat:多核 CPU 监控

# 安装
sudo apt install sysstat

# 每秒刷新,看各核使用情况
mpstat -P ALL 1 5

# 只看总体
mpstat 1 3

解读: 如果某核心 usr 高而其他空闲,可能是单线程瓶颈;如果所有核心都满载,考虑横向扩容。

5.2 vmstat:虚拟内存统计

# 每秒刷新,观察系统整体
vmstat 1 10

# 只看汇总(不刷新)
vmstat -s

关键字段:

  • si/so:换入/换出内存量,持续非零说明内存不足
  • bi bo:块设备读写,持续高位说明 IO 压力大
  • us sy id wa st:CPU 各状态占比

5.3 pidstat:进程级 CPU 统计

# 安装
sudo apt install sysstat

# 每秒统计每个进程的 CPU 使用
pidstat -u 1 5

# 只看特定 PID
pidstat -u 1 5 -p 1234

# 查看上下文切换(高切换率影响性能)
pidstat -r 1 5

六、网络诊断工具

6.1 连接与端口

# 查看所有网络连接(含 PID)
ss -tulnap

# 只看 TCP 连接
ss -tna

# 监听端口列表
ss -tlnp

# 替代 netstat(已弃用,推荐用 ss)
netstat -tulnap  # 仍可用但不推荐

连接状态速查:

  • ESTAB:正常连接
  • TIME_WAIT:等待关闭的连接(大量存在影响新连接)
  • CLOSE_WAIT:对端已关闭但未本地关闭 ⚠️
  • SYN_RECV:大量出现可能遭 SYN Flood 攻击 ⚠️
  • LISTEN:正常监听

6.2 网络流量监控

# 实时查看网卡流量
iftop

# 安装
sudo apt install iftop

# 查看每个连接的流量分布
nload eth0

# 带宽统计
sudo apt install bandwhich
bandwhich

6.3 链路质量检测

# 测试到目标的路由
traceroute example.com

# 快速路由跟踪(不需要 root)
mtr example.com

# 测试 DNS 解析
dig example.com +trace

# 测试 DNS 解析速度
time dig example.com

七、日志分析:journalctl 完全指南

7.1 基础查询

# 查看系统启动以来的所有日志
journalctl

# 只看本次启动的日志
journalctl -b

# 查看上一次启动的日志
journalctl -b -1

# 实时跟随日志(类似 tail -f)
journalctl -f

# 查看最近 100 行
journalctl -n 100

# 结合 pager 向下翻页
journalctl | less

7.2 按服务过滤

# 查看 nginx 相关日志
journalctl -u nginx

# 查看多个服务
journalctl -u nginx -u postgresql

# 查看某个服务的最新日志
journalctl -u nginx --since "10 minutes ago"

# 查看错误和警告
journalctl -u nginx -p err..alert

7.3 高级过滤技巧

# 按时间范围
journalctl --since "2026-08-29 10:00:00" --until "2026-08-29 12:00:00"

# 按优先级(0=紧急 7=调试)
journalctl -p err
journalctl -p crit
journalctl -p warning

# 查看特定内核消息
journalctl -k

# 查看特定 PID 进程日志
journalctl _PID=1234

# 查看特定程序日志
journalctl _COMM=nginx

# 混合过滤
journalctl -u nginx -p err --since "1 hour ago"

7.4 日志轮转与持久化

# 查看日志占用空间
journalctl --disk-usage

# 设置最大保留时间(默认 4 个月)
sudo journalctl --vacuum-time=7d

# 限制日志大小(最多 100MB)
sudo journalctl --vacuum-size=100M

# 开启日志持久化到磁盘(默认已开启)
# 日志文件位置:/var/log/journal/

八、综合排障流程

当 VPS 出现问题时,建议按以下顺序排查:

┌─────────────────────────────────────────────────────┐
│  1. 快速概览:uptime / top(确认负载级别)            │
│  2. CPU 分析:top -c 或 mpstat(定位 CPU 瓶颈)      │
│  3. 内存分析:free -h + smem(判断是否内存不足)      │
│  4. 磁盘 IO:iotop -o + iostat -xz(找出 IO 大户)  │
│  5. 网络检查:ss -tna + mtr(连接与链路质量)         │
│  6. 日志追溯:journalctl -u <service> -p err        │
│  7. 内核信息:dmesg | tail(硬件/驱动级别错误)       │
└─────────────────────────────────────────────────────┘

实战示例:CPU 飙升排查

# Step 1: 确认负载
uptime

# Step 2: 找到 CPU 高的进程
top -bn1 | head -20

# Step 3: 深入分析该进程
pidstat -u 1 3 -p <PID>

# Step 4: 查看进程详细信息
ps -p <PID> -o pid,ppid,cmd,%cpu,%mem,stat,etime

# Step 5: 查看进程打开的文件
lsof -p <PID> | head -20

# Step 6: 如果是 Web 服务,检查相关日志
journalctl -u nginx -p err --since "30 minutes ago"

实战示例:内存不足排查

# Step 1: 确认内存状况
free -h
vmstat -s

# Step 2: 找出内存大户
ps aux --sort=-%mem | head -15
smem -t -k

# Step 3: 检查是否有交换使用
cat /proc/swaps
swapon --show

# Step 4: 查看系统日志中是否有 OOM Killer 记录
journalctl -k | grep -i "oom\|out of memory"

# Step 5: 如有必要,临时缓解
sudo systemctl restart <heavy-service>

九、性能基线:建立你的 VPS 健康画像

排障的前提是了解"正常"。建议每天记录一次基线数据:

# 一键基线快照脚本
#!/bin/bash
echo "=== System Baseline $(date) ==="
echo "--- Uptime ---"
uptime
echo "--- Memory ---"
free -h
echo "--- CPU Load ---"
cat /proc/loadavg
echo "--- IO Wait ---"
vmstat 1 3 | tail -1
echo "--- Top Memory Processes ---"
ps aux --sort=-%mem | head -6
echo "--- Top CPU Processes ---"
ps aux --sort=-%cpu | head -6
echo "--- Disk Usage ---"
df -h
echo "--- Network Connections ---"
ss -s

保存为 ~/scripts/baseline.sh,每天通过 cron 执行并记录到文件,异常时对比基线快速定位偏差。


总结

VPS 排障不是凭感觉猜,而是用数据说话。掌握这套工具链后,你可以在 5 分钟内定位绝大多数性能问题:

症状优先检查工具
系统变慢top → vmstat → mpstat
磁盘满df -h → du -sh /*
内存不足free -h → smem → dmesg | grep oom
IO 瓶颈iotop -o → iostat -xz
网络连接异常ss -tna → mtr
服务异常journalctl -u <service> → dmesg

持续练习是唯一捷径。 建议你每天花 5 分钟运行 top 和 free -h,建立对服务器日常状态的直觉。当异常发生时,这种直觉会帮你更快定位问题。

📺 看视频版教程 → DuckDB Lab YouTube

Subscribe for more DuckDB & AI automation tutorials