Heim  >  Artikel  >  Backend-Entwicklung  >  Optimierungstipps für Nginx+PHP-FPM

Optimierungstipps für Nginx+PHP-FPM

不言
不言Original
2018-05-07 11:29:472471Durchsuche

In diesem Artikel werden hauptsächlich die Optimierungsfähigkeiten von Nginx + PHP-FPM vorgestellt, die einen gewissen Referenzwert haben. Jetzt können Freunde in Not darauf zurückgreifen.

Nginx + PHP-FPM-Optimierungsfähigkeiten Zusammenfassung

Hier ist ein Artikel, den ich im Internet gefunden habe. Ich habe ihn sorgfältig geübt. Da das Layout des vorherigen Artikels sehr verwirrend ist, werde ich ihn neu schreiben Während des Studiums dieses Artikels liegen alle Urheberrechte beim ursprünglichen Autor.

Unix-Domain-Socket-Kommunikation

Ich habe diese Kommunikationsmethode zuvor kurz vorgestellt, siehe: Unix Domain Socket Domain-Nginx+PHP-FPM-Konfigurationsmethode SocketDomäne
das Netzwerk nicht nutzt, kann es zwar die Kommunikationsleistung zwischen Unix und Socket verbessern, ist jedoch instabil, wenn die Parallelität hoch ist. Nginxphp-fpm
meldet häufig Fehler:

connect() to unix:/dev/shm/php-fcgi.sock failed (11: Resource temporarily unavailable) while connecting to upstream
Nginx

Sie können die Stabilität auf zwei Arten verbessern:

1 und Die Konfigurationsmethode von

in nginx lautet: Fügen Sie unter php-fpm dieses Domänennamens in der backlog-Konfigurationsdatei
nach nginx hinzu. serverKonfigurieren Sie gleichzeitig listen 80 in default backlog=1024 als
, und der Standardwert ist php-fpm.conf. listen.backlog2. Erhöhen Sie die Anzahl der 1024-Dateien und 128-Instanzen und erstellen Sie in
einen Lastausgleich für die beiden sock-Dateien php-fpm > Modul. Zwei Sätze von sock Instanzen. NginxupstreamPHP-FPM-Parameteroptimierungsock
2.1 Anzahl der Prozessephp-fpm
# php-fpm初始/空闲/最大worker进程数
 pm.max_children = 300
 pm.start_servers = 20
 pm.min_spare_servers = 5
 pm.max_spare_servers = 35
2.2 Maximale Anzahl der Verarbeitungsanforderungen

Die maximale Anzahl der Verarbeitungsanforderungen bezieht sich auf einen

Der Prozess wird nach der Bearbeitung einer bestimmten Anzahl von Anfragen abgebrochen

Der Prozess wird

mit einer neuen Anfrage neu gestartet.

Der Hauptzweck dieser Konfiguration besteht darin, Speicherverluste zu vermeiden, die durch php-fpm Bibliotheken von Drittanbietern verursacht werden, auf die der Interpreter oder das Programm verweist worker

pm.max_requests = 10240
master2.3 Maximale Ausführungszeit respawn
Die maximale Ausführungszeit ist in php und

konfigurierbar, und die Konfigurationselemente sind

bzw.

.

Informationen zu Funktion und Auswirkungen finden Sie unter: Detaillierte Erklärung der 502- und 504-Fehler in Nginxphp.iniphp-fpm.confMethode zur Fehlerbehebung bei hoher CPU-Auslastung von PHP-FPMmax_execution_timerequest_terminate_timeout1

oberer Befehl:

Nachdem Sie den Befehl

direkt ausgeführt haben, geben Sie 1 ein, um die

-Nutzung jedes Kerns anzuzeigen. Darüber hinaus kann die Probenahmezeit durch verkürzt werden. Der folgende
scheint mindestens 1 Sekunde lang zu sein topCPUtop -d 0.1sar-Befehl:
sar

