我的生产服务器运行 Ubuntu 11.10,内存为 48GB,出现了一些严重问题。我的网络服务器(Apache 2.1)的设置配置为使用大约 18 GB 的内存。我尝试通过设置来计算此值
- 最大客户端数 800
每个子进程占用近 23MB 内存
- 最大备用服务器数 200
- 保持活动状态
- 保持活动超时 3
Apache MPM 设置为prefork 模块
此外我们还使用
- php 5.3.2
- PDO 连接数据库
我对我的 MySQL 服务器 (v5.1) 做了类似的更改,方法是:max_used_connections 设置为 800和
- 密钥缓冲区到 4Gb(Myisam 作为默认引擎,带有 3 个 innodb 表)
- 密钥缓冲区大小+ (读取缓冲区大小 + 排序缓冲区大小) * 最大连接数 = 5.4Gb
现在最大使用连接数正在迅速增加,几个小时后它停止在595并且它再次攀升至最大值 800。我甚至尝试更改为默认的 mysql 配置,但仍然没有变化。
由于某种原因,更改为 Apache 的默认配置现在可以解决问题最大使用连接数稳定在57。
有人知道这种行为吗?Apaches 配置会影响 Mysql 性能吗?
答案1
这是在大型服务器上运行 apache 的一种糟糕方式。
请考虑运行 worker MPM(轻量级线程模型),并通过官方 apache mod_fcgid 模块将动态请求(PHP)代理到 fastCGI 后端。
还要确保设置了静态的 PHP -> mysqli 连接数,并重新使用该池。
使用上述设置,您可以轻松支持 5000 个并发客户端。