在 1 核 1G(1 vCPU, 1GB RAM)的服务器上同时运行两个 WordPress 站点属于极限配置。默认安装极易导致内存溢出(OOM)、CPU 满载或响应极慢。
要成功运行,必须从操作系统内核、Web 服务器、数据库、PHP 环境以及 WordPress 自身四个层面进行深度裁剪和优化。以下是具体的优化方案:
1. 核心资源限制与系统级优化
这是最关键的一步,必须防止 MySQL 或 PHP 进程耗尽仅有的 1GB 内存。
-
Swap 交换空间(必做)
- 原因:物理内存仅 1GB,一旦峰值超过,系统会直接杀死进程。Swap 是最后的防线。
- 操作:创建至少 2GB 的 Swap 文件。
sudo fallocate -l 2G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 永久生效 echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab - 调优:降低
vm.swappiness避免过度使用 Swap 导致卡顿,但在 1G 内存下建议保持默认或微调至 60。
-
禁用不必要的服务
- 关闭防火墙以外的所有后台服务(如蓝牙、CUPS 打印服务、Docker 等)。
- 如果是 Ubuntu/Debian,使用
systemctl disable禁用非核心服务。
2. Web 服务器层优化 (Nginx/Apache)
建议使用 Nginx 搭配 PHP-FPM,因为 Nginx 处理并发和静态资源的效率远高于 Apache,且内存占用更低。
-
PHP-FPM 进程数限制(至关重要)
- 默认配置通常允许过多进程,1G 内存跑不动。
- 修改
/etc/php/8.x/fpm/pool.d/www.conf:pm = dynamic(动态管理)pm.max_children = 4(最大子进程数,设为 4-5 个,每个 PHP 进程约需 100-150MB)pm.start_servers = 2pm.min_spare_servers = 1pm.max_spare_servers = 3
- 注意:如果开启缓存插件,可适当调低;如果主要跑博客,4 个足够。
-
启用静态资源缓存
- 利用 Nginx 缓存静态文件(CSS, JS, 图片),减少 PHP 调用。
- 配置
fastcgi_cache或直接使用expires指令。
-
Gzip/Brotli 压缩
- 开启 Gzip 或 Brotli 压缩,减小传输体积,降低带宽压力。
3. 数据库层优化 (MySQL/MariaDB)
MySQL 是内存大户,默认配置在 1G 机器上几乎必挂。
-
调整
my.cnf(或mysqld.cnf)- 找到
[mysqld]部分,强制限制关键参数:[mysqld] key_buffer_size = 16M # 索引缓冲区 max_allowed_packet = 16M # 最大包大小 thread_stack = 192K # 线程栈 thread_cache_size = 8 # 线程缓存
核心内存限制
innodb_buffer_pool_size = 128M # 最重要!限制为总内存的 10%-15% (1G 机器不要设太大)
innodb_log_file_size = 32M连接数限制
max_connections = 50 # 不需要太高,1G 撑不住高并发
其他优化
query_cache_type = 1 # 旧版本开启查询缓存(新版 MySQL 已废弃,MariaDB 可用)
query_cache_limit = 1M
query_cache_size = 32M* **警告**:`innodb_buffer_pool_size` 设置过大(如 >256M)会导致 OOM Killer 直接杀掉 MySQL 进程。 - 找到
4. WordPress 应用层优化
即使底层优化再好,WP 本身臃肿也会拖垮系统。
-
精简主题与插件
- 主题:使用轻量级主题(如 GeneratePress, Astra, Hello Elementor),避免重型多用途主题。
- 插件:只保留必要的。删除所有未使用的插件。
- 移除多余功能:禁用 WP 自带的自动保存草稿、修订版本(Post Revisions)。
- 在
wp-config.php中添加:define('WP_POST_REVISIONS', 3); // 最多保留 3 个版本 define('AUTOSAVE_INTERVAL', 120); // 自动保存间隔 120 秒 define('DISALLOW_FILE_EDIT', true); // 禁止后台编辑代码,防篡改且省资源
- 在
-
引入对象缓存 (Object Cache)
- Redis 或 Memcached 是必须的。它们能极大减少数据库查询次数。
- 安装 Redis 服务,并在 WP 中配合 W3 Total Cache 或 Redis Object Cache 插件使用。
- 注意:Redis 本身也需要内存(约 10-20MB),要在上述内存规划中预留。
-
图片优化
- 所有上传的图片必须在上传前压缩(WebP 格式最佳)。
- 安装插件自动压缩图片(如 ShortPixel, Imagify),但要注意这些插件本身消耗 CPU,建议在本地预处理或使用 CDN。
-
CDN 提速
- 将静态资源(图片、JS、CSS)托管到免费的 CDN(如 Cloudflare)。这不仅能提速,还能直接拦截恶意流量,减轻服务器负载。
5. 架构建议与替代方案
如果在上述优化后,两个站点依然卡顿,说明硬件确实无法满足需求,建议考虑以下架构调整:
- 合并站点:如果两个站内容相关,考虑合并为一个多站点(Multisite)WordPress,共享数据库和 PHP 进程,节省资源。
- 分离部署:
- 方案 A:一个站点放 1 核 1G,另一个站点找免费云主机(如 Oracle Cloud Free Tier 提供 ARM 架构的 4 核 24G,虽然贵但免费额度大)。
- 方案 B:使用 Docker 容器化部署,利用
docker-compose隔离资源,并给每个容器设置严格的mem_limit,防止一个站崩溃拖死整个服务器。
- 异步任务处理:将 WP-Cron(定时任务)改为系统 Crontab 调用,避免 WP-Cron 每次访问都触发后台任务,浪费 CPU。
# 添加 crontab 任务,每分钟执行一次 wp-cron.php */1 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
总结检查清单
| 优化项 | 关键动作 | 预期效果 |
|---|---|---|
| 内存 | 开启 2G Swap + 限制 MySQL Buffer Pool 128M | 防止 OOM 崩溃 |
| PHP | FPM 最大进程数设为 4 | 控制并发内存占用 |
| 缓存 | 启用 Redis + Nginx 静态缓存 | 减少数据库查询和 CPU 计算 |
| WP 配置 | 限制 Post Revisions 为 3,禁用 File Edit | 减少磁盘 I/O 和误操作风险 |
| 网络 | 接入 Cloudflare CDN | 分流静态资源,保护源站 |
风险提示:在 1 核 1G 上跑两个 WP,抗攻击能力极弱。务必做好每日备份(导出到远程存储),并监控 htop 和 dmesg,一旦发现频繁重启或进程被杀,需立即增加 Swap 或限制更严。
云小栈