Dieser Artikel gibt Ihnen eine detaillierte Einführung in PHP-FMP. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
$_POST,$_GET,$_SERVER
einige Anfrageinformationen erhalten? Auf welches Format sollten wir uns bei der Zusammenstellung von Daten beziehen? $_POST,$_GET,$_SERVER
获取一些请求信息呢?我们应该参照什么格式去组装数据呢?其实我们知道,每种动态语言,也就是解释性语言,都需要通过对应的解析器才能被服务器(这里指web服务器)识别,但是解释器和服务器 必须遵循某种协议,双方才能够正常通信,那么这种协议就是CGI协议,但是CGI的机制是每响应一次web请求,都会创建和初始化一个新的处理进程,请求结束就kill掉这个进程。那每次请求,都要执行这三步 创建->初始化->结束,那其实这个过程不仅浪费了资源,而且效率也很低。那怎么办?FastCGI应时而生,作为CGI的改良版本,FastCGI会启动一个常驻服务进程,这个进程不需要管理生命周期,也就避免了进程的重复的创建和结束,另一方面,不需要再重复的读取环境变量,每当有web请求过来,由FastCGI管理器,也就那个常驻服务进程去启动CGI解释器进程
1.修改php.ini 后必须重启PHP-CGI才可以生效,而不能实现平滑重启 2.直接干掉PHP-CGI,php就不能运行了,这显然是不能接受的 3.这玩意不会自己管理进程,它只能解析请求,返回结果
那么FastCGI都已经到来了,php的FastCGI还会远吗,当然不会,到 2004年一个叫 Andrei Nigmatulin的屌丝发明了PHP-FPM,PHP-FMP 全名叫做PHP-FASTCGI Process Manager,说白了就是php定制版的FastCGI(这里强调一下,不管是PHP-CGI 还是 PHP-FPM都是为了实现CGI协议,而不是一种新的协议),其实有一句话刚才我没说,网上很多人说PHP-CGI 就是 php管理FAST-CGI的一种程序,那你现在知道了PHP-FMP 全名叫做PHP-FASTCGI Process Manager之后,你可以理直气壮的跟他们说no,并给他们普及一下这个知识点了。
netstat -nap | grep master的进程号
查看端口信息(9000端口其实就是tcp的通信方式,而socket是说的unix socket,从效率上来说,unix socket显然是最好的,因为它是进程之间的通信,但是unix socket要保证是在一台服务器,如果是不同机器之间的通信,还是要使用tcp通信)以socker通信为栗子,nginx的conf文件里面,可以看到下面这段信息
location ~ [^/]\.php(/|$) { try_files $uri =404; fastcgi_pass unix:/tmp/php-cgi.sock; fastcgi_index index.php; include fastcgi.conf; }
相信这段信息大家都可以看明白,/tmp/php-cgi.sock 就是php和nginx联系的桥梁,同时我们也看到了include fastcgi.conf
Der Master-Prozess
🎜🎜Master ist für die Prozessplanung verantwortlich (z. B. wenn nicht genügend Arbeitsprozesse vorhanden sind, einen untergeordneten Prozess verzweigen)🎜🎜ist für den Überwachungsport verantwortlich, normalerweise 9000, der in der Konfigurationsdatei festgelegt werden kann. Natürlich gibt es eine andere Möglichkeit, Socket zu verwenden. Sie können die Portinformationen übernetstat -nap | Aus Effizienzgründen ist der Unix-Socket offensichtlich der beste, da es sich um die Kommunikation zwischen Prozessen handelt, aber der Unix-Socket muss sich auf einem Server befinden. Wenn es sich um eine Kommunikation zwischen verschiedenen Computern handelt, muss weiterhin TCP-Kommunikation verwendet werden 🎜< img src="https://img.php.cn/upload/image/580/923/449/162314820071892In diesem Artikel erhalten Sie eine ausführliche Analyse von PHP-FMP" title="162314820071892In diesem Artikel erhalten Sie eine ausführliche Analyse von PHP-FMP" alt="In diesem Artikel erhalten Sie eine ausführliche Analyse von PHP-FMP"/>🎜🎜<img src= "https://img.php.cn/upload/image/234/712/155/1623148204834768.png" title="1623148204834768.png" alt="In diesem Artikel erhalten Sie eine ausführliche Analyse von PHP-FMP"/>🎜🎜🎜Erhalten Sie Anfragen von der server🎜 🎜<h5 data-id="heading-3">🎜Sie können den Arbeitsfortschritt schon am Namen erkennen, es handelt sich um die echte Arbeiterklasse, in der der Code tatsächlich ausgeführt wird🎜</h5>🎜<img src="https://img. php.cn/upload/image/832/290/180/1623148208896465.png" title="1623148208896465.png" alt="In diesem Artikel erhalten Sie eine ausführliche Analyse von PHP-FMP"/>🎜🎜🎜Lassen Sie uns einen Blick darauf werfen Wie php-fmp und nignx kommunizieren🎜 🎜🎜 Am Beispiel der Socker-Kommunikation können Sie in der conf-Datei von nginx die folgenden Informationen sehen 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">root@6d05153a8988:/usr/local/nginx/conf# cat fastcgi.conf
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REQUEST_SCHEME $scheme;
fastcgi_param HTTPS $https if_not_empty;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
fastcgi_param PHP_ADMIN_VALUE "open_basedir=NULL";</pre><div class="contentsignin">Nach dem Login kopieren</div></div>🎜 Ich glaube, dass jeder diese Informationen verstehen kann ist die Brücke zwischen PHP und Nginx. Gleichzeitig haben wir auch <code>include fastcgi.conf
gesehen, werfen wir einen Blick darauf🎜root@6d05153a8988:/usr/local/php/etc# cat php-fpm.conf [global] pid = /usr/local/php/var/run/php-fpm.pid error_log = /usr/local/php/var/log/php-fpm.log log_level = notice [www] listen = /tmp/php-cgi.sock listen.backlog = -1 listen.allowed_clients = 127.0.0.1 listen.owner = www listen.group = www listen.mode = 0666 user = www group = www # 如何控制子进程,选项有static和dynamic #区别: #如果dm设置为 static,那么其实只有pm.max_children这个参数生效。系统会开#启设置数量的php-fpm进程。 #如果dm设置为 dynamic,那么pm.max_children参数失效,后面3个参数生效。 #系统会在php-fpm运行开始 的时候启动pm.start_servers个php-fpm进程, #然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之#间调整php-fpm进程数。 pm = dynamic # 静态方式下开启的php-fpm进程数量 pm.max_children = 20 # 动态方式下的起始php-fpm进程数量 pm.start_servers = 10 # 动态方式下的最小php-fpm进程数 pm.min_spare_servers = 10 # 动态方式下的最大php-fpm进程数量 pm.max_spare_servers = 20 # php-fpm子进程能处理的最大请求数 pm.max_requests = 1024 pm.process_idle_timeout = 10s request_terminate_timeout = 100 request_slowlog_timeout = 0 slowlog = var/log/slow.log
# 强制关闭 pkill php-fpm kill -INT `cat /usr/local/php/var/run/php-fpm.pid` kill -INT [pid] # 平滑重启 其实就是通过创建新的进程使 php.ini 生效 kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` kill -USR2 [pid]
启动: /usr/local/php/sbin/php-fpm
查看进程数: ps aux | grep -c php-fpm
查看mater进程号:ps aux|grep 'php-fpm: master'|grep -v grep|awk '{print $2}'
或者cat /usr/local/php/var/run/php-fpm.pid
# 强制关闭 pkill php-fpm kill -INT `cat /usr/local/php/var/run/php-fpm.pid` kill -INT [pid] # 平滑重启 其实就是通过创建新的进程使 php.ini 生效 kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid` kill -USR2 [pid]
至此,php-fpm 算是说完了,其实通过上面的解说,大家也会明白一个问题,为什么lnmp 承受的并发比lamp高,除了nginx的高性能之外,php-fpm 是不是也是其中的一个原因呢?
推荐学习:《PHP视频教程》
Das obige ist der detaillierte Inhalt vonIn diesem Artikel erhalten Sie eine ausführliche Analyse von PHP-FMP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!