我有一个 VPS,它运行多个 Opencart 站点,并且大部分情况下都能很好地完成任务。
規格:
中央处理器
正品英特尔,英特尔(R) 至强(R) CPU E5-2665 0 @ 2.40GHz
版本
Parallels Plesk Panel v11.5.30_build115130819.13 os_CentOS 6
操作系统
CentOS 6.2(最终版本)
内存:
4GB
但是,我有一个客户,他经常开展热门促销活动,从而为他们的网站带来大量流量,在 1-2 个小时内可能会有大约 3000-4000 名访问者,其中许多人都在尝试完成订购流程。
当这些促销活动运行时,我可以看到 RAM 减少到 100% 利用率,并导致所有站点甚至 VPS 的 SSH 访问丢失,错误日志显示:
[错误](12)无法分配内存:mod_fcgid:无法运行 /var/www/cgi-bin/cgi_wrapper/cgi_wrapper [警告](12)无法分配内存:mod_fcgid:生成进程 /var/www/cgi-bin/cgi_wrapper/cgi_wrapper 错误
重新启动 Apache 或 VPS 并没有帮助,RAM 利用率只有在人们放弃并停止持续访问网站时才会恢复正常。即使将 RAM 增加到 6GB 也无法解决问题,但我认为任何合理数量的 RAM 都会出现同样的问题。
我已经向我的主机商报告了这个问题,但他们没有提供任何帮助。他们说他们已经优化了 Apache 的工作方式,但我仍然看到每次促销都存在同样的问题,导致完全中断。
经过他们的优化后,我的 Apache 配置如下所示:
IfModule prefork.c
StartServers 2
MinSpareServers 2
MaxSpareServers 5
ServerLimit 80
MaxClients 200
MaxRequestsPerChild 400
IfModule worker.c
StartServers 1
MaxClients 10
MinSpareThreads 1
MaxSpareThreads 4
ThreadsPerChild 25
MaxRequestsPerChild 0
我还刚刚注意到他们已经将 KeepAlive 关闭。
同一位客户在不久的将来会推出一个促销活动,我很想彻底了解情况以确保该网站始终保持活跃。
如有任何建议,我们将不胜感激,如果需要更多信息,请询问。
提前致谢。
答案1
我建议采取以下一项或多项措施:
- 将该客户端移至单独的 VPS。
- 大幅减少 MaxClients,例如尝试 10
- 使用 nginx 代替 Apache,或者在 Apache 前面使用 varnish
- 使用 cloudflare
答案2
您正在运行 apc 吗?如果没有,我会安装它并查看情况是否有所改善。我还会查看 php fcgi 配置。由于 php 在 fcgi 下与 apache 分开运行,因此我认为您的问题不在于 apache。