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. 小内存机器的正确姿势:
# 别编译,用发行版的包sudo apt install -y mariadb-serverUbuntu 22.04 自带的 MariaDB 10.6,安装 1 分钟,常驻内存 200M 左右,和 MySQL 5.7 协议兼容,WordPress 直接能用。
现在的组合
| 组件 | 来源 | 内存占用 |
|---|---|---|
| Nginx 1.22 | 面板编译 | ~40M |
| PHP 8.1 | 面板编译 | ~120M |
| MariaDB 10.6 | apt | ~200M |
| 静态博客 | Nginx 直接读文件 | 0 |
总占用 500M 出头,1.6G 的机器还有余量。
一句话总结
在内存不够的机器上,“编译安装”不是慢,是危险。 能装二进制包就别编译,能静态化就别跑后端。
余笙
2026-10-21 · 余笙听闻

