浅析php-fpm静态和动态执行方式的比较

浅析php-fpm静态和动态执行方式的比较

前言

php-fpm 是 PHP 官方针对处理高并发等情况下的替代 FCGI 环境的进程管理器,相较于传统的 php-cgi 方式,php-fpm 众多的优异表现,比如在性能、应对并发、改善 PHP 进程管理等方面。

php-fpm 提供了两种执行方式:静态执行和动态执行。静态方式在 PHP-FPM 启动时,根据 PHP-FPM 配置(php-fpm.conf)中的值,将 PHP 进程预先创建好;而动态方式则是通过请求进来时,根据配置动态地创建多个 PHP 进程或进行关闭,不会像静态方式耗费大量的内存资源。

下面将对两者进行详细的解析和比较分析。

静态执行

在 PHP-FPM 静态执行模式下,每个 PHP 进程都直接绑定到相应的 FastCGI 端口号上,相应的信息会保存在 Sockets 结构体中,而每个进程在 PHP-FPM 启动时,根据 php-fpm.conf 中的配置值初始化一定的子进程。

一些示例的代码:

[www]
listen = /var/run/php-fpm/php-fpm.sock
listen.backlog = -1
user = nginx
group = nginx
pm = static
pm.max_requests = 1000
pm.status_path = /status
ping.path = /ping
pm.start_servers = 30
pm.min_spare_servers = 20
pm.max_spare_servers = 30

可知,pm.static 就是表明使用了 PHP-FPM 静态方式,并通过 pm.start_servers、pm.min_spare_servers、pm.max_spare_servers 控制预启动进程数量。

静态方式优缺点分析:

优点:

  1. 性能较好:PHP-FPM 在启动时,会创建指定数量的子进程,当请求到达时,可由子进程直接处理,避免了频繁创建和关闭的问题,从而降低了一定的处理时延。

  2. 稳定性高:静态方式中由于子进程提前创建,可以将生命周期固定住,故而较为稳定。

缺点:

  1. 可能导致内存浪费:由于指定了预启动进程数量,若状态空闲,则有一部分资源将被浪费。

  2. 无法应对突发的流量:静态方式中为事先启动一个预设的固定进程,若系统负载突然增高,程序会被卡死,无法响应请求。

动态执行

在 PHP-FPM 动态执行模式下,每个 PHP 进程是在发起请求后才会被启动和打开 FastCGI 端口并监听,当连接关闭或持续空闲超时后,PHP 进程将会被销毁。

相应的配置示例:

pm = dynamic 
pm.start_servers = 5
pm.max_children = 60
pm.min_spare_servers = 5
pm.max_spare_servers = 30
pm.max_requests = 500
pm.process_idle_timeout = 10s

配置可以发现,pm = dynamic 就是表示使用了 PHP-FPM 动态方式,而 pm.start_servers 设置 PHP-FPM 启动时 spair_servers 的默认值,而 pm.max_children 则表明可以活跃的进程数,pm.process_idle_timeout 表示进程空闲时间,在空闲超时后会被自动销毁。

动态方式优缺点分析:

优点:

  1. 可更好地利用资源:动态方式中可以根据请求的相对负载自我调整,而不必预先启动多个进程,最大限度地发挥机器资源。

  2. 能够更加灵活地应对流量变化:当流量突然涌来时,动态方式可以根据实时情况调整进程数量,来平衡系统负载,提高系统的稳定性和响应能力。

缺点:

  1. 可能因启动和销毁进程而带来一定消耗:动态方式中由于进程相当于是每次收到请求,中都会进行启动和销毁,因此有一定的消耗。

  2. 可能会增加其他问题:由于只有当请求到达时才被启动,因此在初次请求时,会增加从外部请求PHP进程并启动的时间,因此当流量较高时,会增加无法访问或响应不及时的问题。

总结

