在 WordPress 搭配 MySQL 和 Redis 的架构中,云服务器内存分配的核心原则是:优先保障数据库(MySQL)性能,其次满足应用层(PHP/WordPress)需求,最后利用 Redis 做缓存优化。以下是具体的内存分配策略和建议:
1. 核心组件内存角色分析
-
MySQL:
- 主要消耗
innodb_buffer_pool_size(默认值通常为物理内存的 50%~70%),用于缓存数据和索引。 - 其他关键参数包括
key_buffer_size(MyISAM 表)、query_cache_size(已废弃,不推荐)、sort_buffer_size、read_buffer_size等。 - 建议:独占至少 50%~60% 的物理内存(根据数据量调整)。
- 主要消耗
-
Redis:
- 作为缓存层,存储热点数据(如会话、对象缓存、查询结果)。
- 内存占用 =
maxmemory配置值 + 冗余开销(约 10%~20%)。 - 建议:分配 15%~20% 物理内存,避免与 MySQL 争抢资源。
-
PHP-FPM + WordPress:
- PHP 进程数 × 单进程内存(通常 30MB~100MB/进程)。
- WordPress 插件/主题可能增加额外内存消耗。
- 建议:预留 20%~30% 物理内存,动态调整 PHP-FPM 进程数。
2. 典型场景内存分配方案
场景 1:小型网站(日 PV < 1 万)
- 总内存:2GB
- MySQL: 1.2GB(
innodb_buffer_pool_size=1.2G) - Redis: 400MB(
maxmemory=400mb) - PHP-FPM: 400MB(
pm.max_children=8,单进程 50MB)
- MySQL: 1.2GB(
场景 2:中型网站(日 PV 1 万~10 万)
- 总内存:4GB
- MySQL: 2.5GB(
innodb_buffer_pool_size=2.5G) - Redis: 800MB(
maxmemory=800mb) - PHP-FPM: 700MB(
pm.max_children=10,单进程 70MB)
- MySQL: 2.5GB(
场景 3:大型网站(日 PV > 10 万)
- 总内存:8GB+
- MySQL: 5GB(
innodb_buffer_pool_size=5G) - Redis: 1.5GB(
maxmemory=1.5gb) - PHP-FPM: 1.5GB(
pm.max_children=15,单进程 100MB) - 注意:若数据量极大,可考虑将 MySQL 独立部署到专用服务器。
- MySQL: 5GB(
3. 关键配置示例
MySQL 优化(my.cnf)
[mysqld]
innodb_buffer_pool_size = 2.5G # 占物理内存 60%
innodb_log_file_size = 512M # 日志文件,减少磁盘 IO
query_cache_type = 0 # 禁用查询缓存(MySQL 8.0+ 已移除)
thread_cache_size = 10 # 线程池缓存
tmp_table_size = 256M # 临时表大小
max_connections = 100 # 连接数限制
Redis 优化(redis.conf)
maxmemory = 800mb # 限制最大内存
maxmemory-policy = allkeys-lru # 淘汰策略:LRU
appendonly yes # AOF 持久化
PHP-FPM 优化(php-fpm.conf)
pm = dynamic
pm.max_children = 10 # 最大子进程数
pm.start_servers = 2
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500 # 每个进程处理请求后重启
4. 监控与调优建议
-
实时监控工具:
- MySQL:
SHOW STATUS LIKE 'Innodb_buffer_pool_read%'(命中率应 >95%) - Redis:
INFO memory(检查used_memory_human和evicted_keys) - 系统级:
top、htop、vmstat观察内存使用率。
- MySQL:
-
动态调整:
- 若 MySQL 频繁换页(Swap),增加
innodb_buffer_pool_size。 - 若 Redis 内存溢出,调整
maxmemory或启用更激进的淘汰策略。 - 若 PHP-FPM 进程过多导致 OOM,减少
pm.max_children或优化代码。
- 若 MySQL 频繁换页(Swap),增加
-
进阶优化:
- 启用 Query Cache(仅适用于低并发场景,MySQL 5.7 及以下版本)。
- 使用 Percona Toolkit 进行 MySQL 深度调优。
- 对 WordPress 启用 Object Cache(通过 Redis 替代 Memcached)。
5. 常见误区
- ❌ 过度分配 Redis 内存:导致 MySQL 被压缩,反而降低整体性能。
- ❌ 忽略 PHP-FPM 进程数:高并发下未设置
pm.max_children会导致请求排队。 - ❌ 未监控 Swap 使用:频繁 Swap 会严重拖慢 MySQL 性能。
通过以上策略,可以平衡 WordPress、MySQL 和 Redis 的资源竞争,最大化服务器性能。实际部署时,建议先按保守比例分配,再根据监控数据逐步调整。
轻量云Cloud