作为开发者,你不需要成为运维专家,但需要能诊断基本问题:服务器为什么响应慢?网络是不是有问题?磁盘快满了吗?日志里有没有异常模式?命令行工具的价值是让你在 SSH 会话里先看事实,再决定要不要升级给专业运维或平台团队。
1. 系统运维的日常
服务器出问题时的第一反应不应该是”重启试试”,而是先诊断。常见的四类问题:
- CPU/内存/IO 瓶颈 → 服务器响应慢、请求超时
- 网络带宽/延迟/丢包 → 连接不稳定、下载慢
- 日志异常 → 错误模式、频率突增
- 磁盘空间不足 → 什么占用了空间
这些诊断不需要图形界面,也不需要运维平台。几个命令行工具就能在 SSH 会话里完成快速排查。
2. glances — 系统资源全景监控
glances 是 top 的现代化替代,一个界面看所有:CPU、内存、网络、磁盘 I/O、进程、传感器温度。
glances # 交互模式(h 查看帮助)
glances -w # Web 模式(浏览器访问 :61208)
glances --disable-webui # 纯终端模式,无 Web UI颜色编码直观反映状态:绿色正常、黄色警告、红色危险。
实际场景:SSH 到服务器后先跑 glances,10 秒内了解系统整体健康状况。如果看到 CPU 红色、内存黄色,就知道需要进一步定位具体进程。
3. htop — 进程管理
htop 是 top 的增强版,提供交互式进程管理。支持彩色输出和鼠标操作。
htop # 打开核心操作(在 htop 界面内):
| 快捷键 | 功能 |
|---|---|
F6 | 选择排序方式(CPU/内存/时间) |
F9 | 杀进程(选择信号) |
F5 | 树形视图(查看进程父子关系) |
/ | 搜索进程 |
u | 按用户过滤 |
F10 / q | 退出 |
实际场景:glances 发现 CPU 占用高 → htop 按 CPU 排序(F6)→ 定位到具体进程 → 如果是异常进程,F9 发送信号终止。
4. bmon — 网络带宽监控
bmon 提供实时网络流量监控,比 iftop 更直观,TUI 里自带流量图表。
bmon # 显示所有网卡的实时带宽
bmon -p eth0 # 只看指定网卡在界面里选择网卡后,可以看到 RX(接收)/ TX(发送)速率和历史曲线。流量突增或骤降的时机一目了然,帮助判断是应用层问题还是网络层问题。
实际场景:服务器响应慢,glances 显示网络占用高 → bmon 确认哪个网卡饱和 → 结合 htop 定位占用带宽的进程。
5. ncdu — 磁盘空间分析
ncdu 是 du 的交互式替代,快速找出什么占用了磁盘空间。
ncdu / # 扫描根目录
ncdu ~ # 扫描家目录
ncdu /var/log # 扫描指定目录在 ncdu 界面内:
| 快捷键 | 功能 |
|---|---|
| 方向键 | 导航 |
Enter | 进入子目录 |
d | 删除选中项(有确认) |
n / s / C | 按名称/大小/条目数排序 |
i | 显示文件信息 |
q | 退出 |
实际场景:收到”磁盘空间不足”告警 → ncdu / 扫描根目录 → 发现 /var/log 占了 80% → 进入 /var/log 定位大日志文件 → 清理或归档。
6. lnav — 日志查看器
lnav 是 tail -f 的增强版,支持结构化日志浏览和 SQL 查询。
lnav /var/log/ # 浏览整个日志目录
lnav access.log error.log # 多个文件合并时间线查看
lnav -t /var/log/app.log # 实时追踪模式核心特性:
- 自动识别格式:syslog、nginx、Apache、JSON 等
- 时间轴合并:多个日志文件按时间线统一排序
- SQL 查询:在界面内按
;输入 SQL(需要 SQLite 支持)
-- 在 lnav 的 ; 提示符里
SELECT count(*), log_level FROM logline GROUP BY log_level;
SELECT * FROM logline WHERE log_body LIKE '%error%' LIMIT 20;实际场景:排查生产问题,同时查看 nginx + 应用 + 数据库日志。lnav 把它们合并到一条时间线上,错误之间的因果关系一目了然。
7. mosh — 移动友好的 SSH
传统 SSH 在移动网络下有两个痛点:网络切换会断开连接,高延迟时输入体验差。mosh 解决了这两个问题。
mosh user@host # 连接方式与 SSH 相同
mosh --port 60001 user@host # 指定 UDP 端口
mosh --ssh="ssh -p 2222" user@host # SSH 走非标准端口核心特性:
- 本地回显:你打的字立即显示,不需要等服务器确认,高延迟下依然流畅
- 连接漫游:切换 WiFi/移动网络后连接不中断
- UDP 传输:基于 UDP,对丢包和延迟的容忍度更高
mosh vs SSH
| 特性 | SSH | mosh |
|---|---|---|
| 传输协议 | TCP | UDP |
| 网络切换 | 断开,需重连 | 自动恢复 |
| 高延迟输入 | 等待服务器回显 | 本地回显,即时响应 |
| 服务器要求 | 仅需 sshd | 需安装 mosh-server |
| 端口 | TCP 22(默认) | UDP 60000-61000(默认) |
什么时候用 mosh:移动网络环境、不稳定的 WiFi 连接、跨国 SSH(高延迟)。服务器端需要安装 mosh-server 并开放对应 UDP 端口。
8. 工具速查
| 工具 | 替代 | 核心功能 | 典型场景 |
|---|---|---|---|
glances | top | 系统资源全景监控 | SSH 后快速了解系统状态 |
htop | top | 交互式进程管理 | 定位 CPU/内存占用最高的进程 |
bmon | iftop | 网络带宽实时监控 | 检查网卡是否饱和 |
ncdu | du | 磁盘空间交互式分析 | 找出什么占用了磁盘 |
lnav | tail -f | 结构化日志浏览 + SQL | 多日志文件合并排查 |
mosh | ssh | 稳定远程连接 | 移动网络/高延迟环境 |
组合使用示例:glances 发现 CPU 高 → htop 定位进程 → lnav 查看该进程日志 → 找到根因。
9. 使用原则
系统排查不要从“重启试试”开始,而要从证据开始。
先全局,再局部:glances 看整体资源,htop 定位进程,lnav 追日志,ncdu 找磁盘占用。
不要急着 kill 或删文件:先确认进程职责、文件来源和是否有备份。生产环境里“清掉大文件”可能比磁盘满更危险。
日志按时间线看:多服务问题要把 nginx、应用、数据库、系统日志放在同一时间轴里看。
远程会话要可恢复:长任务和排障会话优先放在 tmux/mosh 等可恢复环境里。
记录排查动作:关键命令、时间点、异常指标和处理结果要留下记录,方便复盘和交接。