浅析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+jQuery实现即点即改功能示例

    下面我将详细讲解“PHP+jQuery实现即点即改功能示例”的完整攻略。 一、 确定HTML结构 首先,我们需要确定HTML结构。一般来说,实现即点即改(即异步修改页面内容)需要一个可编辑的HTML标签,如input或textarea。同时,为了实现异步刷新,我们需要给要刷新的内容添加一个id属性。具体示例如下: <p id="editabl…

    PHP 2023年5月26日
    00
  • PHP利用一行代码删除目录下所有文件方法示例

    下面是讲解“PHP利用一行代码删除目录下所有文件方法示例”的完整攻略: 1. 了解unlink函数 在PHP中删除文件的方法一般是使用unlink()函数,这个函数可以从文件系统中删除文件,但是当尝试删除一个目录时,unlink()函数无法删除目录,只能删除文件。 那么如何删除目录呢?需要使用到其他函数和方法,比如使用rmdir()函数或者使用递归方式删除目…

    PHP 2023年5月26日
    00
  • 罗列几款时下高人气的PHP开发框架

    当今市面上有很多优秀的PHP开发框架,其中高人气的PHP开发框架包括Laravel、Symfony、Yii、Codeigniter、Phalcon等,接下来我会逐一进行讲解。 Laravel Laravel是一款非常流行的PHP开发框架,他是由Taylor Otwell开发的,自2011年以来已经成为开发者最喜爱的框架之一。主要因为它拥有非常友好的文档和面向…

    PHP 2023年5月23日
    00
  • 雷神第五代911笔记本性能怎么样 雷神第五代911游戏本深度评测

    雷神第五代911笔记本性能评测 选购建议 雷神第五代911笔记本作为一款高性能游戏本,配备了Intel i7-9750H CPU,NVIDIA GeForce RTX 2060显卡,16GB DDR4 2666MHz内存,512GB M.2 NVMe固态硬盘等高配,可以满足玩家对于游戏性能的需求。同时,身材轻薄,重量仅2.2kg,电池续航时间长,采用了全新的…

    PHP 2023年5月27日
    00
  • phpmyadmin下载、安装、配置教程

    PHPMyAdmin下载、安装、配置教程 PHPMyAdmin是一款用于MySQL数据库管理的免费开源工具。本文将详细讲解PHPMyAdmin的下载、安装和配置过程,帮助读者快速掌握这一工具。 下载PHPMyAdmin 可以从官方网站(https://www.phpmyadmin.net/downloads/)下载PHPMyAdmin的最新版本,也可以从Gi…

    PHP 2023年5月27日
    00
  • PHP使用GIFEncoder类处理gif图片实例

    下面是“PHP使用GIFEncoder类处理gif图片实例”的完整攻略: 1. 简介 GIFEncoder类是一个用于将多张图片合成GIF动画图的PHP类库。 它具有压缩比高、动画流畅等优点,并且易于使用。在使用过程中,你需要了解一些基本的PHP和GIF编码知识。 2. 安装 GIFEncoder类可以免费从 GitHub 上下载。下载后,你需要把class…

    PHP 2023年5月23日
    00
  • PHP容易被忽略而出错陷阱 数字与字符串比较

    PHP是一种弱类型语言,不同类型的数据可以进行比较,但在使用过程中,由于不了解这种弱类型特性,很容易造成意想不到的错误。本攻略将详细介绍PHP中数字与字符串比较的陷阱,以及如何避免出错。 陷阱1:使用==进行数字与字符串比较 在PHP中使用“==”进行比较时,如果两个操作数的类型不同,PHP会将其进行类型转换,将字符串转换为数字。但是,当字符串无法转换为数字…

    PHP 2023年5月26日
    00
  • PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)

    PHP 正则表达式之正则处理函数小结 在 PHP 中,使用正则表达式可以很方便地进行字符串处理。PHP 提供了以下几个正则表达式处理函数:preg_match、preg_match_all、preg_replace、preg_split。下面分别详细介绍这几个函数的用法,并提供实例说明。 preg_match preg_match 用于在字符串中查找一个匹配…

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