php-fpm

CGI,FastCGI,PHP-FPM

房东的猫 提交于 2020-01-11 10:19:06
CGI(Common Gateway Interface) CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信 FastCGI FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算, 即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。 FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知

CGI、FastCGI和php-fpm的区别

无人久伴 提交于 2020-01-11 05:09:01
参考网上的描述,将网上的描述内容,整理进来: 首先,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-fpm优化

故事扮演 提交于 2020-01-11 00:15:41
  PHP-FPM是一个PHPFastCGI进程管理器,是只用于PHP的。 PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。 现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。 PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。 在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。 使用PHP-FPM来控制PHP-CGI的FastCGI进程 /usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate} --start 启动php的fastcgi进程 --stop 强制终止php的fastcgi进程 --quit 平滑终止php的fastcgi进程 --restart

linux下查看php-fpm是否开启以及如何开启

你离开我真会死。 提交于 2020-01-10 10:50:22
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 对于linux接触很少,对于命令很不熟,今天发现之前部署的站点无法访问了,就想可能是nginx或者php-fpm没有开启。 所以这里记录linux下查看php-fpm是否开启以及如何开启(nginx也是同理)的命令,以备以后快速查看。 1、查看php-fpm是否开启 执行命令:ps -ef|grep php7.4.1(或 ps aux | grep php-fpm ) (因为我装了几个版本的php,所以是php7.4.1,如果你只有一个版本,直接php就可以) 这应该是没有开启。 2、开启php-fpm 找到你php安装的路径,php-fpm一般在php安装目录下sbin目录下 执行命令:./sbin/php-fpm 如果报这个错误,说明php-fpm的配置文件找不到,继续一下看,执行以下命令 再次执行./sbin/php-fpm 没有报错,说明开启完成 3、再次输入命令ps -ef|grep php7.4.1,查看是否已经开启 这是已经开启了。 来源: oschina 链接: https://my.oschina.net/u/4094683/blog/3155700

PHPFastCGI进程管理器PHP-FPM详解

杀马特。学长 韩版系。学妹 提交于 2020-01-10 10:45:08
PHP-FPM是一个PHPFastCGI进程管理器,是只用于PHP的。 PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。 现在我们可以在最新的PHP 5.3.2的源码树里下载得到直接整合了PHP-FPM的分支,据说下个版本会融合进PHP的主分支去。相对Spawn-FCGI,PHP-FPM在CPU和内存方面的控制都更胜一筹,而且前者很容易崩溃,必须用crontab进行监控,而PHP-FPM则没有这种烦恼。 PHP5.3.3已经集成php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有效控制内存和进程、可以平滑重载PHP配置,比spawn-fcgi具有更多优点,所以被PHP官方收录了。 在./configure的时候带 –enable-fpm参数即可开启PHP-FPM。 使用PHP-FPM来控制PHP-CGI的FastCGI进程 /usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate} --start 启动php的fastcgi进程 --stop 强制终止php的fastcgi进程 --quit 平滑终止php的fastcgi进程 --restart

php-fpm配置文件详解

