Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Apache ändert die maximale Anzahl gleichzeitiger Verbindungen

Apache ändert die maximale Anzahl gleichzeitiger Verbindungen

王林
王林nach vorne
2020-10-26 16:38:153178Durchsuche

Apache ändert die maximale Anzahl gleichzeitiger Verbindungen

Apache bietet mehrere verschiedene MPM-Module für verschiedene Betriebssysteme, wie zum Beispiel: mpm_beos, mpm_event, mpm_netware, mpmt_os2, mpm_prefork, mpm_winnt, mpm_worker. Wenn die Bedingungen es zulassen, können wir das angegebene MPM-Modul entsprechend den tatsächlichen Anforderungen in unseren eigenen Apache kompilieren (der Quellcode von Apache ist offen, sodass Benutzer ihn selbst kompilieren können). Wenn wir jedoch beim Kompilieren keine Auswahl treffen, wählt Apache das entsprechende MPM-Modul entsprechend den verschiedenen Betriebssystemen gemäß der folgenden Tabelle aus. Dies ist auch das von Apache empfohlene MPM-Modul für verschiedene Plattformen. ?? m_beos ist ein von Be Company entwickeltes Multimedia-Betriebssystem. Die offizielle Version wird nicht mehr aktualisiert.

Netwarempm_netware ist ein von NOVELL eingeführtes Netzwerkbetriebssystem.

OS/2mpmt_os2 ist ein ursprünglich von Microsoft und IBM gemeinsam entwickeltes Betriebssystem. Es wird jetzt ausschließlich von IBM entwickelt (Microsoft hat OS/2 aufgegeben und stattdessen Windows entwickelt). Das Modul mpm_event kann als Variante des Moduls mpm_worker betrachtet werden, ist jedoch experimentell und wird im Allgemeinen nicht zur Verwendung empfohlen.

Natürlich stellt Apache auf seiner offiziellen Website auch fertige Apache zur Verfügung, die entsprechende MPM-Module für verschiedene Betriebssysteme zusammengestellt haben. Sie können hier klicken, um die offizielle Apache-Website zum Herunterladen aufzurufen.

Wenn wir außerdem wissen möchten, welche Art von MPM-Modul intern von einem Apache verwendet wird, können wir über die Befehlszeile das Apache-Installationsverzeichnis bin eingeben und dann den Befehl httpd -l eingeben, um das aktuell verwendete MPM-Modul anzuzeigen intern von Apache. Was für ein MPM-Modul.

Verwenden Sie den Befehl httpd -l, um das kompilierte Modul anzuzeigen.

Da BeOS, NetWare, OS/2 und andere Betriebssysteme in der normalen Entwicklungsarbeit nicht üblich sind, konzentrieren wir uns hier hauptsächlich auf die MPM-Module unter Windows und Unix/Linux Systeme erklären. Auf Windows- und Unix/Linux-Betriebssystemen gibt es drei Haupt-MPM-Module: mpm_winnt, mpm_prefork und mpm_worker.

mpm_prefork-Modul

mpm_prefork-Modul wird hauptsächlich auf dem Apache-Server auf Unix/Linux-Plattformen verwendet. Seine Hauptarbeitsmethode ist: Wenn der Apache-Server gestartet wird, erstellt das mpm_prefork-Modul vorab mehrere untergeordnete Prozesse (der Standardwert ist 5). . Beim Empfangen des Clients Nach dem Empfang der Anfrage vom Client übergibt das Modul mpm_prefork die Anfrage zur Verarbeitung an den Unterprozess, und jeder Unterprozess kann nur zur gleichzeitigen Verarbeitung einer einzelnen Anfrage verwendet werden. Wenn die aktuelle Anzahl der Anfragen die Anzahl der vorab erstellten Unterprozesse übersteigt, erstellt das Modul mpm_prefork neue Unterprozesse, um die zusätzlichen Anfragen zu verarbeiten. Apache versucht immer, einige freie oder inaktive untergeordnete Prozesse für anstehende Anforderungen verfügbar zu halten. Auf diese Weise muss die Anfrage des Clients nach dem Empfang nicht auf die Generierung des untergeordneten Prozesses warten.

