我正在使用基于 VPS 的托管服务来托管网站,发现默认的 apache2 + prefork + mod_php 占用的资源太多,我的 VPS 无法实现可接受的并发性。(消耗 RAM)
所以我最近切换到了 apache2 + mpm_worker + mod_fcgid + php5
以下是我对相关模块的配置。
<IfModule mpm_worker_module>
StartServers 4
MinSpareThreads 10
MaxSpareThreads 200
ThreadLimit 200
ThreadsPerChild 25
MaxClients 200
MaxRequestsPerChild 1000
</IfModule>
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi .php
# Where to look for the php.ini file?
DefaultInitEnv PHPRC "/etc/php5/apache2"
# Maximum requests a process handles before it is terminated
MaxRequestsPerProcess 1000
# Maximum number of PHP processes
MaxProcessCount 10
# Number of seconds of idle time before a process is terminated
IPCCommTimeout 240
IdleTimeout 240
#Or use this if you use the file above
FCGIWrapper /usr/bin/php5-cgi-wrapper .php
</IfModule>
问题是,在对我的网站进行负载测试时,我无法使服务器 CPU 饱和。还有大量的网络带宽可用。内存利用率低于我的 1GB VPS 的 20%。但加载时间仍在增加。
我不知道我做错了什么。
答案1
我正在慢慢地将并发请求数/连接数从 50 增加到 200。这就是服务器上的负载。
我使用 iotop 来测量磁盘 io。没有显示出任何重要的内容。峰值速度为 3-5k/秒。
好吧,如果是磁盘 IO,那么我就没有什么可玩的空间,因为它是一个托管的 VPS。
我刚刚尝试加载从 php 输出缓存的纯 html 文件,以排除 php 前端的任何延迟。瓶颈不是 php。图表是一样的。
应该是并发问题!