1. Unix-Domain-Socket-Kommunikation Ich habe die Unix-Domain-Socket-Kommunikationsmethode bereits kurz vorgestellt, siehe: Domain-Socket-Konfigurationsmethode von Nginx+PHP-FPM
Unix-Domain-Socket kann tatsächlich die Leistung der Kommunikation zwischen Nginx und PHP-FPM verbessern, da es nicht durchgeht das Netzwerk, aber in
Es wird instabil sein, wenn die Parallelität hoch ist.
Nginx meldet häufig Fehler: connect() to unix:/dev/shm/php-fcgi . Sock ist beim Herstellen einer Verbindung zum Upstream fehlgeschlagen (11: Ressource vorübergehend nicht verfügbar)
Die Stabilität kann auf die folgenden zwei Arten verbessert werden: 1) Erhöhen Sie den Rückstand in Nginx und PHP-FPM Die Konfigurationsmethode lautet: Fügen Sie unter dem Server dieses Domänennamens in der Nginx-Konfigurationsdatei nach Listen 80 den Standard-Backlog = 1024 hinzu.
Konfigurieren Sie gleichzeitig listen.backlog in php-fpm.conf auf 1024, der Standardwert ist 128.
2) Erhöhen Sie die Anzahl der Sock-Dateien und PHP-FPM-Instanzen Erstellen Sie eine neue Sock-Datei in Nginx Verwenden Sie das Upstream-Modul, um Lastausgleichsanforderungen auf zwei Sätze von PHP-FPM-Instanzen hinter zwei Sock-Dateien zu verteilen. 2.php-fpm-Parameteroptimierung 2.1 Anzahl der Prozesse
php-fpm Anfangs-/Leerlauf-/maximale Anzahl von Worker-Prozessen
pm.max_children = 300 pm.start_servers = 20 pm.min_spare_servers = 5
pm.max_spare_servers = 35
2.2 Maximale Anzahl verarbeiteter Anfragen
Die maximale Anzahl verarbeiteter Anfragen bezieht sich auf ein PHP -fpm worker Der Prozess wird nach der Verarbeitung einer Reihe von Anfragen beendet und der Masterprozess
wird einen neuen neu starten.
Der Hauptzweck dieser Konfiguration besteht darin, Speicherlecks zu vermeiden, die durch
verursacht werden, die durch Bibliotheken von Drittanbietern verursacht werden, auf die der PHP-Interpreter oder das PHP-Programm verweist .
pm.max_requests = 10240
2.3 Maximale Ausführungszeit Die maximale Ausführungszeit kann sowohl in php.ini als auch in php-fpm.conf konfiguriert werden. Die Konfigurationselemente sind max_execution_time bzw. request_terminate_timeout. Informationen zu seiner Rolle und seinen Auswirkungen finden Sie unter: Detaillierte Erklärung der 502- und 504-Fehler in Nginx 3.1CPU Nutzungsüberwachungsmethode 1) Top-Befehl Nachdem Sie den Top-Befehl direkt ausgeführt haben, geben Sie 1 ein, um die CPU-Auslastung jedes Kerns anzuzeigen. Und die Abtastzeit kann um top -d 0,1 verkürzt werden. Der SAR unten scheint nur 1 Sekunde zu sein. 2) sar-Befehl Installation der sar- und iostat-Befehle: sysstat.x86_64: Die sar- und iostat-Systemüberwachungsbefehle yum install -y sysstat.x86_64 Führen Sie sar -P ALL 1 aus 100. -P ALL bedeutet, alle Kerne zu überwachen, 1 bedeutet, alle 1 Sekunde zu sammeln, 100 bedeutet, 100 Mal zu sammeln. Die Ausgabeergebnisse lauten wie folgt: CPU %user %nice %system %iowait %steal %idle alle 85,54 0,00 5,69 0,00 0,00 8,76 0 74,75 0,00 25,25 0,00 0,00. 0,00 1 98,00 0,00 2,00 0,00 0,00 0,00 2 89,22 0,00 3,92 0,00 0,00 6,86 3 91,00 0,00 2,00 0,00 0,00 7,00 4. 75,0 0 0,00 9,00 0,00 0,00 16,00 5 9 4,95 0,00 5,05 0,00 0,00 0,00 6 95,00 0,00 4,00 0,00 0,00 1,00 7 87,88 0,00 4,04 0,00 0,00 8,08 8 93,94 0,00 3,03 0,00 0,00 3,03 9, 88 .00 0,00 3,00 0,00 0,00 9,00 10 89 ,11 0,00 2,97 0,00 0,00 7,92 11 82,35 0,00 3,92 0,00 0,00 13,73 12 73,27 0,00 7,92 0,00 0,00 18,81 13 81,44 0,00 4,12 0,00 0,00 14,43 14 77,23 0,00 6,93 0,00 0,00 15,84 15 78,79 0,00 4,04 0,00 0,00 17,17 3.2 Langsames Protokoll aktivieren Konfigurieren Sie das ausgegebene PHP-FPM-langsame Protokoll. Der Schwellenwert beträgt 2 Sekunden: request_slowlog_timeout = 2 slowlog = log/$pool.log.slow
Verwenden Sie den Befehl sort/uniq um PHP-FPM-Slow-Protokolle zu analysieren und zusammenzufassen: [root@b28-12 log]# grep -v "^$" www.log.slow.tmp |. cut -d " " -f 3,2 | uniq -c |. sort -k1,1nr |. head -n 50 5181 run() /www/test.net/framework/web/filters/CFilter.php:41 5156 filter() /www/test .net/framework/web/filters/CFilterChain .php:131 2670 = /www/test.net/index.php 2636 run() /www/test.net/application/controllers/survey/index .php:665 2630 action( ) /www/test.net/application/controllers/survey/index.php:18 2625 run() /www/test.net/framework/web/actions/CAction .php:75 2605 runWithParams( ) /www/test.net/framework/web/CController.php:309 2604 runAction() /www/test.net/framework/web/filters/CFilterChain.php :134 2538 run() / www/test.net/framework/web/CController.php:292 2484 runActionWithFilters() /www/test.net/framework/web/CController.php:266 2251 run() /www/test.net/framework/web/CWebApplication.php:276 1799 Translate() /www/test.net/application/libraries/Limesurvey_lang.php:118 1786 load_tables() /www/test.net/application/third_party/php-gettext/gettext.php:254 1447 runController() /www/test.net/framework/web/CWebApplication.php:135 Parametererklärung: sort: Wörter sortieren uniq -c: Eindeutige Zeilen anzeigen und am Anfang jeder Zeile angeben, wie oft diese Zeile in der Datei vorkommt sort -k1,1nr: Entsprechend Das erste Feld ist numerisch sortiert und in umgekehrter Reihenfolge head -10: Holen Sie sich die ersten 10 Datenzeilen 3.3 Verwenden Sie Strace, um den Prozess zu verfolgen 1) Verwenden Sie Nohup, um Strace zu konvertieren zur Hintergrundausführung, bis der PHP-FPM-Prozess beim Anhängen stirbt:
nohup strace -T -p 13167 > 13167-strace.log &
Parameterbeschreibung: -c zählt die Ausführungszeit, Anzahl und Fehlerzeiten jedes Systemaufrufs -d gibt Strace-Debugging-Informationen zu Standardfehlern aus. -f Verfolgt den durch den fork-Aufruf generierten untergeordneten Prozess. -o Dateiname. Die Tracking-Ergebnisse aller Prozesse werden in den entsprechenden Dateinamen ausgegeben. -F versucht, den vfork-Aufruf zu verfolgen. Wenn -f, ist vfork nicht Trace. -h Gibt kurze Hilfeinformationen aus. -i Gibt den Eingabezeiger des Systemaufrufs aus. -q Deaktiviert die Ausgabe von Meldungen über die Trennung. -r Gibt die relative Zeit über,, aus. Jeder Ein Systemaufruf. -t Zeitinformationen vor jeder Zeile in der Ausgabe hinzufügen. -ttt Mikrosekundenebene Sekunden. -T zeigt die von jedem Aufruf verbrauchte Zeit an. -v gibt alle Systemaufrufe aus. Aufgrund der häufigen Verwendung erfolgt die Ausgabe nicht. -V Gibt Informationen zur Strace-Version aus. -x Gibt nicht standardmäßige Zeichenfolgen in hexadezimaler Form aus. -xx Alle Zeichenfolgen werden in hexadezimaler Form ausgegeben. - Eine Spalte legt die Ausgabeposition von fest Der Rückgabewert ist 40. -e execve zeichnet nur Systemaufrufe wie execve -p Hauptprozessnummer
2) Sie können auch den Parameter -c verwenden, damit strace beim Zusammenfassen hilft, was sehr praktisch und leistungsstark ist! [root@b28-12 log]# strace -cp 9907 Prozess 9907 angehängt – zum Beenden unterbrechen Prozess 9907 getrennt % Zeit Sekunden usecs/Aufruf Aufrufe Fehler Systemaufruf --- --- ----------- ----------- --------- --------- ------- ------- 2.71 0.000796 1 671 open 2.54 0.000745 0 2453 fcntl 2.37 0.000696 1 1141 write 1.69 0.000497 1 593 13 access 1.37 0.000403 0 1816 lseek 0.89 0.000262 1 451 22 sendto 0.56 0.000163 1 276 208 lstat 0.49 0.000145 0 384 getcwd 0.31 0.000090 0 1222 fstat 0.28 0.000082 0 173 munmap 0.26 0.000077 0 174 mmap 0.24 0.000069 2 41 socket 0,23 0,000068 0 725 Schließen 0,00 0,000000 0 13 RT_SIGACTACE 0,00 0,000000 0 13 RT_SIGPROCMASK 0,00 0,000000 0 1 RT_SIGRETURN 0,0000000000 0 78 SETITIMER 0,00000000 🎜 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26 26). > 00,000,00 0,000000 0 26 Shutdown 0,00 0,000000 0 13 bind 0,0 0 0,000000 0 13 getsockname 0,00 0,000000 0 65 setsockopt 0,00 00 0 13 getockopt 0,00 0,000000 0 8 8 getdents 0.00 0.000000 0 26 chdir 0.00 0.000000 1 futex ------ ----------- ----------- ------- - - ------------------------- 100,00 0,029344 18000 986 insgesamt ps: Sie können Strace verwenden, um die Interpretation und Ausführung zu lernen Prozess des PHP-Interpreters 3.4 PHP-Interpretation und -Ausführung beschleunigen Wenn tatsächlich kein Problem mit Ihrem Programm vorliegt, führt es einfach zu viele Operationen aus und kann nicht mehr optimiert werden. Erwägen Sie dann die Verwendung eines PHP-Beschleunigers wie APC oder xcache, um die Zeit zu verkürzen, die die CPU für die Interpretation von PHP-Dateien benötigt. Diese PHP-Beschleuniger generieren Zwischencode-Opcode, wenn die PHP-Datei zum ersten Mal interpretiert wird, sodass die nachfolgende Ausführung viel schneller erfolgt und einige CPU-Vorgänge reduziert werden. Nehmen wir xcache als Beispiel. Sehen wir uns an, wie man es installiert und konfiguriert. Der Befehl zum Installieren von xcache lautet wie folgt. Es gibt viele Parameter in ./configure und ich weiß nicht, wofür sie verwendet werden. Auf der offiziellen Website gibt es keine Erklärung, daher habe ich einfach --enable- aktiviert. xcache: tar zxvf xcache-3.0.3.tar .gz /usr/local/php/bin/phpize ./configure --with-php-c/local/php/bin/php -config --enable-xcache make Die Konfiguration in make install php.ini ist wie folgt. Die wichtigsten sind die beiden rot markierten Parameter. Es wird allgemein empfohlen, xcache.size zu bestimmen entsprechend der Anzahl der PHP-Dateien entspricht xcache.count der Anzahl der CPU-Kerne:
[xcache.admin] xcache.admin.enable_auth = Aus xcache.admin.user = "xcache" xcache.admin.pass = "" [xcache] xcache.shm_scheme ="mmap" xcache.size=1024M xcache.count =16 xcache.slots =8K xcache.ttl=0 xcache.gc_interval = 0 xcache.var_size=16M xcache.var_count =1 xcache.var_slots =8K xcache.var_ttl=0 xcache.var_maxttl=0 xcache.var_gc_interval =300 xcache.test =Aus xcache.readonly_protection = Aus ;xcache.readonly_protection = Ein xcache.mmap_path ="/dev/zero" ; 🎜>xcache.optimizer =Aus [xcache.coverager] ;;xcache.coverager =On ;;xcache.coveragedump_directory =""
Ein häufiges Problem ist das Beim Starten von php-fpm wird ein Fehler gemeldet: Die von xcache.mmap_path festgelegte Datei kann nicht geöffnet oder erstellt werden. Überprüfen Sie die Pfadberechtigung oder überprüfen Sie xcache.size/var_size anhand der Systemeinschränkung.Dies liegt daran, dass/tmp/xcache vorhanden ist eine Datei und kann nicht als Verzeichnis erstellt werden. Beobachten Sie nach dem Neustart des PHP-FPM-Dienstes mit dem Befehl top, dass die VIRT (einschließlich des Swap-Bereichs) jedes Arbeitsprozesses die Größe von xcache.size hat, die REQ jedoch sehr klein wird. Die Verwendung der oben genannten Konfiguration hat die Spitzenzeit der CPU-Auslastung verkürzt, aber alle Kerne erreichen in der Spitze immer noch mehr als 90 %. Ich weiß nicht, ob es keine richtige Konfiguration gibt. Außerdem führt die Konfigurationsmethode /dev/zero bei hoher Parallelität häufig zu Nginx 502-Fehlern. /tmp/xcache und die Aktivierung von readonly_protection sind sehr stabil.
4.php-Programmleistungsüberwachung
Die übliche Methode besteht darin, die Leistungsüberwachungsfunktion von xdebug zu aktivieren und die xdebug-Ausgabeergebnisse über die WinCacheGrind-Software zu analysieren. Informationen zur Installation von xdebug und zur Methode zum Debuggen mit der IDE finden Sie unter: Vim+XDebug debugging PHP Diese in php.ini konfigurierten Elemente geben Leistungsinformationen aus: xdebug.auto_trace = on
xdebug.auto_profile = on xdebug.collect_params = on xdebug.collect_return = on xdebug .profiler_enable = on xdebug.trace_output_dir = "/tmp" xdebug.profiler_output_dir ="/tmp"
Auf diese Weise wird XDebug Geben Sie die Leistungsdaten aller ausgeführten PHP-Funktionen aus, die generierten Dateien sind jedoch größer. Sie können einige Optionen wie „collect_params“, „collect_return“ und deaktivieren, um die Menge der Ausgabedaten zu reduzieren. Oder schalten Sie die automatische Ausgabe aus und überwachen Sie die angegebene Funktion, indem Sie die xdebug-Funktion am Anfang und am Ende der Funktion aufrufen, die Sie überwachen möchten. Die Namen der Ausgabedateien ähneln „cachegrind.out.1277560600“ und „trace.3495983249.txt“, die für die grafische Analyse mit WinCacheGrind auf der Windows-Plattform abgerufen werden können. Es gibt viele Einführungen zur Verwendung von WinCacheGrind im Internet, daher werde ich sie hier nicht im Detail erklären. -c zählt die Ausführungszeit, Anzahl und Fehler jedes Systemaufrufs. -d gibt Strace-Debugging-Informationen zu Standardfehlern aus. -o Dateiname , die Tracking-Ergebnisse aller Prozesse werden in den entsprechenden Dateinamen ausgegeben. -F versucht, vfork-Aufrufe zu verfolgen. Wenn -f, wird vfork nicht nachverfolgt. -i Drucken der Eingabezeiger des Systemaufrufs. -q Deaktiviert die Ausgabe von Meldungen über die Trennung. -t gibt für jede Zeile in der Ausgabe Zeitinformationen aus Jede Zeile in der Ausgabe. -tt Zeitinformationen vor jeder Zeile in der Ausgabe hinzufügen. -ttt Ausgabe auf Mikrosekundenebene, die die Zeit in Sekunden ausdrückt Ein Aufruf. -v gibt alle Systemaufrufe, die sich auf Umgebungsvariablen, Status, Eingabe und Ausgabe usw. beziehen, aufgrund häufiger Verwendung nicht aus. -x Nicht standardmäßige Zeichenfolgen in hexadezimaler Form ausgeben -xx Alle Zeichenfolgen werden in hexadezimaler Form ausgegeben -a Spalte Legen Sie die Ausgabeposition des Rückgabewerts fest. -e execve zeichnet nur Systemaufrufe wie execve
-p Hauptprozessnummer
Copyright-Erklärung: Dies Der Artikel ist ein Originalartikel des Bloggers und darf nicht ohne die Erlaubnis des Bloggers reproduziert werden.
|