一台 1.6G 内存的服务器,是怎么被 MySQL 编译拖死的

500 字 3 分钟

一台 1.6G 内存的服务器,是怎么被 MySQL 编译拖死的

晚上八点多,服务器失联了。ping 通、22 端口能连、但 sshd 不吐 banner,网页也打不开。这篇把过程和解法记下来。

起因#

在一台 2 核 1.6G 内存 的云主机上装 LNMP。面板装好了,Nginx 编完了,轮到 MySQL 5.7。

面板弹了提示:

编译安装 MySQL-5.7 至少需要 1560MB 空闲内存才可以进行安装

当时空闲只有 950MB(另一头 PHP 还在编译)。面板也给了办法:跳过一次检查可以强制装。

我跳过了。

发生了什么#

编译本身没问题,问题在内存。MySQL 编译到中段,同时存在:

  • cmake 的配置进程
  • 多个 cc1plus 编译单元
  • 面板自己的 Python 进程
  • Nginx、PHP-FPM

1.6G 物理内存 + 2G swap,很快开始疯狂换页。表现出来就是:

ping → 通(内核还活着)
tcp 22 → 能建立连接
sshd banner → 超时(进程调度不上)
http 80 → 超时(nginx 同样饿死)

这种状态在整个系统层面看是”活着但没法干活”,远程什么都做不了,只能从云控制台强制重启。

教训#

1. 面板的内存检查不是摆设。 它算的是峰值需求,不是常态需求。

2. swap 不是内存。 换页带来的不是”慢一点”,而是”不可用”——因为所有进程(包括 sshd)都在等磁盘。

3. 小内存机器的正确姿势:

Terminal window
# 别编译,用发行版的包
sudo apt install -y mariadb-server

Ubuntu 22.04 自带的 MariaDB 10.6,安装 1 分钟,常驻内存 200M 左右,和 MySQL 5.7 协议兼容,WordPress 直接能用。

现在的组合#

组件来源内存占用
Nginx 1.22面板编译~40M
PHP 8.1面板编译~120M
MariaDB 10.6apt~200M
静态博客Nginx 直接读文件0

总占用 500M 出头,1.6G 的机器还有余量。

一句话总结#

在内存不够的机器上,“编译安装”不是慢,是危险。 能装二进制包就别编译,能静态化就别跑后端。

余笙

2026-10-21 · 余笙听闻

文章目录

WELCOME欢迎来到余笙听闻

很高兴在这里遇见你。