2核2G甚至1核1G云服务器可运行无数据库的PHP环境,关键在于优化PHP-FPM(改ondemand模式、调低max_children、禁用非必要扩展、启用opcache)、用JSON文件替代数据库、精简Nginx配置(限制body大小、关闭fastcgi缓冲、清理冗余conf),并预留至少150MB内存余量。

直接上结论:2核2G甚至1核1G的云服务器,完全能跑起一个不带数据库、纯文件存储的PHP独立环境,关键不是“能不能装”,而是“怎么让PHP少占内存、少开进程、少读磁盘”。
为什么 PHP-FPM 默认配置在低配机上会爆内存
PHP-FPM 启动后默认用 pm = dynamic 模式,会预启一堆子进程(pm.start_servers 通常设为 4~5),每个进程常驻内存 20~40MB。1核1G机器光是 PHP-FPM 就可能吃掉 150MB+,再加 Nginx 和系统缓存,swap 都开始抖了。
实操建议:
- 把
pm改成ondemand:只在有请求时才 fork 进程,空闲时自动回收 - 调低
pm.max_children到 3~5(别超可用内存 ÷ 30MB) - 禁用所有非必要扩展:比如
php-sqlite3、php-xml、php-xsl,留fileinfo、mbstring、json足够 - 确认
opcache.enable=1且opcache.memory_consumption=64,避免重复编译脚本
不装 MySQL/MariaDB 的真实可行方案
很多轻量工具(比如 NAS_project、自建文件管理页、静态博客生成器后端)根本不需要数据库。硬上 MySQL 不仅多占 100MB+ 内存,还会因 mysqld 后台轮询拖慢响应。
立即学习“PHP免费学习笔记(深入)”;
替代思路:
- 用
file_get_contents()+json_decode()直接读写 JSON 文件做简单状态存储(适合用户数 - 把索引信息存在
uploads/.index.json这类路径下,配合flock()做轻量写锁 - 彻底放弃“用户登录态持久化”,改用
session_start()+session_set_cookie_params(['samesite' => 'Strict']),靠 PHP 自带 session 文件管理(注意清理/var/lib/php/sessions)
Nginx 配置里最容易被忽略的三个减负点
很多人只改 PHP-FPM,却让 Nginx 自己成了内存黑洞。
必须检查并调整:
-
client_max_body_size:如果不用上传大文件,设成16M即可,避免 Nginx 缓存过大的 POST body -
fastcgi_buffering off:关掉 FastCGI 缓冲,让 PHP 输出流式返回,减少 Nginx 内存暂存压力(尤其对长耗时脚本有效) - 删掉所有
include /etc/nginx/conf.d/*.conf里没用的配置片段——有些一键包会塞进 geoip、lua、webdav 等模块配置,实际根本没启用,但 Nginx 启动时仍会加载解析
真正的瓶颈往往不在“装什么”,而在“留多少余量给突发请求”。哪怕你只跑一个 api/server.php,也要给系统留出至少 150MB 空闲内存——否则 fork() 失败、malloc() 返回 NULL、file_put_contents() 写一半就中断,这些故障现象背后都是同一根内存绷得太紧。



