隐身守侯 提交于 2020-01-09 23:49:20
第一部分:FPM 配置 -p : 命令行中动态修改--prefix   ;include=etc/fpm.d/*.conf  #用于包含一个或多个文件,如果glob(3)存在(glob()函数返回匹配指定模式的文件名或目录) 第二部分:全局配置 由标志 [global] 开始: ;pid = run/php-fpm.pid      设置pid文件的位置,默认目录路径 /usr/local/php/var ;error_log = log/php-fpm.log   记录错误日志的文件,默认目录路径 /usr/local/php/var ;syslog.facility = daemon     用于指定什么类型的程序日志消息。 ;syslog.ident = php-fpm     用于FPM多实例甄别 ;log_level = notice        记录日志的等级,默认notice,可取值alert, error, warning, notice, debug ;emergency_restart_threshold = 0 如果子进程在这个时间段内带有IGSEGV或SIGBUS退出,则重启fpm,默认0表示关闭这个功能 ;emergency_restart_interval = 0  设置时间间隔来决定服务的初始化时间(默认单位:s秒),可选s秒,m分,h时,d天

php-fpm的一次慢执行日志slow log

元气小坏坏 提交于 2020-01-09 22:39:58
测试环境、预发布环境经过QA多番测试没有遇到问题,但在一次上线过程中,在线上环境出现20秒的响应超时,这个毫无疑问,环境问题。 尽管线上数据量大,可Mysql以不至于慢到20秒,而且发现每次技术都是20.01~20.04秒之间,相差不到一秒钟,mysql也不至于这么均匀,在好奇心下,运维大神配合查了一下Mysql慢查询日志,发现没有超时的sql日志,那这有可能就是php这边出现的问题,可一想,逻辑执行也总不能这么慢。想打日志一步步跟踪,这种方式有点慢。mysql 有慢查询,同样咱php也有慢日志。 使用php slow方式确实找到了问题所在,截图如下: pconnect()原因导致,这个我当然清楚,是因为连接redis失败导致。 因为是在新的服务器,所以连接不上核心项目的redis服务器,最终还是运维大神安装的证书解决。 解决了问题后,大概了解如下: 一、开启slow log方法: 如果你使用php-fpm来管理php的话,你可以通过如下方法开启: 首先打开 php-fpm.conf 配置文件。 vim /usr/local/php/etc/php-fpm.conf PHP 5.3.3 之前设置如下: <value name="request_slowlog_timeout">5s</value> < value name="slowlog">logs/php-fpm

PHP-FPM 与 Nginx 的通信机制总结

≯℡__Kan透↙ 提交于 2020-01-09 05:44:40
PHP-FPM 介绍 CGI 协议与 FastCGI 协议 每种动态语言( PHP,Python 等)的代码文件需要通过对应的解析器才能被服务器识别,而 CGI 协议就是用来使解释器与服务器可以互相通信。PHP 文件在服务器上的解析需要用到 PHP 解释器,再加上对应的 CGI 协议,从而使服务器可以解析到 PHP 文件。 由于 CGI 的机制是每处理一个请求需要 fork 一个 CGI 进程,请求结束再kill掉这个进程,在实际应用上比较浪费资源,于是就出现了CGI 的改良版本 FastCGI,FastCGI 在请求处理完后,不会 kill 掉进程,而是继续处理多个请求,这样就大大提高了效率。 PHP-FPM 是什么 PHP-FPM 即 PHP-FastCGI Process Manager, 它是 FastCGI 的实现,并提供了进程管理的功能。进程包含 master 进程和 worker 进程两种;master 进程只有一个,负责监听端口,接收来自服务器的请求,而 worker 进程则一般有多个(具体数量根据实际需要进行配置),每个进程内部都会嵌入一个 PHP 解释器,是代码真正执行的地方。 Nginx 与 php-fpm 通信机制 当我们访问一个网站(如 www.test.com)的时候,处理流程是这样的: www.test.com | | Nginx | | 路由到

php-fpm回顾和总结

大城市里の小女人 提交于 2020-01-09 02:13:10
时间久了很容易忘,这里做个备份 FastCGI协议php语言的实现,可以高效处理来自web端的动态请求 php-fpm维护一个或者多个php-cgi进程池,处理请求时不需要频繁创建进程 所以比传统的CGI协议要更高效 技术架构 单master - 多worker master 非阻塞,异步IO模型 负责管理worker进程(创建、销毁、检查健康状态等)、监听连接、处理管理员发出的信号、启动时间循环等。 master进程执行的四个阶段 cgi初始化:外部信号hook注册、sapi全局变量初始化等; php环境初始化:加载和解析php.ini,加载php模块等; php-fpm初始化:加载和解析php-fpm.conf,初始化进程池等; php-fpm执行阶段:fork worker进程和启动事件循坏等。 worker 阻塞模型 负责接收请求,处理请求,请求结束返回。 创建worker进程的三种方式 static: 创建固定数目的worker进程,减少频繁创建进程的开销。 dynamic: 动态调整worker进程数量,初始时会创建最低数目的worker进程,创建的进程数最大不超过设置的阈值。 ondemand: 按需创建,来一个请求创建一个,请求处理完,进程结束。 master处理的信号说明 SIGUSR1:重新打开日志文件,用于文件太大需要备份时的场景,重新打开不会清空原来的文件

使用socket方式连接Nginx优化php-fpm性能

我的梦境 提交于 2020-01-09 02:10:52
nginx和php-fpm通信支持两种方式实现:tcp socket 和 unix socket 1.tcp socket tcp socket通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。 2.unix socket unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址。 sock方式配置nginx的php-fpm,如下: location ~ .+\.php?$ { #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/dev/shm/php-fpm.sock; fastcgi_index index.php; include fastcgi.conf; } 配置php-fpm: listen = /dev/shm/php-fpm.sock 将socket置于内存中,提高响应速度。 来源: https://www.cnblogs.com/qinyujie/p/7089368.html