3

編集

VirtualBox で OS を実行することが問題でした。OS をディスク上でネイティブにするとすぐに、パフォーマンスの向上が見られました。

オリジナル

多くの人が HAProxy+nginx+PHP-FPM のために Apache+mod_php を捨てることを勧めていると読んだことがあります。より効率的なセットアップであることを確認しようとしていますが、人々が説明する結果が表示されていません. siege と ab (Apache Benchmark) の両方が、同時接続数に関係なく Apache が 1 秒あたりの応答を向上させ、より多くの接続をサポートできることを示しています。

VirtualBoxでUbuntu 11.04サーバーを実行しています。10 ギガのスペースと 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 tcp」の代わりに「mode http」を使用し、「option http-server-close」を使用して、サーバーの maxconn 値をワーカー接続値より十分に低く設定します。並行性が低いほどパフォーマンスが大幅に向上し、チェーン全体で RAM 使用量が大幅に削減され、キャッシュ効率が向上するポイントを超える必要があります。

ところで、私たちが話している数字は何ですか? 毎秒数百または数千のリクエストで測定されますか? 明らかに、アプリケーション サーバーは負荷が高い場合にのみ真の違いを生むからです。明らかに、アプリケーションの実行速度が非常に遅い場合、サーバーを交換しても違いが見られる理由はありません。

于 2012-08-25T07:29:08.200 に答える