返回顶部
  • 464
分享到

PHP-fpm

php服务器nginx 2023-08-31 20:08:05 464人浏览 薄情痞子
摘要

PHP-fpm 介绍 PHP-FPM(FastCGI Process Manager)是一个php FastCGI 进程管理器。FastCGI 可以理解为一种协议,用于WEB服务器(Nginx、A

PHP-fpm

介绍

PHP-FPM(FastCGI Process Manager)是一个php FastCGI 进程管理器。FastCGI
可以理解为一种协议,用于WEB服务器Nginx、Apache)和处理程序间进行通信,是一种应用层通信协议。

从PHP5.3.3开始集成了php-fpm模块,不再是第三方的包了。PHP-FPM提供了更好的PHP进程管理方式,可以有
效控制内存和进程、可以平滑重载PHP配置。

PHP-fpm的工作原理

启动php-fpm之后,会创建一个master进程,监听9000端口(可配置),master进程又会根据fpm.conf/www.conf去创建若干子进程,子进程用于处理实际的业务。当有客户端来连接9000端口时,空闲子进程会自己去accept,如果子进程全部处于忙碌状态,新进的待accept的连接会被master放进队列里,等待fpm子进程空闲;这个存放待accept的半连接的队列有多长,由listen.backlog
配置。

当nginx作为服务器时PHP-fpm的工作原理

用户发送Http请求报文给nginx服务器,因为nginx本僧并不能解析php脚本,所以nginx会根据文件URL和后缀来判断请求,如果请求是静态内容,nginx会将结果直接返回给用户,如果请求的是动态内容,nginx会将请求转交给fastcgi客户端,通过fastcgi_pass将这个请求交给PHP-fpm处理,这个时候如果PHP-fpm被停止的话会报一个502的错误,PHP-fpm接受到请求会通过本地监听的Socket交给work,work收到请求会生成新的线程调用PHP动态程序解析服务器去处理程序,PHP会将处理过后的结果交给nginx,最后,nginx会生成一个响应报文返还给用户。

在这里插入图片描述

cgi,php-cgi,php-fpm,fastcgi的区别?

  • cgi:cgi是一个web
    server与cgi程序(这里可以理解为是php解释器)之间进行数据传输的协议,保证了传递的是标准数据。

  • php-cgi:php-cgi是php解释器。他自己本身只能解析请求,返回结果,不会管理进程。php-fpm是调度管理php-cgi进程的程序。

  • Fastcgi:Fastcgi是用来提高cgi程序(php-cgi)性能的方案/协议。cgi程序的性能问题在哪呢?“PHP解析器会解析php.ini文件,初始化执行环境”,就是这里了。标准的CGI对每个请求都会执行这些步骤,所以处理的时间会比较长。Fastcgi会先启一个master,解析配置文件,初始化执行环境,然后再启动多个worker。当请求过来时,master会传递给一个worker,然后立即可以接受下一个请求。这样就避免了重复劳动,效率自然提高。而且当worker不够用时,master可以根据配置预先启动几个worker等着;当然空闲worker太多时,也会停掉一些,这样就提高了性能,也节约了资源。这就是Fastcgi的对进程的管理。

  • php-fpm:fastcgi是一个方案或者协议,php-fpm就是FastCGI的后端实现,也就是说,进程分配和管理是FPM来做的。官方对FPM的解释:【FastcgiProcess Manager】【Fastcgi进程管理器】。php-fpm的管理对象是php-cgi,他负责管理一个进程池,来处理来自Web服务器的请求。对于php.ini文件的修改,php-cgi进程是没办法平滑重启的,有了php-fpm后,就把平滑重启成为了一种可能,php-fpm对此的处理机制是新的worker用新的配置,已经存在的worker处理完手上的活就可以歇着了,通过这种机制来平滑过度的。

PHP-fpm有几种工作模式?

PHP-FPM进程管理方式有动态(Dynamic)、静态(Static)、按需分配(Ondemand)三种。

  • 动态

动态工作模式会初始化创建一部分worker,在运行过程中,动态调整worker数量,最大worker数受pm.max_children和process.max的限制

listen = 127.0.0.1:9001

pm = dynamic

pm.max_children = 10

pm.start_servers = 2

pm.min_spare_servers = 1

pm.max_spare_servers = 6

