Informationen zur Prozessnummernverwaltung von PHP-FPM

不言
Freigeben: 2023-04-03 07:28:01
Original
2979 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die Prozessnummernverwaltung von PHP-FPM vor, die einen gewissen Referenzwert hat. Jetzt kann ich ihn mit allen teilen, die ihn brauchen.

PHP-FPM

Lassen Sie uns zunächst einige Substantivkonzepte verstehen:

CGI ist Common Gateway Interface(通用网管协议), ein Protokoll, das zur Kommunikation zwischen interaktiven Programmen und Webservern verwendet wird. Es ist dafür verantwortlich, URL-Anfragen zu verarbeiten, einen Prozess zu starten, die vom Client gesendeten Daten als Eingabe zu verwenden, und der Webserver sammelt die Ausgabe des Programms, fügt entsprechende Header hinzu und sendet sie dann an den Client zurück.

FastCGI ist eine erweiterte Version des Protokolls, die auf CGI basiert. Anstatt einen neuen Prozess zur Bearbeitung von Anforderungen zu erstellen, werden persistente Prozesse und erstellte untergeordnete Prozesse verwendet, um eine Reihe von Prozessen zu verarbeiten Wird vom FastCGI-Server verwaltet, weniger Overhead und effizienter.

PHP-FPM wird PHP von FastCGI Process Manager(FastCGI进程管理器) implementiert, das die meisten Zusatzfunktionen von PHP FastCGI ersetzt und für hochbelastete Websites geeignet ist. Unterstützte Funktionen wie:

  1. Erweiterte Prozessmanagementfunktion mit sanftem Stopp/Start

  2. Langsames Protokollierungsskript

  3. Dynamische/statische Unterprozessgenerierung

  4. Konfigurationsdatei basierend auf php.ini

PHP-FPMwurde nach 5.4 In integriert Durch den PHP-Quellcode wird eine bessere PHP-Prozessverwaltungsmethode bereitgestellt, mit der Speicher und Prozesse effektiv gesteuert und die PHP-Konfiguration reibungslos neu geladen werden können. Wenn Sie es verwenden müssen, bringen Sie einfach den Parameter ./configure mit, wenn Sie -enable-fpm verwenden, um den PHP-FPM-Prozess zu steuern: FastCGI

// 支持start/stop/quit/restart/reload/logrotate参数
// quit/reload是平滑终止和平滑重新加载,即等现有的服务完成
./php-fpm --start
Nach dem Login kopieren

konfigurieren Sie PHP-FPM

Die Konfigurationsdatei ist PHP-FPM. In dieser Konfigurationsdatei müssen wir einige Parameter kennen. Alle folgenden Unterprozesse beziehen sich auf den php-fpm.conf-Prozess, der über php-fpm im Terminal angezeigt werden kann. ps aux | grep php

  • Zeigt den repräsentativen Arbeitsunterprozess von

    an (der tatsächlich Anfragen verarbeitet) php-fpm: pool www

  • Zeigt den repräsentativen Masterprozess von

    an ( verantwortlich für Management) Arbeitsunterprozess) php-fpm: process master

Globale Konfiguration

Schauen Sie sich zuerst den

wichtigsten globalen Konfigurationsteil an: PHP-FPM

emergency_restart_threshold

Wenn

oder emergency_restart_interval Ausgangssignale so oft empfangen werden, wie durch diesen Parameter festgelegt, innerhalb der durch SIGSEGV festgelegten Zeit, wird SIGBUS neu gestartet. Der Standardwert ist 0, was bedeutet, dass diese Funktion ausgeschaltet ist. FPM

emergency_restart_interval

Stellen Sie das Intervall für reibungslose Neustarts ein, um das Problem der gemeinsamen Speichernutzung im Beschleuniger zu lösen. Verfügbare Einheiten

, Standardwert ist 0, bedeutet ausgeschaltet. s(默认)/m/h/d

process.max

Die maximale Anzahl an untergeordneten Prozessen, die erstellt werden können. Sie steuert die globale Anzahl an untergeordneten Prozessen, wenn mehrere FPM konfigurierte pm = dynamic Prozesspools verwendet werden. . Der Standardwert ist 0, was bedeutet, dass es keine Begrenzung gibt. php-fpm pool

Prozesspoolkonfiguration Der Rest der Konfiguration von

ist ein Bereich mit dem Namen PHP-FPM. Die Konfiguration dieses Bereichs legt jeden Pool Definitions Prozesspool fest Serienbezogene untergeordnete Prozesse. Dieser Teil beginnt immer mit PHP-FPM, beispielsweise [进程池名称]. [www]

Zu diesem Zeitpunkt kann erklärt werden, dass

in ps aux | grep php angezeigt wird. php-fpm: pool www

pm

