Heim  >  Artikel  >  类库下载  >  Stresstest und Optimierung der Parallelität von PHP-Nginx-Websites

Stresstest und Optimierung der Parallelität von PHP-Nginx-Websites

高洛峰
高洛峰Original
2016-10-20 13:41:543262Durchsuche

1. Testtools:

Apache-Stresstesttool ab

ab ist ein Leistungstesttool für Apache. Sie können nur das ab-Tool installieren.

Ubuntu-Installation ab

apt-get install apache2-utils

Centos-Installation ab

yum install httpd-tools

Detaillierte Erläuterung der ab-Parameter

Format: ./ab [Optionen] [ http://]hostname[:port]/path

Parameter:

-nDie Anzahl der in der Testsitzung ausgeführten Anforderungen. Standardmäßig wird nur eine Anfrage ausgeführt.

-c Die Anzahl der gleichzeitig generierten Anfragen. Die Standardeinstellung ist jeweils eine.

-tDie maximale Anzahl an Sekunden, die der Test ausführen soll. Sein interner impliziter Wert ist -n 50000, wodurch der Test des Servers auf eine feste Gesamtzeit begrenzt wird. Standardmäßig gibt es keine zeitliche Begrenzung.

-p enthält die Datei mit den Daten, die gepostet werden müssen.

-P bietet einem Transitagenten BASIC-zertifiziertes Vertrauen. Benutzername und Passwort werden durch ein : getrennt und in Base64-Kodierung gesendet. Diese Zeichenfolge wird unabhängig davon gesendet, ob der Server dies erfordert (d. h. ob ein 401-Authentifizierungsanforderungscode gesendet wurde).

-T Inhaltstyp-Header-Informationen, die von POST-Daten verwendet werden.

-v legt die Ausführlichkeit der angezeigten Informationen fest – ein Wert von 4 oder höher zeigt Header-Informationen an, ein Wert von 3 oder höher kann Antwortcodes (404, 200 usw.) anzeigen, ein Wert von 2 oder Größer kann Warnungen und andere Informationen anzeigen.

-V zeigt die Versionsnummer an und wird beendet.

-w gibt die Ergebnisse im HTML-Tabellenformat aus. Standardmäßig handelt es sich um eine zweispaltige Tabelle mit weißem Hintergrund.

-ich führe eine HEAD-Anfrage anstelle einer GET-Anfrage durch.

-x legt die Zeichenfolge des

-Attributs fest.

-X verwendet einen Proxyserver für Anfragen.

-y legt die Zeichenfolge des

-Attributs fest.

-z legt die Zeichenfolge des

-Attributs fest.

-C Hängen Sie ein Cookie an die Anforderungszeile an. Seine typische Form ist ein Parameterpaar aus Name=Wert, und dieser Parameter kann wiederholt werden.

-H fügt der Anfrage zusätzliche Header-Informationen hinzu. Die typische Form dieses Parameters ist eine gültige Kopfzeile, die durch Doppelpunkte getrennte Feld- und Wertepaare enthält (z. B. „Accept-Encoding:zip/zop;8bit“).

-A bietet dem Server BASIC-Authentifizierungsvertrauen. Benutzername und Passwort werden durch ein : getrennt und in Base64-Kodierung gesendet. Diese Zeichenfolge wird unabhängig davon gesendet, ob der Server dies erfordert (d. h. ob ein 401-Authentifizierungsanforderungscode gesendet wurde).

-h zeigt die Nutzung an.

-d Zeigt die Meldung „Prozentsatz, der innerhalb der Tabelle XX [ms] bereitgestellt wurde“ nicht an (bietet Unterstützung für frühere Versionen).

-e erzeugt eine durch Kommas getrennte Datei (CSV), die den entsprechenden Prozentsatz der Zeit (in Mikrosekunden) enthält, der für die Verarbeitung jedes entsprechenden Prozentsatzes von Anforderungen erforderlich ist (von 1 % bis 100 %). Da dieses Format „binarisiert“ wurde, ist es nützlicher als das „gnuplot“-Format.

-g Schreibt alle Testergebnisse in eine „Gnuplot“- oder TSV-Datei (durch Tabulatoren getrennt). Diese Datei kann problemlos in Gnuplot, IDL, Mathematica, Igor und sogar Excel importiert werden. Die erste Zeile ist der Titel.

-ich führe eine HEAD-Anfrage anstelle einer GET-Anfrage durch.

-k aktiviert die HTTP-KeepAlive-Funktion, die mehrere Anfragen in einer HTTP-Sitzung ausführt. Standardmäßig ist die KeepAlive-Funktion nicht aktiviert.

-q Wenn die Anzahl der verarbeiteten Anfragen mehr als 150 beträgt, gibt ab jedes Mal einen Fortschrittszähler auf stderr aus, wenn etwa 10 % oder 100 Anfragen verarbeitet werden. Das Flag -q unterdrückt diese Nachrichten.

z. B.:

### POST /user/login

ab -n 100 -kc 10 -p user_login -T 'application/json' -H 'Accept-Encoding:gzip, deflate' -H 'accept-language:zh-Hans-CN;q=1, en-CN;q=0.9'  http://XXX/user/login


##### request data
文件 user_login 内容:
{"email":"ws65536@qq.com","password":"ws65536"}
### GET /default/index

ab -n 1000 -c 100 http://XXX/default/index

Während des Tests können Sie den Befehl htop auf dem zu testenden Server verwenden, um die Echtzeitnutzung von CPU und Speicher anzuzeigen:

Stresstest und Optimierung der Parallelität von PHP-Nginx-Websites

Weitere Informationen zu ab finden Sie unter: Ausführliche Erläuterung der Verwendung des Apache-Leistungstesttools ab

2. Konfigurationsoptimierung

nginx verfügt über drei Schritte zur Verarbeitung von PHP-Anfragen.

Schritt eins: Akzeptieren Sie die Anfrage, stellen Sie fest, dass es sich um eine PHP-Anfrage handelt, und fahren Sie mit Schritt zwei fort.

Schritt 2: Stellen Sie über den Socket eine Verbindung zum Fast-CGI von PHP-FPM her und lassen Sie PHP-FPM die Anfrage verarbeiten.

Schritt 3: Erhalten Sie das PHP-FPM-Verarbeitungsergebnis, fügen Sie den http-Header hinzu und geben Sie ihn an den Client zurück.

Wenn wir also die PHP-Parallelitätsleistung von Nginx verbessern wollen, müssen wir diese drei Schritte ausführen.

1. Erhöhen Sie die Anzahl gleichzeitiger Verbindungen von nginx (passen Sie worker_connections und worker_processes in nginx.conf an).

worker_connections: Die maximale Anzahl von Verbindungen, die jeder Arbeitsprozess gleichzeitig verarbeiten (initiieren) kann (einschließlich der Anzahl aller Verbindungen)

worker_processes: Gibt die Anzahl der Prozesse an, die von Nginx geöffnet werden sollen. Laut offizieller Aussage reicht es im Allgemeinen aus, mehrere zu öffnen, um die Auswirkungen von Maschinen-E/A zu verringern. Im Allgemeinen beträgt sie das Ein- bis Zweifache der Gesamtzahl der CPU-Kerne auf dem aktuellen Computer.

Referenz:

Nachdenken über Nginx-Parallelitätsprobleme: Worker_Connections, Worker_Processes und Max Clients

Nginx-Arbeitsprinzip, Optimierung und Lücken

2.调大php-fpm的并发连接数(调php-fpm.conf 的pm.max_children等)。

本人用的是Ubuntu 14.04.4,PHP 5.5.9,以下目录结构对其他服务器环境可能不适用。

由于在 /etc/php5/fpm/php-fpm.conf 中并没有找到 max_children ,于是使用以下命令进行查找:

# 在/etc/php5/fpm 目录下查找所有文件,并依次在每个文件中查找"max_children"
sudo find /etc/php5/fpm -name * | xargs grep "max_children"

终于在 /etc/php5/fpm/pool.d/www.conf 中找到了 max_children 等相关配置。

关于具体配置,请参考以下内容:

(PHP手册)FastCGI 进程管理器(FPM)

php-fpm的配置和优化

PHP-FPM性能优化参考

PHP FPM php-fpm.conf设置详解

3.增加系统的最大文件数量限制(ulimit -n 65535)。

由于NGINX处理PHP请求的第二步需要通过socket的方式和PHP-FPM通信,它能新建的最大socket数受到系统最大打开文件数的限制。新装的Linux默认只有1024,所以必须增加系统最大打开文件数目。

ulimit -n 命令可以查看当前系统最大打开文件数。

ulimit -n 65535 可以将系统最大打开文件数临时修改为65535,然而退出登录后就会失效。

想要修改系统最大打开文件数,并永久生效:

vi /etc/security/limits.conf
        
# 添加如下的行
* soft noproc 11000
* hard noproc 11000
* soft nofile 65535
* hard nofile 65535

说明:

* 代表针对所有用户

noproc 是代表最大进程数

nofile 是代表最大文件打开数

具体配置参考一下内容:

ulimit -n 修改

linux有效修改max open files/ulimit -n


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:substr()-Funktion in PHPNächster Artikel:substr()-Funktion in PHP

In Verbindung stehende Artikel

Mehr sehen