当空闲进程数小于min_spare_servers时,创建新的子进程,总子进程数小于等于pm.max_children,小于等于process.max,当空闲进程数大于max_spare_servers,会杀死启动时间最长的子进程,如果子进程(idle状态)数大于max_children,会打印warning日志,并且结束处理,process小于
max_children
,计算一个num,启动num个worker,优点:动态扩容,不浪费系统资源,缺点:所有worker都在工作,新的请求到来需要等待创建worker进程,最长等待1s(内部存在一个1s的定时器,去查看,创建进程),频繁启停进程消耗cpu,请求数稳定,不需要频繁销毁

  • 静态

启动固定大小数量的worker,也有1s的定时器,用于统计进程的一些状态信息,例如空闲worker个数,活动worker个数,优点:不用动态判断负载,提升性能,缺点:如果配置成static,只需要考虑max_children数量,数量取决于cpu的个数和应用的响应时间,一次启动固定大小进程浪费系统资源

  • 按需分配

php-fpm启动的时候不会启动worker进程,按需启动worker,有链接进来后,才会启动

listen = 127.0.0.1:9001

pm = ondemand

pm.process_idle_timeout = 60

pm.max_children = 10

连接到来时(只有链接,不没有数据也会创建,telnet也会创建),创建新worker进程,worker进程数的创建收max_children设置限制,也受限于全局的process.max设置,如果空闲时间超过了process_idle_timeout的设置就会销毁worker进程,优点:按流量需求创建,不浪费系统资源,缺点:因为php-fpm是短连接的,如果每次请求都先建立连接,大流量场景下会使得master进程变得繁忙,浪费cpu,不适合大流量模式

怎么选定php-fpm的worker进程数?

动态建立进程个数

N+20% 到 M/m之间
N是 cpu 核数,M是内存,m是每个 php 进程内存数

静态建立进程个数

M/(m*1.2)
pm.max_requests,设置最大请求数,达到这个数量以后,会自动长期worker进程,繁殖内存意外增长

注意:

PHP程序在执行完成后,或多或少会有内存泄露的问题。这也是为什么开始的时候一个php-fpm进程只占用3M左右内存,运行一段时间后就会上升到20-30M。所以需要每个worker进程处理完一定的请求后,销毁重新创建。

cpu密集型的pm.max_children不能超过cpu内核数,但是web服务属于io密集型的,可以将pm.max_children的值设置大于cpu核数。

php-fpm如何优化?

  • 避免程序跑死:在负载较高的服务器上定时重载php-fpm,reload可以平滑重启而不影响生产系统的php脚本运行,每15分钟reload一次。

  • 合理增加单个worker进程最大处理请求数,减少内存消耗:最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn新的。该配置可以避免php解释器自身或程序引起的memory leaks。

  • 开启静态模式,指定数量的php-fpm进程,减少内存消耗

来源地址:https://blog.csdn.net/m0_66412572/article/details/125956848

--结束END--

本文标题: PHP-fpm