Da im Modul mpm_prefork jede Anfrage einem untergeordneten Prozess entspricht, belegt es mehr Systemressourcen als die beiden anderen Module. Der Vorteil des Moduls mpm_prefork besteht jedoch darin, dass jeder seiner Unterprozesse die entsprechende einzelne Anfrage unabhängig bearbeitet, sodass sich ein Problem bei einer der Anfragen nicht auf andere Anfragen auswirkt. Gleichzeitig kann das Modul mpm_prefork auf Module von Drittanbietern angewendet werden, die nicht threadsicher sind (z. B. nicht threadsichere Versionen von PHP), und ist auf Plattformen, die Thread-Debugging nicht unterstützen, einfach zu debuggen. Darüber hinaus weist das Modul mpm_prefork auch eine höhere Stabilität auf als das Modul mpm_worker.

mpm_worker-Modul

mpm_worker-Modul wird auch hauptsächlich in Apache-Servern auf Unix/Linux-Plattformen verwendet. Es kann als verbesserte Version des mpm_prefork-Moduls angesehen werden. Das Modul mpm_worker funktioniert ähnlich wie das Modul mpm_prefork. Bei der Verarbeitung derselben Anforderung beansprucht die prozessbasierte Verarbeitung (z. B. mpm_prefork) jedoch mehr Systemressourcen als die threadbasierte Verarbeitung. Daher ermöglicht das Modul mpm_worker im Gegensatz zum Modul mpm_prefork jedem untergeordneten Prozess, eine feste Anzahl von Service-Threads und einen Listening-Thread zu erstellen, und lässt jeden Service-Thread die Anforderung des Clients verarbeiten. Der Listening-Thread wird zum Überwachen und Senden von Zugriffsanforderungen verwendet Wird zur Verarbeitung und Antwort an den Service-Thread übergeben. Apache versucht immer, einen Pool freier oder inaktiver Service-Threads aufrechtzuerhalten. Auf diese Weise muss der Client nicht darauf warten, dass ein neuer Thread oder Prozess eingerichtet wird, bevor er verarbeitet werden kann.

Im Vergleich zum Modul mpm_prefork kann das Modul mpm_worker den Overhead der Systemressourcen weiter reduzieren. Darüber hinaus werden mehrere Prozesse verwendet, und jeder Prozess verfügt über mehrere Threads, sodass im Vergleich zu einer vollständig threadbasierten Verarbeitungsmethode ein gewisses Maß an Stabilität erzielt wird.

mpm_winnt-Modul

mpm_winnt-Modul ist ein MPM-Modul, das speziell für Windows-Betriebssysteme optimiert und entwickelt wurde. Es erstellt lediglich einen separaten untergeordneten Prozess und erzeugt in diesem untergeordneten Prozess nacheinander mehrere Threads, um die Anfrage zu bearbeiten.

Ändern Sie die MPM-Modulkonfiguration

Nachdem wir ein gewisses Verständnis des MPM-Moduls von Apache haben, können wir die Konfiguration der maximalen Anzahl gleichzeitiger Verbindungen von Apache für verschiedene MPM-Module ändern.

1. MPM-Modulkonfigurationsdatei aktivieren

Im Apex-Installationsverzeichnis/conf/extra-Verzeichnis befindet sich eine Konfigurationsdatei mit dem Namen httpd-mpm.conf. Diese Datei wird hauptsächlich zur Konfiguration des MPM-Moduls verwendet. Standardmäßig ist die MPM-Modulkonfigurationsdatei von Apache jedoch nicht aktiviert. Daher müssen wir diese Konfigurationsdatei in der Datei httpd.conf wie folgt aktivieren:

# Server-Pool-Verwaltung (MPM-spezifisch) Fügen Sie conf/extra/httpd-mpm.conf hinzu (Entfernen Sie das Kommentarsymbol „# davor“. Zeile ")

2. Ändern Sie die relevanten Konfigurationen in der MPM-Modulkonfigurationsdatei

Nachdem wir die MPM-Modulkonfigurationsdatei gestartet haben, können wir die Konfigurationsdatei mit einem Texteditor öffnen. Wir können sehen, dass die Konfiguration viele Konfigurationen enthält Dateiknoten, wie in der Abbildung unten gezeigt:

Die entsprechende Konfiguration wird nur wirksam, wenn Apache das entsprechende MPM-Modul verwendet.

Zu diesem Zeitpunkt müssen wir die Parameterkonfiguration unter dem entsprechenden Knoten entsprechend dem aktuellen MPM-Modul ändern Wird vom Apache-Server verwendet. Schauen wir uns zunächst die Standardkonfiguration unter dem Modul mpm_winnt an:

#Da das Modul mpm_winnt nur einen Unterprozess erstellt, entspricht die Parametereinstellung für einen einzelnen Unterprozess hier der Parametereinstellung für den gesamten Apache . ThreadsPerChild 150# Empfohlene Einstellungen: Kleine Website = 1000 Mittlere Website = 1000~2000 Große Website = 2000~3500 MaxRequestsPerChild 0# Empfohlene Einstellungen: Klein = 10000 Mittel oder groß = 20000~100000

Die entsprechenden Konfigurationsparameter lauten wie folgt:

ThreadsPerChild

Maximale Anzahl gleichzeitiger Threads pro untergeordnetem Prozess.

MaxRequestsPerChild

Die Gesamtzahl der Anfragen, die jeder untergeordnete Prozess verarbeiten darf. Wenn die kumulierte Anzahl der verarbeiteten Anforderungen diesen Wert überschreitet, wird der Unterprozess beendet (und dann wird bestimmt, ob bei Bedarf ein neuer Unterprozess erstellt werden soll). Wenn dieser Wert auf 0 gesetzt wird, bedeutet dies, dass die Gesamtzahl der Anforderungen nicht begrenzt ist (der Unterprozess wird niemals beendet). ).

Es wird empfohlen, diesen Parameter auf einen Wert ungleich Null zu setzen, was die folgenden zwei Vorteile bringen kann:

Es kann verhindert werden, dass mögliche Speicherlecks im Programm auf unbestimmte Zeit andauern und der Speicher knapp wird.

Geben Sie Prozessen eine begrenzte Lebensdauer und tragen Sie so dazu bei, die Anzahl aktiver Prozesse zu reduzieren, wenn die Serverlast reduziert wird.

Hinweis: Von den oben genannten Parametern im Zusammenhang mit der Zählung der Anzahl der Anfragen wird bei KeepAlive-Verbindungen nur die erste Anfrage gezählt.

Dann werfen wir einen Blick auf die Standardkonfiguration unter den Modulen mpm_perfork und mpm_worker:

#mpm_perfork-Modul StartServers 5# Empfohlene Einstellungen: Klein = Standard Mittel = 20~50 Groß = 50~100MinSpareServers 5# Empfohlene Einstellungen: Behalten mit StartServers Consistent MaxSpareServers 10# Empfohlene Einstellungen: Klein=20 Mittel=30~80 Groß=80~120 MaxClients 150# Empfohlene Einstellungen: Klein=500 Mittel=500~1500 Groß=1500~3000MaxRequestsPerChild 0# Empfohlene Einstellungen: Klein=10000 Mittel oder Groß =10000~500000 (Darüber hinaus muss zusätzlich der Parameter ServerLimit festgelegt werden, der am besten mit dem Wert von MaxClients übereinstimmt.)

# StartServers:  数量的服务器进程开始
# MinSpareServers:  最小数量的服务器进程,保存备用
# MaxSpareServers:  最大数量的服务器进程,保存备用
# MaxRequestWorkers:  最大数量的服务器进程允许开始
# MaxConnectionsPerChild:  最大连接数的一个服务器进程服务

prefork Nach dem Steuerungsprozess wird zunächst der Unterprozess „StartServers“ eingerichtet Um die Anforderungen der MinSpareServers-Einstellungen zu erfüllen, erstellen Sie einen Prozess, warten Sie eine Sekunde, erstellen Sie weiterhin zwei, warten Sie eine weitere Sekunde, erstellen Sie weiterhin vier ... Dadurch erhöht sich die Anzahl der erstellten Prozesse exponentiell auf bis zu 32 pro Sekunde, bis der Der von MinSpareServers festgelegte Wert wird erreicht. Dieser Modus macht die Erstellung eines neuen Prozesses überflüssig, wenn eine Anfrage eingeht, wodurch der Systemaufwand reduziert und die Leistung erhöht wird. MaxSpareServers legt die maximale Anzahl inaktiver Prozesse fest. Wenn die Anzahl inaktiver Prozesse größer als dieser Wert ist, beendet Apache automatisch einige redundante Prozesse. Stellen Sie diesen Wert nicht zu groß ein. Wenn der Wert jedoch kleiner als „MinSpareServers“ ist, passt Apache ihn automatisch auf „MinSpareServers+1“ an. Wenn die Site-Auslastung hoch ist, sollten Sie die Erhöhung von MinSpareServers und MaxSpareServers in Betracht ziehen.