# sar和iostat命令的安装:
 sysstat.x86_64 : The sar and iostat system monitoring commands
 yum install -y sysstat.x86_64
 
# 执行sar -P ALL 1 100。-P ALL表示监控所有核心,1表示每1秒采集,100表示采集100次。
# 输出结果如下:
CPU     %user     %nice   %system   %iowait    %steal     %idle
all     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.00      0.00      9.00      0.00      0.00     16.00
  5     94.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

2. Aktivieren Sie die langsame Protokollierung

Konfigurationsausgabe Langsames Protokoll, der Schwellenwert beträgt 2 Sekunden:

request_slowlog_timeout = 2
slowlog = log/$pool.log.slow

Verwenden Sie den Befehl sort/uniq, um das langsame PHP-FPM-Protokoll zu analysieren und zusammenzufassen:

php-fpm

[root@boole log] grep -v "^$" www.log.slow.tmp | cut -d " " -f 3,2 | sort | 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
 
# 参数解释:
     sort:  对单词进行排序
     uniq -c:  显示唯一的行,并在每行行首加上本行在文件中出现的次数
     sort -k1,1nr:  按照第一个字段,数值排序,且为逆序
     head -10:  取前10行数据

3 . Verwenden Sie strace, um den Prozess zu verfolgen

1. Verwenden Sie , um

in die Hintergrundausführung zu übertragen, bis der

-Prozess auf

stirbt:

nohup strace -T -p 13167 > 13167-strace.log &
# 参数说明:
-c 统计每一系统调用的所执行的时间,次数和出错的次数等.
-d 输出strace关于标准错误的调试信息.
-f 跟踪由fork调用所产生的子进程.
-o filename,则所有进程的跟踪结果输出到相应的filename
-F 尝试跟踪vfork调用.在-f时,vfork不被跟踪.
-h 输出简要的帮助信息.
-i 输出系统调用的入口指针.
-q 禁止输出关于脱离的消息.
-r 打印出相对时间关于,,每一个系统调用.
-t 在输出中的每一行前加上时间信息.
-tt 在输出中的每一行前加上时间信息,微秒级.
-ttt 微秒级输出,以秒了表示时间.
-T 显示每一调用所耗的时间.
-v 输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.
-V 输出strace的版本信息.
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出.
-a column
设置返回值的输出位置.默认为40.
-e execve 只记录 execve 这类系统调用
-p 主进程号
nohup 2. Sie können auch verwenden straceParameter werden durch attach zusammengefasst, was sehr praktisch und leistungsstark ist! php-fpm
[root@b28-12 log]# strace -cp 9907
Process 9907 attached - interrupt to quit
Process 9907 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
56.61    0.016612           5      3121           read
11.11    0.003259           1      2517       715 stat
  8.04    0.002358           7       349           brk
  6.02    0.001767           1      1315           poll
  4.28    0.001255           6       228           recvfrom
  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           close
  0.00    0.000000           0        13           rt_sigaction
  0.00    0.000000           0        13           rt_sigprocmask
  0.00    0.000000           0         1           rt_sigreturn
  0.00    0.000000           0        78           setitimer
  0.00    0.000000           0        26        26 connect
  0.00    0.000000           0        15         2 accept
  0.00    0.000000           0        39           recvmsg
  0.00    0.000000           0        26           shutdown
  0.00    0.000000           0        13           bind
  0.00    0.000000           0        13           getsockname
  0.00    0.000000           0        65           setsockopt
  0.00    0.000000           0        13           getsockopt
  0.00    0.000000           0         8           getdents
  0.00    0.000000           0        26           chdir
  0.00    0.000000           0         1           futex
------ ----------- ----------- --------- --------- ----------------
100.00    0.029344                 18000       986 total

4. Beschleunigen Sie die PHP-Interpretation und -Ausführung

-cWenn 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 von PHP-Beschleunigern wie strace oder

, um die Zeit zu verkürzen, die

zum Interpretieren von

-Dateien benötigt.
Diese APC Beschleuniger generieren Zwischencode xcache, wenn die CPU-Datei zum ersten Mal interpretiert wird, sodass die nachfolgende Ausführung viel schneller erfolgt und einige php-Vorgänge reduziert werden. Nehmen wir
als Beispiel und sehen wir uns an, wie PHP installiert und konfiguriert wird. phpopcode Der Befehl zum Installieren von CPU lautet wie folgt. Es gibt viele Parameter von xcache und ich weiß nicht, wofür sie verwendet werden. Auf der offiziellen Website gibt es keine Erklärung, daher aktiviere ich sie
:
 tar zxvf xcache-3.0.3.tar.gz
     /usr/local/php/bin/phpize
     ./configure --with-php-config=/usr/local/php/bin/php-config --enable-xcache
     make
     make install

xcache Die wichtigsten sind die beiden rot markierten Parameter. Es wird generell empfohlen, ./configure entsprechend der Anzahl der --enable-xcache-Dateien zu bestimmen .

und

haben die gleiche Anzahl an Kernen: php.ini

[xcache.admin]
xcache.admin.enable_auth = Off
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 =Off
xcache.readonly_protection = Off
;xcache.readonly_protection = On
xcache.mmap_path ="/dev/zero"
;xcache.mmap_path ="/tmp/xcache"
xcache.coredump_directory =""
xcache.cacher =On
xcache.stat=On
xcache.optimizer =Off
 
[xcache.coverager]
;;xcache.coverager =On
;;xcache.coveragedump_directory =""
xcache.sizeFAQ Beim Starten von php wird ein Fehler gemeldet: xcache.count
Cannot open or create file set by xcache.mmap_path, check the path permission or check xcache.size/var_size against system limitation
CPU Dies liegt daran, dass

ein ist Datei und kann nicht als Verzeichnis erstellt werden.

php-fpm Nachdem Sie den

-Dienst neu gestartet haben, verwenden Sie den Befehl

, um zu beobachten, dass der /tmp/xcache (einschließlich des

-Bereichs) jedes

-Prozesses die Größe von , aber das php-fpm Es wurde sehr klein. topDie Verwendung der oben genannten Konfiguration hat die Spitzenzeit der worker-Nutzung verkürzt, aber alle Kerne werden zur Spitzenzeit immer noch über VIRT hinausreichen. Ich weiß nicht, ob es keine richtige Konfiguration gibt. swapDarüber hinaus führt xcache.sizediese Konfigurationsmethode bei hoher Parallelität häufig zu REQFehlern.
und Einschalten CPU sind sehr stabil. 90%

php程序性能监控

常用的方法就是开启xdebug的性能监控功能,将xdebug输出结果通过WinCacheGrind软件分析。
xdebug的安装和配合IDE调试的方法参见:Vim+XDebug调试PHP

php.ini中配置的这几项是输出性能信息的:

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"

这样XDebug会输出所有执行php函数的性能数据,但产生的文件也会比较大。可以关闭一些选项如collect_params、collect_return,
来减少输出的数据量。或者关闭自动输出,通过在想要监控的函数首尾调用xdebug函数来监控指定的函数。

输出的文件名类似cachegrind.out.1277560600trace.3495983249.txt,可以拿到Windows平台下用WinCacheGrind进行图形化分析。
WinCacheGrind使用方法网上有很多介绍,这里就不详细说明了,WinCacheGrind for github

Optimierungstipps für Nginx+PHP-FPM

结束语

以上都是近期做php程序优化工作总结出的一些优化方法,针对每个地方的配置请详细阅读官方文档进行修改,并不一定要以本文为依据,本文档只阐述方法

相关推荐:

Nginx+Php-fpm运行原理详解


Das obige ist der detaillierte Inhalt vonOptimierungstipps für Nginx+PHP-FPM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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