本文链接: https://lsjlt.com/news/386817.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP-fpm
    PHP-fpm 介绍 PHP-FPM(FastCGI Process Manager)是一个PHP FastCGI 进程管理器。FastCGI 可以理解为一种协议,用于web服务器(nginx、A...
    99+
    2023-08-31
    php 服务器 nginx
  • LAMP (php-fpm)
    博客作业二:CentOS 7, lamp (php-fpm);要求:(1) 三者分离于三台主机;      (2) 一个虚拟主机用于提供phpMyAdmin;另一个虚拟主机用于...
    99+
    2024-04-02
  • php-fpm详解
    2022年9月27日15:45:04 FastCGI(Fast Common Gateway Interface)快速通用网关接口,是 CGI 的增强版本,为了提升 CGI 的性能而生。 PHP-FPM(FastCGI Process M...
    99+
    2023-09-01
    php 开发语言 apache mysql json
  • php-fpm 的状态查看和php-fpm 调优随笔
    php-fpm status 配置 找到php-fpm的配置文件,将 pm.status_path = /status 注释去掉 重启php-fpm 在nginx 中配置一个server块或者配置一个location  3. 最后通...
    99+
    2023-09-06
    php 服务器 nginx php-fpm
  • PHP-FPM是什么
    PHP-FPM是提供了进程管理的功能,包含master和worker两种进程,而master进程只有一个,负责监听端口,接收来自服务器的请求,worker进程的数量则是根据实际需要进行配置,每个进程内部都会嵌入一个PHP解释器,是代码真正执...
    99+
    2024-04-02
  • Mac配置php-fpm
    环境 nginx:1.21.6 php:7.4.28 安装 安装nginx brew install nginx  nginx命令生效 vim ~/.bash_profile # 添加一行 export PATH="$(bre...
    99+
    2023-09-02
    php 开发语言 nginx macos
  • Centos7安装php-fpm
    目录 第一步:查看系统IP地址和网卡名称 第二步:更改网络配置模式 第三步、重启network 查看iptablies ,将第十行,十一行删除 第四步:关闭config 第五步:创建nginx 文件夹 查看目录下的文件 进入nginx文件夹...
    99+
    2023-10-18
    nginx php-fpm 环境搭建
  • Prometheus监控PHP-FPM
    启用php-fpm状态功能php-fpm和nginx一样内建了一个状态页,对于想了解php-fpm的状态以及监控php-fpm非常有帮助。为了后续的Prometheus监控,我们需要先了解php-fpm状态页是怎么回事。在上一篇文章中,已经...
    99+
    2023-01-31
    Prometheus PHP FPM
  • PHP - PHP-FPM - 学习/实践
    应用场景 主要用于弄清楚Nginx+PHP-FPM的运行机制,以及各种配置使用和优化,帮助开发项目。 学习/操作 1.文档阅读 Nginx-->进阶-->原理-->Nginx+php+fastcgi的原理与关系 -...
    99+
    2023-09-06
    php-fpm Nginx 配置
  • php-fpm基本配置
    php配置文件: php.ini: display_errors = Off #关闭错误提示 expose_php = Off #隐藏php版本 #禁用危险函数,禁用之后composer 会有问题,使用composer的请单独配置禁用函数...
    99+
    2023-09-23
    php 开发语言 服务器
  • nginx php-fpm安装配置
    nginx php-fpm安装配置 nginx本身不能处理PHP,它只是个web服务器,当接收到请求后,如果是php请求,则发给php解释器处理,并把结果返回给客户端。 nginx一般是把请求发fas...
    99+
    2023-09-02
    nginx php 运维
  • linux如何关闭php-fpm
    这篇文章主要介绍了linux如何关闭php-fpm的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇linux如何关闭php-fpm文章都会有所收获,下面我们一起来看看吧。方法1:通过命令行方式关闭php-fpm第...
    99+
    2023-07-05
  • 怎么修改php-fpm用户
    本文操作环境:Windows7系统、PHP7.0版、DELL G3电脑怎么修改php-fpm用户?修改php-fpm和nginx运行用户:(php)项目a是用test用户运行nginx和php-fpm是www-data用户运行(python...
    99+
    2016-04-16
    php-fpm
  • CentOS 7, amp + xcache, rpm包,php-fpm
    1、实验需求:    1)CentOS 7, amp + xcache, rpm包,php-fpm;        ...
    99+
    2024-04-02
  • linux下php-fpm怎么使用
    本篇内容主要讲解“linux下php-fpm怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“linux下php-fpm怎么使用”吧!所以启动、关闭和重新加...
    99+
    2024-04-02
  • php7中php-fpm如何安装
    这篇文章主要讲解了“php7中php-fpm如何安装”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php7中php-fpm如何安装”吧!php7中php-fpm安装配置的方法:1、安装PHP...
    99+
    2023-06-22
  • 如何设置php-fpm超时
    这篇文章将为大家详细讲解有关如何设置php-fpm超时,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。php-fpm nginx 超时参数设置php-fpm:request_terminate...
    99+
    2023-06-15
  • 怎么配置nginx和php-fpm
    这篇文章主要讲解了“怎么配置nginx和php-fpm”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么配置nginx和php-fpm”吧!在php7中,最不可少的就是nginx和php-f...
    99+
    2023-06-20
  • php-fpm高占用cpu处理
    最近服务器经常发现php-fpm进程cpu总数时不时就100%,提高cpu核数也还是一样 废话不多说,直接说解决方案: 一、先说说php-fpm三种子进程的管理方式 pm = static 静态,始终保持一个固定数量的子进程,这个数由(pm...
    99+
    2023-10-01
    php 服务器 性能优化
  • 如何修改php-fpm用户
    小编今天带大家了解如何修改php-fpm用户,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“如何修改php-fpm用户”的知识吧。修改...
    99+
    2023-06-28
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作