MaxRequestsPerChild legt die Anzahl der Anfragen fest, die jeder untergeordnete Prozess verarbeiten kann. Jeder untergeordnete Prozess wird nach der Verarbeitung von „MaxRequestsPerChild“-Anfragen automatisch zerstört. 0 bedeutet unendlich, das heißt, der untergeordnete Prozess wird niemals zerstört. Obwohl die Standardeinstellung 0 es jedem untergeordneten Prozess ermöglicht, mehr Anfragen zu verarbeiten, hat die Einstellung auf einen Wert ungleich Null auch zwei wichtige Vorteile:

1 Es kann versehentliche Speicherverluste verhindern. 2. Wenn die Serverlast abnimmt, wird die Anzahl der untergeordneten Prozesse automatisch reduziert.

Daher kann dieser Wert entsprechend der Auslastung des Servers angepasst werden.

Der MaxRequestWorkers-Anweisungssatz begrenzt die Anzahl der Anfragen, die gleichzeitig bearbeitet werden können. Alle Verbindungsversuche innerhalb des MaxRequestWorkerslimits werden normalerweise in die Warteschlange gestellt, bis zu einer Reihe von Anweisungen, die auf dem ListenBacklog basieren.

In Versionen vor Apache 2.3.13 wurden MaxRequestWorker MaxClients genannt.

