一、为什么是 2020 年这一份
2020 年这个时间点,Linux 系统监控进入"工具集成化"阶段:
- top 3.x 仍是终端监控的入门首选
- glances(2014 发布,2.x 时代)作为"一屏式综合监控"被广泛接受
- dstat 替代 vmstat 成为综合 I/O / CPU / 网络监控的事实标准
- systemd resource control 全面成熟(CPUQuota / MemoryLimit / IOWeight)
- lsof 仍是排查"端口被谁占用"的首选
- iotop 与 pidstat 形成"按进程看 I/O"的组合
这一篇覆盖 top 字段精读、glances 一屏监控、lsof 端口排查、systemctl 资源限制、五把刀(dstat/pidstat/iotop/vmstat/top)、mount 修复、时区配置——日常性能观测的"七种武器"。
阅读建议:本文是"工具集"性质——日常每个工具都要会用,遇到具体场景再回头查。
二、top 字段精读
top 是 1991 年起的"上古"工具,至今仍是 Linux 性能观测的入门首选。
2.1 启动参数
| |
2.2 字段含义
第一行:当前时间、运行时间、当前用户、CPU 平均负载(1/5/15 分钟)——“1 代表一个核心满了”
第二行:总/运行/休眠/停止/僵尸进程数
第三行:
us—— 用户空间占用 CPU%sy—— 内核空间占用 CPU%ni—— 用户改过优先级的进程占用id—— 空闲wa—— 等待 I/Ohi—— hardware IRQsi—— software IRQst—— steal time(仅与虚拟机相关,被偷走的时间)
第四行:物理内存总量、空闲、已用、内核缓存
第五行:虚拟内存总量、空闲、已用、下一波分配量
进程字段:
| 字段 | 含义 |
|---|---|
PID | 进程 ID |
USER | 进程用户名 |
PR | 动态优先级(内核视角) |
NI | 静态优先级(用户视角,nice 值) |
VIRT | 虚拟内存 |
RES | 物理内存 |
SHR | 共享内存 |
S | 状态:D 不可中断 / I idle / R 运行 / S 睡眠 / T 停止 / Z 僵尸 |
%CPU / %MEM | CPU / 内存占用 |
TIME+ | 累计 CPU 时间 |
COMMAND | 命令 |
2.3 Java VIRT 异常大问题
Java 8+ 用 Metaspace 取代 PermGen,元空间放在 OS 本地内存。每个线程分配一个 arena(64MB),线程一多 VIRT 就巨大。这不是真用了那么多内存——用 pmap 查真实占用。
| |
2.4 常用快捷键
| 键 | 功能 |
|---|---|
shift+m | 按内存排序 |
shift+P | 按 CPU 排序 |
shift+t | 按时间排序 |
shift+n | 按 PID 排序 |
m | 内存显示模式 |
E | 内存总览单位 |
e | 进程内存单位 |
c | 显示完整命令行 |
i | 不显示闲置 |
l | 启动时间和平均负载 |
2.5 用户下的所有进程
| |
三、glances:一屏式综合监控
glances(2014-12 发布 2.0)被称为 htop 的"加强版",提供一屏式综合监控(CPU / 内存 / 磁盘 / 网络 / 进程全维度)。
3.1 安装
| |
3.2 启动
| |
与 htop 的差异:htop 主要聚焦进程列表;glances 把 CPU / 内存 / 磁盘 / 网络 / 进程都堆在一屏里,类似 Windows 任务管理器的"详细信息"视图。
四、lsof:端口与文件排查
lsof(list open files)是"端口被谁占用"排查的首选。
4.1 安装
| |
4.2 常用命令
| |
五、systemctl 资源限制
systemd 的 resource control(cgroup 集成)能精细控制服务资源。
5.1 查看服务列表
| |
5.2 修改 service 后重载
| |
5.3 给服务加资源限制
| |
| |
| |
| 字段 | 含义 |
|---|---|
CPUQuota=20% | 限制最多用 20% 单核 CPU |
MemoryLimit=256M | 限制最大 256M 内存 |
Nice=-10 | 优先级(-20~19,越小越高) |
IOWeight=100 | IO 权重(1~10000) |
5.4 区分 Ubuntu Server 与桌面
| |
六、性能观测"五把刀"
6.1 五把刀概览
| 工具 | 用途 |
|---|---|
top | 监控整体服务器:CPU / 内存 / 磁盘 / 网络综合 |
dstat -d | 查看磁盘每秒读写量(单位 K) |
dstat -r | 查看磁盘随机的读/写 IOPS |
dstat -n | 查看网卡每秒接收/发送量(单位 K) |
pidstat | 统计各进程磁盘 I/O(也可监控 CPU 和内存) |
iotop | 类似 top,但只看 I/O 相关的进程 |
vmstat | 监控 I/O 活跃的进程、内存、CPU |
6.2 实战组合
| |
七、磁盘挂载故障
7.1 重新挂载
| |
7.2 fstab 配错 SSH 连不上
如果 fstab 写错导致机器起不来,SSH 连不上。两种处理:
- 云控制台 VNC 登录 —— 直接进系统改 fstab
- Live CD 启动 —— 挂载原系统盘,编辑
/etc/fstab
预防:写 fstab 之前先
mount -a测试一下,mount -a会按 fstab 把所有文件系统都挂一遍。
八、时区配置
| |
为什么用
timedatectl:systemd 时代timedatectl会自动同步 RTC,且与 NTP 服务联动。直接覆盖/etc/localtime简单粗暴但可能让 systemd 状态错乱。
九、systemctl 启动 Java 微服务
写一个 service 文件让 Java 程序由 systemd 管理:
| |
service 文件模板:
| |
十、卸载旧版 Java
| |
Ubuntu/Debian:
apt remove --purge openjdk-*+apt autoremove。
十一、前置知识 / 下一步
- 想看
iotop/dstat/vmstat详细用法 →man iotop/man dstat/man vmstat - 想看 Prometheus + Grafana 监控栈 → 翻本系列《Linux 监控告警:Prometheus 全家桶》(系列其他文章)
- 想看 cgroup 原理 → 翻独立文章
- 想看 systemd 高级用法(target、socket 激活)→ 翻独立文章
十二、参考资源
man top/man glances/man lsof/man dstat/man pidstat/man iotop/man vmstat- systemd.resource-control 文档:https://www.freedesktop.org/software/systemd/man/systemd.resource-control.html
- Linux Performance Observability(Brendan Gregg):http://www.brendangregg.com/linuxperf.html
BCC/bpftrace工具集:https://github.com/iovisor/bcc
2024 视角:从"工具集"到"观测平台"
2020 年这套"五把刀 + glances + lsof"在 2024 年仍是单机排查的速查。但 2024 主流是 eBPF + 观测平台:
一、eBPF 已经成为 Linux 监控的"基础设施"
2020 → 2024 这 4 年里,eBPF 从"前沿技术"变成"事实标准":
- Cilium(CNI)+ Hubble(eBPF 网络可观测性)已成 K8s 网络主流
- Pixie(New Relic 开源)直接用 eBPF 抓应用 trace
- bpftrace(2020 文章已经提到)从 0.9 升到 0.16+,单行命令就能看内核状态:
1 2 3 4 5# 看哪些进程在 5 秒内读了 /etc/passwd bpftrace -e 'tracepoint:syscalls:sys_enter_openat /arg2->filename == "/etc/passwd"/ { printf("%s [%d]\n", comm, pid); }' # 跟踪 TCP 重传统计 bpftrace -e 'kprobe:tcp_retransmit_skb { @retrans[comm] = count(); }'
二、bpftool + bcc 工具集更全
BCC 工具集(2020 提过)已经 100+ 工具,2024 必装:
1 2 3 4 5 6 7 8 9 10apt install bpfcc-tools linux-headers-$(uname -r) linux-tools-$(uname -r) # 看 CPU 调度延迟 /usr/share/bcc/tools/runqlat # 看 4 层级网络延迟 /usr/share/bcc/tools/netqtop eth0 # 看进程页错误 /usr/share/bcc/tools/sofdsnoop替代了大部分 2020 那篇提到的"五把刀"——
runqlat比pidstat更细,tcpconnect比ss | grep更实时。
三、systemd 资源控制的"v2 时代"
systemd 252+(2022-10)在资源控制上做了大量增强:
- MemoryHigh(软上限,超过触发回收,不杀进程)
- MemoryMax(硬上限,OOM 杀手)
- IOReadBandwidthMax / IOWriteBandwidthMax(IO 带宽)
- CPUWeight(cgroup v2 的 CPU 权重,比 quota 灵活)
- IPAccounting + IPAddressAllow / IPAddressDeny(网络白名单)
| |
四、top 的 2024 替代品
htop 3.x(2022 起的活跃版):彩色 + 鼠标 + 树状折叠。btop(2021 推出,2024 仍是 C++ 写的最"美"的终端监控):CPU/内存/磁盘/网络/温度全屏 sparkline。gtop(Node.js 写的同类)。atop(老牌但 2024 仍是"事后分析"王者):日志记录 + 回放。
| |
五、Prometheus 仍是 2024 事实标准
2020 那篇提到 Prometheus + Grafana 监控栈是"系列其他文章"。到 2024 年:
- Prometheus 2.50+(2024)支持远程写入(Remote Write 2.0)+ Agent Mode(无状态 agent)。
- OpenTelemetry(OTel) 已经是 Metrics / Traces / Logs 统一标准,Prometheus 通过 OTLP 接收 trace。
- VictoriaMetrics / Thanos / Mimir 是 Prometheus 长期存储的三大选择。
- Grafana 10+(2024)原生支持 drill-down link / Explore / Alerting 集成。
六、生产环境监控的"完整架构"
| |
单机时代用 top + glances + iotop 是"万金油";2024 的微服务 / K8s 时代已经必须走这套观测平台。
