作为开发者,你不需要成为运维专家,但需要能诊断基本问题:服务器为什么响应慢?网络是不是有问题?磁盘快满了吗?日志里有没有异常模式?命令行工具的价值是让你在 SSH 会话里先看事实,再决定要不要升级给专业运维或平台团队。

1. 系统运维的日常

服务器出问题时的第一反应不应该是”重启试试”,而是先诊断。常见的四类问题:

  • CPU/内存/IO 瓶颈 → 服务器响应慢、请求超时
  • 网络带宽/延迟/丢包 → 连接不稳定、下载慢
  • 日志异常 → 错误模式、频率突增
  • 磁盘空间不足 → 什么占用了空间

这些诊断不需要图形界面,也不需要运维平台。几个命令行工具就能在 SSH 会话里完成快速排查。

2. glances — 系统资源全景监控

glancestop 的现代化替代,一个界面看所有:CPU、内存、网络、磁盘 I/O、进程、传感器温度。

glances                        # 交互模式(h 查看帮助)
glances -w                     # Web 模式(浏览器访问 :61208)
glances --disable-webui        # 纯终端模式,无 Web UI

颜色编码直观反映状态:绿色正常、黄色警告、红色危险。

实际场景:SSH 到服务器后先跑 glances,10 秒内了解系统整体健康状况。如果看到 CPU 红色、内存黄色,就知道需要进一步定位具体进程。

3. htop — 进程管理

htoptop 的增强版,提供交互式进程管理。支持彩色输出和鼠标操作。

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 — 磁盘空间分析

ncdudu 的交互式替代,快速找出什么占用了磁盘空间。

ncdu /                         # 扫描根目录
ncdu ~                         # 扫描家目录
ncdu /var/log                  # 扫描指定目录

在 ncdu 界面内:

快捷键功能
方向键导航
Enter进入子目录
d删除选中项(有确认)
n / s / C按名称/大小/条目数排序
i显示文件信息
q退出

实际场景:收到”磁盘空间不足”告警 → ncdu / 扫描根目录 → 发现 /var/log 占了 80% → 进入 /var/log 定位大日志文件 → 清理或归档。

6. lnav — 日志查看器

lnavtail -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

特性SSHmosh
传输协议TCPUDP
网络切换断开,需重连自动恢复
高延迟输入等待服务器回显本地回显,即时响应
服务器要求仅需 sshd需安装 mosh-server
端口TCP 22(默认)UDP 60000-61000(默认)

什么时候用 mosh:移动网络环境、不稳定的 WiFi 连接、跨国 SSH(高延迟)。服务器端需要安装 mosh-server 并开放对应 UDP 端口。

8. 工具速查

工具替代核心功能典型场景
glancestop系统资源全景监控SSH 后快速了解系统状态
htoptop交互式进程管理定位 CPU/内存占用最高的进程
bmoniftop网络带宽实时监控检查网卡是否饱和
ncdudu磁盘空间交互式分析找出什么占用了磁盘
lnavtail -f结构化日志浏览 + SQL多日志文件合并排查
moshssh稳定远程连接移动网络/高延迟环境

组合使用示例:glances 发现 CPU 高 → htop 定位进程 → lnav 查看该进程日志 → 找到根因。

9. 使用原则

系统排查不要从“重启试试”开始,而要从证据开始。

先全局,再局部glances 看整体资源,htop 定位进程,lnav 追日志,ncdu 找磁盘占用。

不要急着 kill 或删文件:先确认进程职责、文件来源和是否有备份。生产环境里“清掉大文件”可能比磁盘满更危险。

日志按时间线看:多服务问题要把 nginx、应用、数据库、系统日志放在同一时间轴里看。

远程会话要可恢复:长任务和排障会话优先放在 tmux/mosh 等可恢复环境里。

记录排查动作:关键命令、时间点、异常指标和处理结果要留下记录,方便复盘和交接。

延伸阅读