(MaxClients ist die wichtigste dieser Anweisungen. Sie legt die Anforderungen fest, die Apache gleichzeitig verarbeiten kann. Es ist der Parameter, der den größten Einfluss auf die Apache-Leistung hat. Sein Standardwert von 150 reicht bei weitem nicht aus. Wenn die Wenn die Gesamtzahl der Anfragen diesen Wert erreicht hat (kann mit ps -ef|grep http|wc -l bestätigt werden), werden nachfolgende Anfragen in die Warteschlange gestellt, bis eine verarbeitete Anfrage abgeschlossen ist. Dies ist der Hauptgrund dafür, dass noch viele Systemressourcen vorhanden sind Der linke und HTTP-Zugriff ist sehr langsam. Je größer der Wert, desto mehr Anfragen können verarbeitet werden, aber das Standardlimit von Apache kann nicht größer als 256 sein

#mpm_worker-Modul StartServers 2#Empfohlene Einstellungen: Klein=Standard Mittel=3~5 Groß=5~10MaxClients 150#Empfohlene Einstellungen: Klein=500 Mittel=500~1500 Groß=1500~3000MinSpareThreads 25#Empfohlene Einstellungen: Klein=Standard Mittel =50~100 Groß=100~200MaxSpareThreads 75#Empfohlene Einstellungen: Klein=Standard Mittel=80~160 Groß=200~400 ThreadsPerChild 25#Empfohlene Einstellungen: Klein=Standard Mittel=50~100 Groß=100~200MaxRequestsPerChild 0#Empfohlene Einstellungen : Klein = 10000 Mittel oder Groß = 10000~50000 (Wenn MaxClients/ThreadsPerChild außerdem größer als 16 ist, müssen Sie zusätzlich den Parameter ServerLimit festlegen. ServerLimit muss größer oder gleich dem Wert von MaxClients/ThreadsPerChild sein.)

Die entsprechenden Konfigurationsparameter funktionieren wie folgt:

StartServers

Die Anzahl der untergeordneten Prozesse, die beim Start von Apache erstellt wurden.

MinSpareServers

Mindestanzahl untergeordneter Prozesse im Ruhezustand.

Der sogenannte untergeordnete Prozess im Leerlauf bezieht sich auf einen untergeordneten Prozess, der keine Anfragen verarbeitet. Wenn die aktuelle Anzahl inaktiver untergeordneter Prozesse geringer ist als MinSpareServers, erzeugt Apache neue untergeordnete Prozesse mit einer maximalen Rate von einem pro Sekunde. Eine Anpassung dieses Parameters ist nur bei stark ausgelasteten Maschinen erforderlich. Dieser Wert sollte nicht zu groß sein.

MaxSpareServers

Maximale Anzahl untergeordneter Prozesse im Ruhezustand.

Dieser Parameter muss nur bei stark ausgelasteten Maschinen angepasst werden. Dieser Wert sollte nicht zu groß sein. Wenn Sie den Wert dieser Direktive auf einen kleineren Wert als „MinSpareServers“ festlegen, ändert Apache ihn automatisch in „MinSpareServers+1“.

MaxClients

Maximal zulässige Anzahl von Anfragen für gleichzeitige Verbindungen.

Jede Anfrage, die das MaxClients-Limit überschreitet, wird in die Warteschlange gestellt, bis der Maximalwert des ListenBacklog-Anweisungslimits erreicht ist.

Für MPM ohne Thread (d. h. mpm_prefork) gibt MaxClients die maximale Anzahl untergeordneter Prozesse an, die zur Verarbeitung von Client-Anfragen verwendet werden können. Der Standardwert ist 256. Um diesen Wert zu erhöhen, müssen Sie auch ServerLimit erhöhen.

Für Thread- oder gemischte MPM (d. h. mpm_beos oder mpm_worker) stellt MaxClients die maximale Anzahl von Threads dar, die zum Verarbeiten von Clientanforderungen verwendet werden können. Der Standardwert von Threaded mpm_beos ist 50. Der Standardwert für gemischtes MPM beträgt 16 (ServerLimit) mal 25 (ThreadsPerChild). Wenn Sie MaxClients auf mehr als 16 bereitzustellende Prozesse erhöhen, müssen Sie daher auch den Wert von ServerLimit erhöhen.

MinSpareThreads

Mindestanzahl von Threads im Ruhezustand.

Verschiedene MPMs behandeln diesen Befehl unterschiedlich:

Der Standardwert von mpm_worker ist 75. Dieses MPM überwacht die Anzahl der inaktiven Threads auf der gesamten Serverbasis. Wenn die Gesamtzahl der Leerlauf-Threads auf dem Server zu gering ist, generiert der untergeordnete Prozess neue Leerlauf-Threads. Der Standardwert von mpm_netware ist 10. Da dieses MPM nur einen einzigen untergeordneten Prozess ausführt, überwacht dieses MPM natürlich auch die Anzahl der inaktiven Threads basierend auf dem gesamten Server. mpm_beos und mpmt_os2 funktionieren ähnlich wie mpm_netware. Der Standardwert von mpm_beos ist 1; der Standardwert von mpmt_os2 ist 5.

MaxSpareThreads

Maximale Anzahl von Threads im Ruhezustand.

Verschiedene MPMs behandeln diesen Befehl unterschiedlich:

Der Standardwert von mpm_worker ist 250. Dieses MPM überwacht die Anzahl der inaktiven Threads auf der gesamten Serverbasis. Wenn die Gesamtzahl der inaktiven Threads auf dem Server zu groß ist, beendet der untergeordnete Prozess die überschüssigen inaktiven Threads. Der Standardwert von mpm_netware ist 100. Da dieses MPM nur einen einzigen untergeordneten Prozess ausführt, überwacht dieses MPM natürlich auch die Anzahl der inaktiven Threads basierend auf dem gesamten Server. mpm_beos und mpmt_os2 funktionieren ähnlich wie mpm_netware. Der Standardwert von mpm_beos ist 50; der Standardwert von mpmt_os2 ist 10.

Hinweis: ServerLimit stellt die maximale Anzahl von Prozessen dar, die Apache erstellen darf. Es ist erwähnenswert, dass Apache zur Kompilierungszeit ein internes hartes Limit von ServerLimit 20000 hat (ServerLimit 200000 für das Modul mpm_prefork). Sie können dieses Limit nicht überschreiten.

Seien Sie besonders vorsichtig, wenn Sie diesen Befehl verwenden. Wenn ServerLimit auf einen viel höheren Wert als tatsächlich benötigt eingestellt ist, wird zu viel gemeinsam genutzter Speicher zugewiesen. Wenn Sie ServerLimit und MaxClients so einstellen, dass sie die Verarbeitungskapazitäten des Systems überschreiten, startet Apache möglicherweise nicht oder das System wird möglicherweise instabil.

Hinweis: Bitte stellen Sie bei der Konfiguration relevanter Parameter zunächst sicher, dass der Server über ausreichende Hardwareleistung verfügt (z. B. CPU, Speicher usw.). Wenn Sie feststellen, dass die Speichernutzung des Servers mit zunehmender Laufzeit des Servers seit dem Start zugenommen hat, liegt möglicherweise ein Speicherverlust im Programm vor. Passen Sie den Wert des Parameters MaxRequestsPerChild nach unten an, um die Auswirkungen des Speicherverlusts zu verringern Fahren Sie so schnell wie möglich fort und finden Sie heraus, wo das Problem im Programm liegt.

Das obige ist der detaillierte Inhalt vonApache ändert die maximale Anzahl gleichzeitiger Verbindungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jianshu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen