ホームページ  >  に質問  >  本文

Ab スループット テスト、nginx が apache ほど優れていない理由

環境

リーリー

コード

リーリー リーリー

テスト

リーリー

結果

リーリー

質問

今、誰もが nginx を推奨していますが、純粋な HTML であろうと PHP 単体であろうと、nginx のスループットは Apache よりも劣るのはなぜですか?
UGC プラットフォームは Apache や nginx に適していますか?

怪我咯怪我咯2713日前832

全員に返信(5)返信します

  • 漂亮男人

    漂亮男人2017-05-16 17:03:44

    Windows 7 での IIS と Apache のパフォーマンス比較テスト
    IIS + php-cgi.exe(NTS) vs Apache + php5apache2_4.dll(TS)
    環境 (64 ビット Win7): IIS7+PHP5.4 (NTS 非スレッド安全なバージョン) vs Apache2.4 (32-bit)+PHP5.4
    静的ファイルのパフォーマンス:

    リーリー

    結論: APR ランタイムと WinNT マルチスレッドに基づく Apache は、静的リソース処理において IIS よりも劣りません。

    PHP パフォーマンス:

    リーリー

    結論: Apache はスレッド MPM を使用するため、スレッド セーフ バージョンの PHP を使用する必要があります。スレッド セーフティ チェックには一定のオーバーヘッドがあるため、パフォーマンスは IIS+PHP-CGI よりも低くなります。

    Nginx は、高い同時実行性を実現するためのマルチスレッドに基づいていませんが、epoll (Linux)、kqueue (FreeBSD) のイベント駆動型の非同期ネットワーク IO メカニズムに基づいており、Windows IOCP ではなく Windows 上で最もオリジナルの select を使用します。このバージョンの Nginx はテストと開発のみを対象としています。Nginx の真のパフォーマンスを発揮するには、Linux または FreeBSD 上で実行する必要があります。

    Apache も Windows で選択システム コールを使用しますが、Apache の WINNT MPM はマルチスレッド MPM であるため、非高速同時実行 (100 同時実行など) での静的リソースの処理においては、IIS よりも優れた利点があります。 Linux で epoll を使用する MPM。たとえば、2.4 シリーズのデフォルトのイベント MPM は、メイン プロセスが複数のワーカー プロセスを管理し、各ワーカー プロセスが複数のスレッドを持ちます。epoll を使用して非同期ネットワーク IO を実行します。 Nginx の課題に対する強力な応答です。

    返事
    0
  • 滿天的星座

    滿天的星座2017-05-16 17:03:44

    Windowsでは何も説明されません。これは Windows でのテストにのみ使用され、それ以外には使用されません。
    Windows 用の nginx のバージョンは、ネイティブ Win32 API (Cygwin エミュレーション層ではない) を使用しています。現在、select() 接続処理メソッドのみが使用されているため、このバージョンおよびその他の既知の問題のバージョンにより、高いパフォーマンスとスケーラビリティは期待できません。 Windows 用の nginx はベータ版であると考えられています。
    Windows には epoll と kqueue がないため、Windows で select を使用すると当然ながら nginx のパフォーマンスが低下します。

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 17:03:44

    投稿者が個人的にテストして検証するのは良い習慣ですが、nginx サーバーとしては Linux が一般的に使用されます。 Windows を使用している場合、nginx のパフォーマンスは Apache ほど良くない可能性があります。これは、nginx と Apache の両方が Windows 上で選択する同じ操作メカニズムを使用するはずです。これはキューイング ループ処理に似ています。
    Windows での nginx のパフォーマンスの低下は、次のことが原因である可能性があります: nginx は php-cgi を呼び出す必要もあり、Apache には php の sapi が組み込まれています。

    Linux では引き続き Apache が選択され、nginx は epoll を使用できます。その場合:
    apache は依然として
    nginx の epoll メカニズムの処理のためにキューに入れられ、リクエストを受信して​​ php-cgi にスローし、次のリクエストに進みます。 php-cgi の処理が完了したら、それをクライアントに返すだけです。これは並行して進みます。

    投稿者は、epoll と Apache の違いを見てみましょう:
    あなたが大学で勉強していて、住んでいる寮の建物にはたくさんの部屋があり、友達があなたに来たがっているとします。

    選択バージョンのホステスは、あなたを見つけるまで友達を部屋から部屋へと連れて行きます。

    epoll バージョンの寮のおばさんは、最初に各学生の部屋番号を書き留めます。友達が来たとき、あなたは自分がどの部屋に住んでいるのかを友達に伝えるだけで済みます。友達を建物の周りに連れて行く必要はありません。誰かを見つけてください。

    10,000 人が来て、この建物に住んでいるクラスメートを見つけたい場合、select バージョンと epoll バージョンのどちらがより効率的であるかは自明です。

    同様に、同時実行性の高いサーバーでは、I/O のポーリングは最も時間のかかる操作の 1 つであり、select と epoll のどちらのパフォーマンスが高いかは明らかです。

    返事
    0
  • 仅有的幸福

    仅有的幸福2017-05-16 17:03:44

    勝利NG?哎

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-16 17:03:44

    設定は投稿しません。nginx は epool を有効にしましたか?

    返事
    0
  • キャンセル返事