bezieht sich auf pm, das angibt, wie der Prozessmanager die Anzahl der untergeordneten Prozesse steuert. Es ist erforderlich und unterstützt 3 Werte: process manager

  • : Verwenden Sie eine feste Anzahl von untergeordneten Prozessen, angegeben durch static pm.max_children

  • : Passen Sie die Anzahl der untergeordneten Prozesse basierend auf dynamisch an folgende Parameternummer, mit mindestens einem untergeordneten Prozess dynamic

    • : Die maximale Anzahl an untergeordneten Prozessen, die gleichzeitig überleben können pm.max_chidren

    • : Die Anzahl der beim Start erstellten untergeordneten Prozesse ist pm.start_serversmin_spare_servers + max_spare_servers - min_spare_servers) / 2

    • : Die Mindestanzahl der inaktiven untergeordneten Prozesse. Der neue untergeordnete Prozess wird automatisch erstellt. pm.min_spare_servers

    • : Die maximale Anzahl inaktiver untergeordneter Prozesse. Bei Überschreitung werden einige untergeordnete Prozesse beendet pm.max_spare_servers

  • : Der untergeordnete Prozess wird nicht beim Start erstellt, sondern erst, wenn eine neue Anfrage eintrifft. Die folgenden zwei Parameter werden verwendet: ondemand

    • pm.max_children

    • t Das Leerlauf-Timeout des untergeordneten Prozesses, Wenn die Zeit abgelaufen ist und keine neuen Anfragen bearbeitet werden können, wird es abgebrochenpm.process_idle_timeou

pm.max_requests

每一个子进程的最大请求服务数量,如果超过了这个值,该子进程会被自动重启。在解决第三方库的内存泄漏问题时,这个参数会很有用。默认值为0,指子进程可以持续不断的服务请求。

PHP-FPM配置优化

PHP-FPM管理的方式是一个master主进程,多个pool进程池,多个worker子进程。其中每个进程池监听一个socket套接字。具体的图示:

Informationen zur Prozessnummernverwaltung von PHP-FPM

其中的worker子进程实际处理连接请求,master主进程负责管理子进程:

1. `master`进程,设置1s定时器,通过`socket`文件监听
2. 在`pm=dynamic`时,如果`idle worker`数量`pm.max_spare_servers`,杀死多余的空闲子进程
4. 在`pm=ondemand`时,如果`idle worker`空闲时间>`pm.process_idle_timeout`,杀死该空闲进程
5. 当连接到达时,检测如果`worker`数量>`pm.max_children`,打印`warning`日志,退出;如果无异常,使用`idle worker`服务,或者新建`worker`服务
Nach dem Login kopieren

保障基本安全

我们为了避免PHP-FPM主进程由于某些糟糕的PHP代码挂掉,需要设置重启的全局配置:

; 如果在1min内有10个子进程被中断失效,重启主进程
emergency_restart_threshold = 10
emergency_restart_interval = 1m
Nach dem Login kopieren

进程数调优

每一个子进程同时只能服务一次连接,所以控制同时存在多少个进程数就很重要,如果过少会导致很多不必要的重建和销毁的开销,如果过多又会占用过多的内存,影响其他服务使用。

我们应该测试自己的PHP进程使用多少内存,一般来说刚启动时是8M左右,运行一段时间由于内存泄漏和缓存会上涨到30M左右,所以你需要根据自己的预期内存大小设定进程的数量。同时根据进程池的数量来看一个进程管理器的子进程数量限制。

测试平均PHP子进程占用的内存:

$ps auxf | grep php | grep -v grep
work     26829  0.0  0.0 715976  4712 ?        Ss   Jul11   0:00 php-fpm: master process (./etc/php-fpm.conf)
work     21889  0.0  0.0 729076 29668 ?        S    03:12   0:20  \_ php-fpm: pool www         
work     21273  0.0  0.0 728928 31380 ?        S    03:25   0:21  \_ php-fpm: pool www         
work     15114  0.0  0.0 728052 29084 ?        S    03:40   0:19  \_ php-fpm: pool www         
work     17072  0.0  0.0 728800 34240 ?        S    03:54   0:22  \_ php-fpm: pool www         
work     22763  0.0  0.0 727904 20352 ?        S    11:29   0:04  \_ php-fpm: pool www         
work     38545  0.0  0.0 727796 19484 ?        S    12:34   0:01  \_ php-fpm: pool www

// 共占用的内存数量
$ps auxf | grep php | grep -v grep | grep -v master | awk '{sum+=$6} END {print sum}'
162712

// 所有的子进程数量
$ ps auxf | grep php | grep -v grep | grep -v master | wc -l 
6
Nach dem Login kopieren

可以看到第6列,每一个子进程的内存占用大概在19-34M之间(单位为KB)。平均的内存占用为162712KB/6 = 27.1M

查看服务器总的内存大小

$ free -g
             total       used       free     shared    buffers     cached
Mem:           157        141         15          0          4        123
-/+ buffers/cache:         13        143
Swap:            0          0          0
Nach dem Login kopieren

可以看出我的服务器总得内存大小是157G(-g采用了G的单位)。

进程数限制

此时如果我们分配全部的内存给PHP-FPM使用,那么进程数可以限制在157000/27 = 5814,但是由于我的服务器同时服务了很多内容,所以我们可以向下调整到512个进程数:

process.max = 512
pm = dynamic
pm.max_children = 512
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_serveres = 30
Nach dem Login kopieren

防止内存泄漏

由于糟糕的插件和库,内存泄漏时有发生,所以我们需要对每一个子进程服务的请求数量做限制,防止无限制的内存泄漏:

pm.max_requests = 1000
Nach dem Login kopieren

重启

如果上面的配置都按照你的实际需求和环境配置好了,不要忘记重启PHP-FPM服务。

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

对于PHP面向对象设计五大原则(SOLID)的总结

对于PhpStorm代码格式化设置的介绍

如何在yii2框架的di容器源码中了解反射的作用

Das obige ist der detaillierte Inhalt vonInformationen zur Prozessnummernverwaltung von PHP-FPM. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage