3

编辑

在 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 总是能够更有效地处理更多请求。

是否可以进行一些其他优化,以便最适合扩展的设置将优于不应该更有效的设置?

4

1 回答 1

2

使用 haproxy 作为连接集中器:使用“mode http”而不是“mode tcp”,使用“option http-server-close”并将服务器 maxconn 值设置为远低于 worker 连接值。您应该跨越一个点,即较低的并发性会带来更高的性能、更低的 RAM 使用率和更好的整个链上的缓存效率。

顺便说一句,我们正在谈论的数字是多少?它们是以每秒数百或数千个请求来衡量的吗?因为很明显,应用程序服务器只会在更高的负载中产生真正的影响。显然,如果应用程序运行非常缓慢,更换服务器时没有理由看到差异。

于 2012-08-25T07:29:08.200 回答