迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

PHP中的FPM是做什么的

作者:迹忆 最近更新:2022/11/13 浏览次数:

FPM是FastCGI Process Manager的缩写,由全称我们可以知道其和FastCGI有关,就是一个FastCGI的进程管理器。对于FastCGI我们可以理解成一个协议,儿FPM是其在PHP中的一个实现。

FPM的出现实现了PHP应用的分布式部署,这样使得PHP和web服务器可以在不同的机器上。当然与其说是FPM不如说是FastCGI的出现。最初FPM并没有被PHP的官方正式应用于PHP中,只是作为PHP的一个补丁应用。但是自从PHP5.3.3版本以后FPM被正式捆绑进PHP中,作为了PHP的一部分。这样我们配置起来比较方便,只需在PHP编译的时候添加—enable-fpm选项即可

php-5.6.9]# ./configure –enable-fpm  

Fpm的简单配置

Fpm在php编译的时候添加—enable-fpm选项即可启动fpm,此外在编译的时候还有两个选项分别是 –with-fpm-user=USER 和—with-fpm-group=GROUP,用来设定fpm所属的用户和用户组。如果不指定这两项,那默认的用户和用户组都是nobody。当然这两项也可以在fpm的配置文件php-fpm.conf(其所在目录为PHP安装目录/etc/php-fpm.conf)中修改。

user = nobody 
//所属用户
group = nobody
//所属组
listen = 127.0.0.1:9000 
//fpm所在服务器的ip地址和监听的端口号,默认为9000
pm = dynamic 
//设置进程管理器是如何管理子进程的,dynamic动态管理至少会有一个子进程被创建,其数量有个最大值由pm.max_children来设定,而创建的数量由pm.start_servers来设定;static 静态管理设置固定数量的子进程随着服务启动而被创建;ondemand 在服务启动的时候并不创建子进程只是当有请求的时候才根据情况创建。
pm.max_children = 10
//当pm设置为static的时候,此值表示随着服务的启动创建的子进程的数量;当pm设置为dynamic或者ondemand的时候,此值表示创建的子进程最多不能超过此数量
pm.start_servers = 2
//表示随着服务启动创建的子进程(注意这里是子进程而不是线程)的数量,此选项只有在pm 设置为dynamic的时候才有效。并且这个值默认设置为 min_spare_servers + (max_spare_servers – min_spare_servers)/2,并且如果此值设为0,那么创建的子进程的数量也是由上述公式决定。
pm.min_spare_servers = 1
//要求闲置的服务进程的数量的最小值
pm.max_spare_servers = 3
//闲置的服务进程的数量的最大值
pm.process_idle_timeout = 10s
//进程的闲置时间,以秒为单位,超过这个时间该进程将会被杀死

Fpm的应用

下面我们来看一下如何管理fastcgi服务,首先我们可以进入php安装目录

~]# cd /usr/local/php5
php5]# ./sbin/php-fpm
//开启fastcgi服务,开启服务以后会在/usr/local/php5/var/run/php-fpm.pid中有fastcgi主进程id
php5]# kill –INT `cat /usr/local/php5/var/run/php-fpm.pid`
//关闭fastcgi服务
php5]# kill –USR2 ` cat /usr/local/php5/var/run/php-fpm.pid`
//重启fastcgi服务
 

Fpm使用说明

在fpm简单配置中我们提到pm=dynamic和pm.start_servers =2。当开启fastcgi服务以后首先我们查看 php-fpm.pid

php5]# cat /usr/local/php5/var/run/php-fpm.pid //其结果为
32407
php5]# ps x | grep php-fpm   //接着我们使用此命令查看其主进程情况
32407 ?        Ss     0:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
php5]# ps –ef | grep php-fpm         //然后再使用该命令查看其所有进程情况
root  32407 1 0 13:46 ? 00:00:00 php-fpm: master process (/usr/local/php5/etc/php-fpm.conf)
nobody   32408 32407  0 13:46 ?        00:00:00 php-fpm: pool www          
nobody   32409 32407  0 13:46 ?        00:00:00 php-fpm: pool www

