1核2G轻量服务器跑宝塔怎么调优?防卡死参数备忘

核心导读:记录一台1核2G轻量云服务器跑宝塔面板时,MySQL频繁被杀、PHP偶发502的排查与优化过程,附带各内存规格的平稳运行参数参考。

最近在维护一台 2G 内存的轻量云服务器,上面挂了两个小网站。前阵子发现站点偶尔会出现 502 Bad Gateway,登录面板一看,MySQL 居然悄无声息地挂了。

排查了一下 /var/log/messages,典型的小机器物理内存耗尽,Linux 内核的 OOM killer 顺手把最吃内存的 mysqld 给干掉了。趁着这次排查,把这套跑得相对稳定的参数调整记录下来,方便以后自己开新机器备忘,也给配置相仿的朋友留个参考。

1. 必须先给小机器挂上 Swap

很多人租了轻量服务器,装完系统默认是没有启用虚拟内存(Swap)的。1G 或 2G 内存的机器,一旦后台有计划任务、或者偶尔来几只蜘蛛同时抓取,内存峰值瞬间就顶满了。

没有 Swap 作为缓冲,内核只能强杀进程保命。解决 OOM 最有效的第一步就是开 Swap:

在宝塔面板的「软件商店」里搜「Linux 工具箱」,里面可以直接添加 Swap。2G 内存的机器,建议直接分 2048MB(即 2G)的 Swap;如果是 1G 机器,也分配 1G 到 2G。这块空间主要是作为防击穿的安全气囊,避免内存短时间内被突发请求挤爆。

2. PHP 与 MySQL 核心参数改动

小服务器卡死,绝大部分时候是 PHP 子进程开多了,或者 MySQL 的缓冲池给得太大。宝塔默认的推荐方案对 2G 机器来说还是略显激进。

PHP-FPM 配置调整

打开对应 PHP 版本的设置面板(建议 7.4 或 8.0+),找到「性能调整」:
  • 运行模式:选择 ondemand(按需分配)或者控制严格的 dynamic。如果站点访问量零散,ondemand 非常省内存,没有请求时子进程会自动释放。
  • max_children(最大子进程数):2G 内存机器通常跑 2~3 个站点,建议设置在 10 到 15 之间。一个 PHP 进程大概占 25~45MB 内存,如果设成 30,几个爬虫一来,光 PHP 就能吃掉 1G 以上内存。
  • start_servers:建议设为 2 到 3。
  • min_spare_servers:设为 2。
  • max_spare_servers:设为 5。

MySQL 配置微调

进入 MySQL 设置里的「性能调整」:
  • 宝塔自带的内存优化方案里,2G 机器直接选「1-2G 内存方案」即可。
  • 重点确认 innodb_buffer_pool_size,建议不要超过 256MB(如果是 1G 机器,设成 64MB 或 128MB 即可)。很多博客站数据量不大,没必要给数据库留太大的缓存池。

3. 不同内存规格参数参考

下面是我在实际折腾不同配置服务器时,测试出来相对不容易出事的参数区间:

服务器内存Swap 建议大小PHP max_childrenInnoDB Buffer Pool推荐 PHP 模式
1 核 1G2048 MB5 - 864 MB - 128 MBondemand
1 核 2G2048 MB10 - 15128 MB - 256 MBdynamic / ondemand
2 核 4G4096 MB25 - 40512 MB - 1024 MBdynamic

这些参数的思路很明确:宁愿让瞬时高并发排队稍微慢一点,也绝不能让物理内存爆掉导致服务挂掉。

4. 为什么改完参数后还是会被打崩?

把上面的配置改完之后,机器在日常情况下基本不会再莫名其妙死机了。但如果你的小站开了评论,或者用的是 WordPress 这类常见程序,经常还是会遇到突然卡顿甚至假死的情况。

翻看 Nginx 的访问日志就会发现,很多时候根本不是正常访客把站点跑崩的,而是境外的扫描脚本在批量撞后台(比如狂刷 /wp-login.phpxmlrpc.php),或者各种恶意的野爬虫在疯狂抓取动态页面。对 1核2G 的小机器来说,哪怕 PHP 进程限制在 10 个,这种并发打过来,也会瞬间把 CPU 和 PHP 队列占满,正常用户自然就打不开了。

光靠改底层配置,解决不了应用层的恶意消耗,最有效的办法还是在入口处直接把它们拦下来。宝塔自带的「Nginx 防火墙」插件在这方面确实省心,可以直接过滤掉很多恶意 User-Agent、限制单 IP 并发,以及拦截针对 WordPress 常见入口的高频暴破。

不过大家也知道,宝塔官方的专业版和防火墙插件按年续费算下来是一笔不小的开支。如果打算长期用、又不想每年折腾续费的,我们站现在提供了正版终身授权方案(一次买断、支持后台随时免费换绑服务器 IP)。价格比官方年付划算很多,有长线建站需求的朋友可以去首页了解一下。

小机器建站讲究的就是精打细算,改好限制参数加上 Swap,再配合入口处的请求过滤,1核2G 稳稳当当跑几个日常博客完全绰绰有余。

常见问题与解答 (FAQ)

Q 改完这些参数后需要重启服务器吗?

不需要重启整台服务器,只需要在宝塔后台分别重载(Reload)或重启(Restart)对应的 PHP 和 MySQL 服务即可生效。

Q 开启 Swap 虚拟内存会不会拖慢机器甚至磨损磁盘?

现在的云服务器基本都是 SSD,正常充当内存缓冲的读写量完全在磁盘寿命承受范围内;平时只要物理内存够用,系统并不会频繁读写 Swap,它主要起应急防崩的作用。

返回运维知识库