fragen stichworte

Optimieren Sie Apache für hohe gleichzeitige Anforderungen

Ich verwende einen Apache2 Ubuntu-Server, der die API-Anforderung von mobilen Apps bedient.

In letzter Zeit stehe ich vor einem Engpass, wenn die Anforderung höher wird (mehr gleichzeitige Benutzer), die Antwort der Anforderung langsam wird. Früher werden ~ 1 oder 2 Sekunden ausreichen, aber sobald sich die gleichzeitigen Benutzer erhöhen (zu bestimmten Spitzenzeiten), kann es bis zu <10 SekundenSekunden oder länger dauern, auch wenn dies der Fall ist Serverauslastung, CPU und Speicher bleiben sehr niedrig.

Mein Ziel ist es, die Fähigkeit von Apache2 und Ubuntu Server zu erhöhen, so viele gleichzeitige Benutzer wie möglich mit der geringsten Antwortzeit bereitzustellen. Der Speicher und die CPU sind kein wesentlicher Überlegungsfaktor, da die VPS-Spezifikation vergrößert werden kann, wenn sie das Limit erreicht. Wie kann ich das machen?

Was ich bisher gemacht habe:

  1. Konfigurieren Sie ulimit /etc/security/limits.conf und fügen Sie Folgendes hinzu:

    • Softnofile 40000
    • harte Nase 40000
    • soft nproc 40000
  2. Fügen Sie die folgende Zeile zu /etc/pam.d/common-session

    hinzu

    Sitzung erforderlich pam_limits.so

  3. Konfigurieren Sie Apache2 /etc/apache2/mods-enabled/mpm_prefork.conf

    <IfModule mpm_prefork_module>
            StartServers              20
            MinSpareServers           25
            MaxSpareServers          100
            MaxRequestWorkers         150
            MaxConnectionsPerChild   0

            MaxClients              8192
            MaxRequestsPerChild     0
            ServerLimit             8192
     </IfModule>
  1. Fügen Sie die folgende Zeile zu /etc/sysctl.conf

    hinzu

    fs.file-max = 2097152

Die Antwortzeit scheint sich zu verbessern (obwohl einige Anforderungen immer noch verzögert sind), aber nicht zufriedenstellend, da sie immer noch viel langsamer ist als die Nicht-Spitzenzeit.

antworten

Stoppen Sie die Verwendung des Prefork-Moduls und beginnen Sie mit der Verwendung von Event MPM in Apache. Prefork ist die alte Methode und wenn Sie vorgehen möchten, müssen Sie event mpm installieren.

Dies ist möglicherweise nicht Ihr Webserver, sondern etwas anderes in der Kette.

  1. DNS. In der Situation, wenn es nicht offensichtlich die Datenbank ist, gibt es eine gute Chance, dass es DNS ist. Machen Sie ein nslookup und sehen Sie, wie lange der Befehl dauert. Dann suche ein paar Domains.
  2. Es ist das Netzwerk, machen Sie eine Traceroute und sehen Sie, ob einige der Hops in Ihrem Netzwerk länger dauern als üblich.
  3. Netstat -i 5, um festzustellen, ob auf der Netzwerkschnittstelle Fehler aufgetreten sind.
  4. Stellen Sie sicher, dass KeepAlive aktiviert ist. Besonders wenn Sie etwas wie eine Ajax Heavy Site haben, werden Sie die Leistung verbessern.

Ich glaube nicht, dass das Umschalten von MPM Ihnen helfen wird. Ihre Situation ist keine Ressourcenbeschränkung. es ist etwas anderes.