浅析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投票程序源码

    我可以为您提供“一个简单的PHP投票程序源码”的完整攻略。 一、背景介绍 这是一个简单的PHP投票程序源码,旨在帮助PHP初学者更好地学习和理解该编程语言。该投票程序可以用于网站上的各种投票活动,包括调查调查、用户评价等。 二、源码文件结构 该投票程序共有3个文件,分别是index.php、vote.php、result.php。这些文件需要放在同一目录下。…

    PHP 2023年5月23日
    00
  • 微信小程序引用公共js里的方法的实例详解

    讲解“微信小程序引用公共js里的方法的实例详解”的攻略。 什么是微信小程序 微信小程序是一种新型的应用开发方式,它基于微信生态体系,具有“无需下载、易于传播、快捷启动、即点即用”等优势,适合于轻量级应用的开发、使用和传播。 微信小程序引用公共js的方法 为提高代码重用性,有时我们会把一些通用的代码方法放到公共的js文件里,那么如何在小程序中调用这些方法呢? …

    PHP 2023年5月23日
    00
  • PHP的数组中提高元素查找与元素去重的效率的技巧解析

    当我们在使用PHP中的数组时,有时候需要快速地查找某个元素以及对数组进行去重操作。为了提高这些操作的效率,我们可以应用以下技巧。 使用数组键名进行元素查找 在PHP中,使用in_array函数可以检查一个值是否在一个数组当中,但是这个函数是线性查找,所以执行效率较低。如果我们已知要查找的元素值,并且这个元素值在数组中不重复,那么我们可以使用数组键名进行查找,…

    PHP 2023年5月26日
    00
  • PHP简单实现生成txt文件到指定目录的方法

    一、简介 在 PHP 中,实现生成 .txt 文件到指定目录需要以下步骤: 生成文件名; 打开文件; 写入内容; 关闭文件。 二、步骤详解 以下是详细的代码实现过程。 生成文件名 我们可以使用日期+随机数的方式来保证文件名不重复。代码如下: $filename = "file_".date("Ymd_His").&qu…

    PHP 2023年5月26日
    00
  • php 写入缓存文件、读取缓存文件的函数代码

    要在PHP中进行读取和写入缓存文件,我们可以使用file_get_contents()和file_put_contents()函数。 1. 写入缓存文件 使用file_put_contents()函数可以将字符串数据写入到文件中。以下是一个写入缓存文件代码的示例: <?php // 设置缓存文件路径 $cache_path = ‘cache/mycac…

    PHP 2023年5月26日
    00
  • php处理单文件、多文件上传代码分享

    下面是详细讲解 PHP 处理单文件、多文件上传的攻略。 单文件上传 单文件上传是指上传一个文件,下面是单文件上传的步骤: 在 HTML 表单中添加 enctype=”multipart/form-data” 属性,这个属性是必须的,否则上传文件的表单将不起作用。 <form action="upload.php" method=&q…

    PHP 2023年5月26日
    00
  • PHP如何使用array_unshift()在数组开头插入元素

    使用 array_unshift() 函数可以在 PHP 数组的最前面插入一个或多个元素。下面是使用 array_unshift() 函数的完整攻略: 语法格式: array_unshift(array, value1, value2, …) 参数说明: array :必需,规定要插入数据的数组。 value1, value2, … :必需,规定要插…

    PHP 2023年5月26日
    00
  • PHP将两个关联数组合并函数提高函数效率

    介绍:本文主要介绍如何使用PHP提高数组合并函数的性能。 一、问题 在PHP中,我们经常需要将两个关联数组合并起来,那么什么是关联数组呢?关联数组就是使用字符串作为下标的数组,例如: $array1 = array(‘key1’ => ‘value1’, ‘key2’ => ‘value2’); $array2 = array(‘key3’ =&…

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