cgi、fastcgi、php-cgi、php-fpm剖析
这篇文章介绍的内容是关于cgi、fastcgi、php-cgi、php-fpm剖析,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
定义
首先,CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的,方便CGI程序的编写者。
web server(比如说nginx)只是内容的分发者。比如,如果请求
/index.html
,那么web server会去文件系统中找到这个文件,发送给浏览器,这里分发的是静态数据。好了,如果现在请求的是/index.php
,根据配置文件,nginx知道这个不是静态文件,需要去找PHP解析器来处理,那么他会把这个请求简单处理后交给PHP解析器。Nginx会传哪些数据给PHP解析器呢?url要有吧,查询字符串也得有吧,POST数据也要有,HTTP header不能少吧,好的,CGI就是规定要传哪些数据、以什么样的格式传递给后方处理这个请求的协议。仔细想想,你在PHP代码中使用的用户从哪里来的。当web server收到
/index.php
这个请求后,会启动对应的CGI程序,这里就是PHP的解析器。接下来PHP解析器会解析php.ini文件,初始化执行环境,然后处理请求,再以规定CGI规定的格式返回处理后的结果,退出进程。web server再把结果返回给浏览器。
好了,CGI是个协议,跟进程什么的没关系。那fastcgi又是什么呢?Fastcgi是用来提高CGI程序性能的。
提高性能,那么CGI程序的性能问题在哪呢?"PHP解析器会解析php.ini文件,初始化执行环境",就是这里了。标准的CGI对每个请求都会执行这些步骤(不闲累啊!启动进程很累的说!),所以处理每个时间的时间会比较长。这明显不合理嘛!那么Fastcgi是怎么做的呢?首先,Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复的劳动,效率自然是高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是fastcgi的对进程的管理。
cgi
通用网关接口,外部程序与web服务器之间的接口标准,是在cgi程序和web服务器之间传递信息的过程
每一次请求都会生成一个cgi进程,cgi程序执行完,进程退出
独立于服务器、独立编程语言
FastCgi
FastCgi 像是一个常驻型的Cgi,它可以一直执行这,只要激活后,不需要每次去fork一次,还支持分布式运算,即FastCgi程序可以在网站服务器以外的主机上执行并且接受来自其他网站服务器的请求
可以同时处理多个请求
长期占用内存
php-cgi
php官方自带的FastCGI 进程管理器
php.ini修改之后,必须kill掉php-cgi再启动php.ini 才生效。不可以平滑的重启
内存不能动态分配
php-fpm
非官方fastCgi进程管理器,后来php5.4开始,被官方收录了,编译php的时候只需要–enable-fpm 就可以开启php-fpm
可以平滑重启php
动态调度进程
Nginx只负责反向代理/请求转发,不负责管理php-cgi进程,所以Nginx一般配合能够自行管理工作进程(子进程)的php-fpm使用.
需要注意的是,php-fpm是一个独立的SAPI,其管理的不是php-cgi,也就是说php-fpm跟php-cgi无关,php-fpm内置php解释器,php-fpm的子进程是自己fork出来的,并不会调用php-cgi,你把系统中的php-cgi删了也不会影响到php-fpm服务的正常运行.
php-fpm在pm = static配置下工作进程常驻后台,也就是如果你配置了5个工作进程pm.max_children = 5,那php-fpm服务启动时就会自动fork出5个子进程并常驻后台,不会在请求处理结束后退出,也不会在空闲时退出.如果你在php脚本中使用了数据库持久连接,这时这5个工作进程还会建立并维持5个到数据库的持久连接,实现在处理多个请求的时候重用数据库连接资源,避免每个请求都建立/释放一次数据库连接.持久连接还能做到超时自动重连,对php-fpm里的脚本来说是完全透明的,脚本只需在启动时指明使用持久连接即可.
php-fpm在pm = dynamic配置下工作进程【部分】常驻后台,也就是维持一定数量的常驻进程,服务繁忙时fork出更多的进程,服务闲置时自动关掉一些进程,把内存资源归还给操作系统.虚拟主机提供商应该是比较喜欢这种方式的.
总而言之,PHP-FPM这种运行模式类似于Apache的prefork MPM,能静能动的多进程网络服务.
php-cgi是早期php官方出品的fastcgi管理器,不支持平滑重启,改了php.ini就要kill掉原来的php-cgi再重新启动才能生效;不支持动态worker调度,只能一开始指定要起几个worker。
php-fpm是从5.3.3才加入的fastcgi进程管理器,加入了动态调度功能,可以根据请求来访压力变化动态增减worker进程数量;支持reload指令,让worker进程在完成当前请求后重启,并应用php.ini新配置。
php54是之前是一种关系,php54之后另一种关系。
php54之前,php-fpm(第三方编译)是管理器,php-cgi是解释器
php54之后,php-fpm(官方自带),master 与 pool 模式。php-fpm 和 php-cgi 没有关系了。php-fpm又是解释器,又是管理器
参考网站https://www.zhihu.com/question/55835080
https://segmentfault.com/q/1010000000256516
相关推荐:
linux查看nginx、apache、php、php-fpm、mysql及配置项所在目录
Atas ialah kandungan terperinci cgi、fastcgi、php-cgi、php-fpm剖析. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Cara menggunakan php-fpm untuk penalaan berprestasi tinggi PHP ialah bahasa skrip sebelah pelayan yang sangat popular yang digunakan secara meluas untuk membangunkan aplikasi web dan tapak web dinamik. Walau bagaimanapun, apabila trafik meningkat, prestasi aplikasi PHP anda mungkin terjejas. Untuk menyelesaikan masalah ini, kita boleh menggunakan php-fpm (FastCGIProcessManager) untuk penalaan berprestasi tinggi. Artikel ini akan memperkenalkan cara menggunakan php-fpm untuk meningkatkan prestasi aplikasi PHP dan menyediakan contoh kod. satu,

