对于2GB内存的服务器运行Nginx+PHP+MySQL的典型配置,建议的并发处理能力如下:
一、内存分配建议
Nginx: 100-200MB
PHP-FPM: 300-500MB (每个进程约20-40MB,10-15个进程)
MySQL: 400-800MB
系统/缓存: 剩余内存
二、并发处理能力估算
1. 保守估计(稳定运行)
- 并发连接数: 50-100个
- QPS(简单页面): 30-80次/秒
- PHP-FPM进程数: 10-15个
- MySQL连接数: 50-80个
2. 优化后估计
- 并发连接数: 100-200个
- QPS(简单页面): 80-150次/秒
- PHP-FPM进程数: 15-20个(需优化内存使用)
三、关键优化建议
MySQL优化
# my.cnf 关键配置
key_buffer_size = 64M
query_cache_size = 32M
tmp_table_size = 32M
max_heap_table_size = 32M
innodb_buffer_pool_size = 256M # 尽可能分配更多
max_connections = 80
PHP-FPM优化
pm = dynamic
pm.max_children = 15
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500 # 防止内存泄漏
Nginx优化
worker_processes: 2
worker_connections: 1024
keepalive_timeout: 15
四、实际影响因素
-
应用类型
- 静态页面:可支持更高并发
- 动态页面(数据库密集):并发降低
- API接口:取决于响应时间
-
数据库查询复杂度
- 简单查询:可支持更多并发
- 复杂查询:并发能力下降
-
PHP代码效率
- 优化良好的代码可提升30-50%性能
五、监控建议
-
内存使用监控
free -m top -p $(pgrep mysql) -p $(pgrep php-fpm) -p $(pgrep nginx) -
关键指标
- 内存swap使用率(应接近0)
- MySQL的InnoDB缓冲池命中率
- PHP-FPM进程回收频率
六、扩展建议
如果并发需求超过150,建议:
- 升级到4GB内存
- 考虑分离数据库到独立服务器
- 使用Redis缓存减少数据库压力
- 实施静态资源CDN提速
实际测试是确定具体并发能力的最佳方式,建议使用ab、wrk等工具进行压力测试,同时监控系统资源使用情况。
CLOUD技术笔记