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

yizhihongxing

浅析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 create_function()函数应用实例详解

    以下是关于“PHP create_function()函数应用实例详解”的完整使用攻略: 基础知识 在了解PHP create_function()函数应用实例之前,需要掌握一些基础知识,包括匿名函数的基本概念、create_function()函数的定义、create_function()函数的参数等。以下是一些常见的基础知识: 匿名函数的基本概念包括匿名…

    PHP 2023年5月12日
    00
  • php字符串截取的简单方法

    下面是关于“PHP字符串截取的简单方法”完整攻略的介绍: 1. 使用substr函数进行截取 PHP提供了substr函数,可以很方便地截取一个字符串的一部分。该函数有3个参数,分别是要截取的字符串、起始位置和截取的长度。以下是示例代码: $str = "Hello World"; $substr = substr($str, 0, 5)…

    PHP 2023年5月26日
    00
  • 微信小程序 WebSocket详解及应用

    微信小程序 WebSocket详解及应用 WebSocket是一种在Web应用程序中提供双向通信的协议,它是一种客户端/服务器协议,可以在单个TCP连接上进行全双工通信。在微信小程序中,我们可以使用WebSocket来实现小程序和服务器之间的实时双向通信。 WebSocket基本用法 在小程序中使用WebSocket需要注意以下几点: 前提条件:需要后端提供…

    PHP 2023年5月23日
    00
  • 深入PHP异步执行的详解

    深入PHP异步执行的详解 什么是异步执行 异步执行是指某一段代码可以在原有代码流程中独立运行,不影响其他代码的执行流程,可以提高程序的性能和效率。 PHP异步执行的方式 异步执行方式一:多进程 多进程可以通过pcntl、posix等扩展进行实现。使用这种方式需要注意以下几点: 需要在操作系统级别创建新的进程,这会占用一定的系统资源。 子进程需要向父进程发送进…

    PHP 2023年5月26日
    00
  • php使用多个进程同时控制文件读写示例

    接下来我将为您详细讲解如何使用PHP使用多个进程同时控制文件读写的完整攻略。在本攻略中,我们将探讨基于文件锁和共享内存的两种不同的实现方式。 文件锁实现文件读写 文件锁是一种防止多个进程并发访问同一个文件的机制。在PHP中,可以使用flock()函数来实现文件锁。下面是一个简单的示例,展示如何在PHP中使用文件锁来实现文件读写的并发控制: <?php …

    PHP 2023年5月30日
    00
  • 简单的php新闻发布系统教程

    下面是”简单的php新闻发布系统教程”的完整攻略: 简介 这个教程将会介绍如何用PHP语言、MySQL数据库和HTML/CSS基础知识制作一个完整的新闻发布系统。 技能要求 在学习之前,你需要掌握以下技能: 基本的PHP语言知识,如变量、函数和数组等 MySQL数据库基本操作知识,如建立数据表,插入数据、更新数据和查询数据等 HTML、CSS基础知识,如标签…

    PHP 2023年5月24日
    00
  • PHP实现简单网站访客统计的方法实例

    下面是关于“PHP实现简单网站访客统计的方法实例”的详细攻略: 1. 使用$_SERVER获取访客信息 在PHP中,我们可以使用预定义变量$_SERVER来获取网站访客的相关信息,例如访客的IP地址、浏览器种类等。具体代码如下: $ip = $_SERVER[‘REMOTE_ADDR’]; // 获取访客IP地址 $browser = $_SERVER[‘H…

    PHP 2023年5月24日
    00
  • PHP动态输出JavaScript代码实例

    下面是“PHP动态输出JavaScript代码实例”的详细攻略。 概述 在网页中,有时需要根据用户输入的不同来动态输出JavaScript代码。为了实现这个功能,就需要使用PHP来动态生成JavaScript代码。本文将详细介绍如何使用PHP动态输出JavaScript代码。 代码示例一 以一个简单的表单为例,该表单有一个输入框和一个按钮,用户可以在输入框中…

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