Cara menggunakan pengoptimuman PHP-FPM untuk meningkatkan prestasi aplikasi PrestaShop Dengan perkembangan pesat industri e-dagang, PrestaShop telah menjadi platform e-dagang yang dipilih oleh ramai peniaga. Walau bagaimanapun, apabila saiz kedai bertambah dan bilangan lawatan bertambah, aplikasi PrestaShop mungkin menghadapi kesesakan prestasi. Untuk meningkatkan prestasi aplikasi PrestaShop, kaedah biasa ialah menggunakan PHP-FPM untuk mengoptimumkan dan meningkatkan keupayaan pemprosesan aplikasi. PHP-FPM (FastCGI

Cara Meningkatkan Prestasi Aplikasi WooCommerce Menggunakan Gambaran Keseluruhan Pengoptimuman PHP-FPM WooCommerce ialah pemalam e-dagang yang sangat popular untuk mencipta dan mengurus kedai dalam talian di laman web WordPress. Walau bagaimanapun, apabila kedai anda berkembang dan trafik meningkat, apl WooCommerce boleh menjadi perlahan dan tidak stabil. Untuk menyelesaikan masalah ini, kami boleh menggunakan PHP-FPM untuk mengoptimumkan dan meningkatkan prestasi aplikasi WooCommerce. Apakah itu PHP-FP

Gambaran keseluruhan penggunaan kumpulan sambungan php-fpm untuk meningkatkan prestasi capaian pangkalan data: Dalam pembangunan web, capaian pangkalan data ialah salah satu operasi yang paling kerap dan memakan masa. Kaedah tradisional adalah untuk mencipta sambungan pangkalan data baharu untuk setiap operasi pangkalan data dan kemudian menutup sambungan selepas digunakan. Kaedah ini akan menyebabkan penubuhan dan penutupan sambungan pangkalan data yang kerap, meningkatkan overhed sistem. Untuk menyelesaikan masalah ini, anda boleh menggunakan teknologi kolam sambungan php-fpm untuk meningkatkan prestasi capaian pangkalan data. Prinsip kumpulan sambungan: Kolam sambungan ialah teknologi caching yang menggabungkan beberapa pangkalan data tertentu

PHP-FPM ialah pengurus proses PHP yang biasa digunakan untuk menyediakan prestasi dan kestabilan PHP yang lebih baik. Walau bagaimanapun, dalam persekitaran beban tinggi, konfigurasi lalai PHP-FPM mungkin tidak memenuhi keperluan, jadi kami perlu menalanya. Artikel ini akan memperkenalkan kaedah penalaan PHP-FPM secara terperinci dan memberikan beberapa contoh kod. 1. Tingkatkan bilangan proses Secara lalai, PHP-FPM hanya memulakan sebilangan kecil proses untuk mengendalikan permintaan. Dalam persekitaran beban tinggi, kami boleh menambah baik keselarasan PHP-FPM dengan menambah bilangan proses

Cara menggunakan PHP-FPM untuk mengoptimumkan dan meningkatkan prestasi aplikasi Phalcon Pengenalan: Phalcon ialah rangka kerja PHP berprestasi tinggi, yang boleh meningkatkan lagi prestasi aplikasi apabila digabungkan dengan PHP-FPM. Artikel ini akan memperkenalkan cara menggunakan PHP-FPM untuk mengoptimumkan prestasi aplikasi Phalcon dan menyediakan contoh kod khusus. 1. Apakah itu PHP-FMPPHP-FPM (PHPFastCGIProcessManager) ialah proses PHP yang bebas daripada pelayan web

Penyelesaian untuk Ubuntu tanpa php-fpm: 1. Tambah alamat sumber PHP dengan melaksanakan perintah "sudo apt-get" 2. Semak sama ada terdapat pakej php7 3. Pasang PHP dengan melaksanakan "sudo apt-get perintah install"; 4. , ubah suai konfigurasi untuk mendengar pada port 9000 untuk mengendalikan permintaan nginx; 5. Mulakan "php7.2-fpm" melalui "perkhidmatan sudo php7.2-fpm mula".

Apakah php-fpm? Artikel berikut akan membawa anda memahami php-fpm dan memperkenalkan perkara yang kami perlukan untuk mengoptimumkan apabila mengoptimumkan php-fpm saya harap ia akan membantu semua orang.