在这里我们看到了三条信息,第一条是主进程,由系统创建,其id为32407,父进程id为1。剩余两条是其子进程,因为在pm.start_servers = 2 我们设置的为2,所以随着服务的启动会创建两个子进程。这两个子进程的用户都是nobody(user=nobody),其进程id分别是 32408、32409,第三项是这两个子进程的父进程的id 32407。

当然fpm至少会创建一个子进程,因为如果start_servers 设置为0 那么其会根据上面我们说的那个公式计算出子进程的数量。当然如果我们设置min_spare_servers 和max_spare_servers都为0,那子进程的数量为0,这样的话是不能启动服务的(这些设置有效的前提是pm设为dynamic)。因为fpm使用用户为nobody的子进程来处理请求的,那个由系统创建的主进程——id为32407,所属用户为root——是不能处理请求的。当然我们可以根据我们服务器的实际情况(例如:内存大小)来优化我们这里的进程数量。

以上只是简单的介绍了fpm的配置与使用,目的就是为了说明fpm的作用。

相关文章

你必须知道的 PHP 中的内存管理知识

发布时间:2023/02/25 浏览次数:177 分类:编程语言

内存管理是 PHP 编程的一个重要方面,它可以极大地影响应用程序的性能和可伸缩性。 它涉及理解内存分配模型,通过高效的编程技术最大限度地减少内存使用,以及利用缓存和延迟加

PHP 通过引用与通过值传递变量

发布时间:2023/02/25 浏览次数:165 分类:编程语言

在 PHP 中,我们可以通过两种不同的方式将变量传递给函数:按值和按引用。 了解这两种传递变量的方法之间的区别对于编写高效且有效的 PHP 代码很重要。 按值传递变量 默认情况下,

PHP 延迟加载

发布时间:2023/02/25 浏览次数:138 分类:编程语言

延迟加载简介 延迟加载是一种编程技术,它允许我们将资源的加载推迟到实际需要它们时。 这在处理大型或复杂的应用程序时特别有用,因为预先加载所有内容可能会导致加载时间缓

详细介绍 PHP内存分配函数

发布时间:2023/02/25 浏览次数:164 分类:编程语言

PHP 是一种流行的服务器端脚本语言,广泛用于 Web 开发。 与大多数编程语言一样,PHP 需要分配内存来创建变量、数组、对象和其他数据结构。 PHP 提供了几个分配函数来动态分配内存。

PHP 内存分配类型:堆栈和堆

发布时间:2023/02/25 浏览次数:83 分类:编程语言

内存分配是编程的一个重要方面,它决定了程序如何管理和使用内存。 在 PHP 中,有两种主要的内存分配类型: 堆栈和堆 。 堆栈 堆栈是一种内存分配类型,用于存储局部变量和函数参

我们来看一下 PHP是如何分配内存的

发布时间:2023/02/25 浏览次数:195 分类:编程语言

PHP 使用内存管理系统,根据需要动态分配内存,并在不再使用时释放它。 这意味着您不需要在 PHP 脚本中手动分配或释放内存。 PHP 的内存管理系统基于 zend_mm_heap 的概念,它是一个内

PHP 有哪些内存优化技术

发布时间:2023/02/25 浏览次数:92 分类:编程语言

介绍 PHP 是一种流行的 Web 开发编程语言,但由于其动态特性和垃圾收集过程,它可能容易出现高内存使用率。 但是,我们可以使用多种技术来优化内存使用并提高 PHP 应用程序的性能。

我们看一下PHP内存泄漏的常见原因

发布时间:2023/02/25 浏览次数:74 分类:编程语言

在长时间运行的 PHP 应用程序中,内存泄漏可能是一个严重的问题。 随着时间的推移,内存泄漏会导致应用程序消耗越来越多的内存,直到它崩溃或变得无响应。 在本文档中,我们将探

PHP 中如何高效的使用内存

发布时间:2023/02/25 浏览次数:158 分类:编程语言

PHP 是一种用于构建 Web 应用程序的流行编程语言,高效的内存使用对于创建高性能应用程序至关重要。 在本文中,我们将探讨在 PHP 中高效使用内存的一些最佳实践。 1. 限制存储在内存

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便