第四章 性能与资源治理

先说一句大实话

“服务器变卡了”通常是三件事之一:磁盘满了、内存不够了、某个东西在疯狂写。 这三件事的症状很像(都是“慢”),但处理方式完全不同。第四章的任务就是教你用三条命令把这三件事分开,然后对症下药。不是电脑玄学,都是可以量化的问题。

三条命令分清病因

登上服务器,按顺序敲这三条,基本就能定案:

# 1. 磁盘满了没?(看 Use% 那一列)
df -h

# 2. 内存够不够?(看 available 那一列)
free -h

# 3. 谁在忙?(看平均负载和 CPU 占用前几名)
uptime
top -bn1 | head -20
观察 结论 去哪一节
磁盘 90%+ 磁盘满了,先清磁盘 4.2 / 4.4
available 内存很小 内存不足 4.3
负载很高但 CPU 不满 很可能在等磁盘 IO 4.2
CPU 被某进程占满 单个应用的问题 4.1
都正常但就是慢 网络或应用本身的瓶颈 4.1

拿小本本记住这张表,第四章的所有故事都是从这里开始的。

一个反常识:负载高(uptime 里的 load average)不代表 CPU 不行。负载里排队的还包括“等磁盘”的进程——磁盘满了或者 IO 跟不上,负载一样会飚上去。所以顺序永远是先看磁盘,再看内存,最后看 CPU。

负载数字怎么读:load average 通常是三个数(1 分钟、5 分钟、15 分钟)。三个数差不多 = 稳定负载;1 分钟远高于 15 分钟 = 刚刚炸了一下;15 分钟高于 1 分钟 = 刚刚恢复。这篇信息量和“重启试试”完全不是一个量级。

面板里能看什么

1Panel 在系统 → 监控里提供了平均负载、CPU、内存、磁盘 I/O 和网络 I/O 的历史曲线。几个使用要点:

  • 看历史比看当前有用——“今天比昨天慢了多少”,曲线一目了然;
  • 监控图是空的时候,先确认监控开关开了、时间范围内确实有数据、系统时间和面板服务正常;
  • 监控数据是可以设保留天数和采集间隔的——采得更密、留得更久,占用也更大;
  • 采集间隔越短越占数据库——小机器别设得太激进,1~5 分钟一采足够日常用了。

监控曲线的读法和主机监控的详细功能,见《1Panel 官方文档:功能手册》中的主机监控一节,以官方文档为准;更偏日常运维视角的用法可以翻翻《1Panel 使用指南:从安装到日常运维》。

一条经验:出问题后第一件事是把监控曲线调出来,看故障是从几点开始的。那个时间点往往就是你做了什么操作(装了个应用、跑了备份、被人刷了)的时间,直接缩小排查范围。

一个核心观念:先治理,再加机器

磁盘满了先删日志,而不是先买硬盘;内存不够先治占内存最大的应用,而不是先升级配置。加资源是最贵但最省事的方案——但有些问题(比如某个失控的日志)买多少硬盘都填不满。第四章的每一节,都先给“怎么治”,治不了再说扩容。

这一章的结构跟前几章一样:先给工具,再给方法,最后给完整的排查故事。每节都会给出可直接复制的命令,照着敲就行。

这一章解决四个问题

小节 问题 一句话答案
4.1 面板卡、网站慢 先定位是面板的事还是网站的事
4.2 磁盘满 / inode 占用 找到大文件再删,别盲目清
4.3 内存高 / OOM / 慢查询 抓占用大户,慢查询从日志查
4.4 日志和文件越来越大 治标:切割清理;治本:计划任务

一个常被忽略的前置检查

所有性能问题排查之前,先确认一件事:最近有没有人改过什么。

  • 装了新应用?
  • 升级了什么?
  • 换了配置?

性能问题往往不是“渐渐”发生的,而是“某次操作之后”发生的。先问一句,能省掉大量盲目排查。操作日志在 日志审计 → 操作日志 里按时间查,SSH 登录日志在 登录日志里看(异常登录也可能是变卡的原因——机器被人拿来挖矿了,详见 5.4 节)。

这一章反复出现的概念

概念 一句话解释
负载(load average) 排队等 CPU/IO 的进程数,不等于 CPU 占用率
available 内存 扣掉系统缓存后真正能用的内存
inode 文件的“户口本”,小文件太多会先耗尽 inode
OOM 内存不够,系统挑了个进程杀掉
慢查询 超过阈值的数据库语句,慢日志里能看到
IO 等待 进程卡在读写磁盘上,CPU 干着急
快照 1Panel 系统级的状态备份

一个容易混淆的判断

“面板慢”和“网站慢”是两个问题,尽管它们经常同时出现。 判断方法特别简单:

情况 判断
面板慢、网站也慢 服务器整体性问题(资源)
面板快、网站慢 网站自身或 OpenResty 的问题(见第 2 章)
面板慢、网站快 面板服务或浏览器的问题(见 4.1)

用 SSH 连服务器正常、就是面板慢——这种是最让人迷惑的,其实多半是面板服务的资源占用或浏览器缓存问题,4.1 节细说。反过来也一样:面板飞快但网站龟速,说明服务器底子没问题,查网站和 OpenResty 的配置(第 2 章)。

一条朴素的建议

性能问题的排查,难在“症状会骗人”。磁盘满了偏偏表现成数据库连不上(3.1 节的案例),内存不足偏偏表现成网站 502(2.2 节的案例)。保持一个习惯:每隔一段时间看一眼 df -h 和 free -h,或者在面板监控里看看曲线——很多故障在爆发前几小时就有征兆了。

下一节:从最常见的“面板卡顿、网站慢”开始,一套标准的排查流程。