无论是静态还是动态方式,都有其优点和缺点,根据预期要处理的流量和资源可以选择不同的模式,如果流量非常低,静态方式是比较合适的,而如果流量较大或者在处理复杂的应用程序时应使用动态方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅析php-fpm静态和动态执行方式的比较 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP通过bypass disable functions执行系统命令的方法汇总

    题目中提到的“PHP通过bypass disable functions执行系统命令的方法汇总”,主要是指在PHP Web应用程序中绕过被禁用的函数,执行系统命令的方法。 以下是一个完整的攻略: 1. 确认函数被禁用 在尝试绕过被禁用的函数之前,首先要确认是否已经被禁用。有多种方法可以禁用PHP函数,例如禁用PHP配置文件中的函数(disable_funct…

    PHP 2023年5月27日
    00
  • 20070910更新的火车采集器3.2正式版发布下载

    “20070910更新的火车采集器3.2正式版发布下载”攻略 1. 下载和安装 1.1 访问火车采集器的官方网站(http://www.caibaojian.com/train/)。 1.2 在首页找到下载链接“火车采集器3.2正式版下载”并点击。 1.3 确认下载地址,下载适合自己的操作系统版本。 1.4 将下载文件解压至任意目录。 1.5 运行解压后的“…

    PHP 2023年5月27日
    00
  • 10条PHP高级技巧[修正版]

    下面是对”10条PHP高级技巧[修正版]”的完整攻略: 1.正确使用PHP的字符串函数 PHP的字符串函数非常强大,掌握使用它们可以极大地提高程序的效率。以下是一些正确使用字符串函数的要点: 使用explode()函数将字符串拆分成数组,这样可以让你快速访问字符串中的各个部分。 使用substr()函数截取字符串,这将节省内存并使你的代码更快。 使用str_…

    PHP 2023年5月23日
    00
  • PHP执行普通shell命令流程解析

    下面是PHP执行普通shell命令流程解析的完整攻略。 流程解析 PHP执行普通shell命令的流程分为以下几步: 使用PHP的系统调用函数system、exec、shell_exec、passthru或popen来执行shell命令,如:system(‘ls’)。 程序调用系统内核中的execve函数,该函数用于执行指定的可执行文件或shell命令,并将其…

    PHP 2023年5月26日
    00
  • php 数组操作(增加,删除,查询,排序)等函数说明

    下面就是关于”PHP 数组操作(增加,删除,查询,排序)等函数说明”的完整攻略: 1. PHP 数组的基本操作 1.1 数组的定义和初始化 定义数组,最简单的方式就是将变量赋值为空数组,如下: $my_array = []; 也可以使用array()函数来定义数组,如下: $my_array = array(); 初始化数组,可以使用以下方式: $my_ar…

    PHP 2023年5月26日
    00
  • phpcms V9 常用文件目录结构

    关于”phpcms V9 常用文件目录结构”的详细讲解,以下是完整的攻略: 1.概括 phpcms V9的目录结构主要包括以下几个目录: ├─api # Api目录 │ ├─comment # 评论目录 │ ├─content # 内容目录 │ ├─createhtml # 静态化目录 │ └─search # 搜索目录 ├─attachment # 附件目…

    PHP 2023年5月23日
    00
  • 开源php中文分词系统SCWS安装和使用实例

    开源php中文分词系统SCWS安装和使用实例 一、SCWS简介 SCWS是一款针对中文语言的高效处理系统,它可以对中文进行分词、词性标注、关键词提取等多种处理,是中文自然语言处理领域的重要工具。 二、SCWS安装 1. 准备环境 在安装SCWS之前,需要先确认服务器上已经安装了以下软件: GCC编译器 PHP开发包 Libiconv库 Pcre库 如果没有安…

    PHP 2023年5月23日
    00
  • 上传多个文件的PHP脚本

    以下是详细讲解“上传多个文件的PHP脚本”的完整攻略。 1. HTML 表单 首先,在上传多个文件之前,我们需要一个 HTML 表单页面来让用户选择要上传的文件。这个表单需要指定以下三个属性: enctype=”multipart/form-data”:设置表单数据编码格式为二进制流,用于支持上传文件数据; method=”POST”:设置表单数据提交方式;…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部