编辑
在 VirtualBox 上运行我的操作系统是个问题。当我将我的操作系统设为磁盘上的本地操作系统后,我就能看到性能提升。
原创
我读到很多人建议放弃 Apache+mod_php,转而使用 HAProxy+nginx+PHP-FPM。我正在尝试验证它是否是一个更有效的设置,但没有看到人们描述的结果。 siege 和 ab (Apache Benchmark) 都表明 Apache 在任何数量的并发连接下每秒都能提供更好的响应,并且可以支持更多连接。
我在 VirtualBox 上运行 Ubuntu 11.04 服务器。它有 10 GB 的空间和 1,344 兆的内存。我使用 apt-get 来安装上面提到的程序。以下是相关配置文件,仅包含重要部分。
haproxy.cfg
global
maxconn 4096
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 0600 level admin
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen tcpcluster *:80
mode tcp
option tcplog
balance roundrobin
server tcp01 192.168.1.199:8080 check
nginx.conf
worker_processes 2;
events {
worker_connections 768;
}
www.conf
pm = dynamic
pm.max_children = 10
pm.min_spare_servers = 2
pm.max_spare_servers = 4
pm.max_requests = 500
apache.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 10
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 10
MaxRequestsPerChild 0
</IfModule>
<IfModule mpm_event_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 10
MaxRequestsPerChild 0
</IfModule>
鉴于 PHP-FPM 和 Apache 都有最多 10 个子级,我希望任何速度优势都是可见的。在我运行的每个测试中(在我运行测试之前总是等到负载为 0.01),Apache 总是能够更有效地处理更多请求。
是否可以进行一些其他优化,以便最适合扩展的设置优于不应该更有效的设置?
最佳答案
使用 haproxy 作为连接集中器:使用“mode http”而不是“mode tcp”,使用“option http-server-close”并将服务器 maxconn 值设置为远低于 worker connections 值。您应该跨越一个点,在这个点上,较低的并发性带来了更高的性能,同时整个链的 RAM 使用率更低,缓存效率更高。
顺便说一句,我们正在谈论的数字是多少?他们以每秒数百或数千个请求来衡量吗?因为很明显,应用服务器只有在负载较高时才会真正发挥作用。显然,如果应用程序运行速度非常慢,则没有理由在更换服务器时看到差异。
关于apache - 配置 HAProxy+nginx+PHP-FPM 以超越 Apache+mod_php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056861/