优化PHP运行性能:合理选择PHP-FPM管理模式和配置进程参数

        PHP-FPM,全称 PHP FastCGI Process Manager,是一个 PHP FastCGI 的管理器,主要用于提高 PHP 的运行性能。本文将详细讲述如何合理配置 PHP-FPM,以及针对不同的服务器硬件,如何进行专门的调优。

一、理解 PHP-FPM 进程管理模式

        PHP-FPM 提供了三种进程管理模式,分别为 staticdynamic 和 ondemand

  1. 静态(static):这种方式会预设固定数量的子进程(pm.max_children),并且这个数量在运行过程中不会改变,过高的静态子进程数会浪费服务器内存,而过低则无法应对并发量较大的情况。这种模式适用于系统负载相对稳定的环境,比如内部系统。优点是没有新的进程的生成和消亡,可以减少系统负载;缺点是如果并发量超过预设的静态子进程数,新的请求会因为没有可用子进程而被放弃。

  2. 动态(dynamic):在这种方式下,PHP-FPM 会根据负载情况动态调整子进程的数量,其中 pm.start_servers 定义了启动时的子进程数,pm.min_spare_servers 和 pm.max_spare_servers 则定义了空闲子进程的最小和最大数量。当请求量增加时,PHP-FPM 会创建更多的子进程来应对,而在请求量减少时,多余的子进程会被干掉以释放资源。动态模式适合于负载量较大且波动的应用环境,比如面向公众的网站。

  3. 按需(ondemand):按需模式在没有请求时不会生成任何子进程,它只有在有请求时才生成新的子进程,同样的,当子进程处理完请求并闲置超过 pm.process_idle_timeout 的设定时间后,子进程会被干掉。按需模式适合于系统资源紧张并且请求量较小的环境,比如低配的 VPS。

二、如何配置 PHP-FPM

        配置文件主要为 /etc/php/版本/fpm/php-fpm.conf 和 /etc/php/版本/fpm/pool.d/www.conf

php-fpm.conf 的配置

        这是 PHP-FPM 主配置文件。在此文件中,你可以设置守护进程的 PID 文件位置,错误日志文件位置等:

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log

www.conf 的配置

        这是站点配置文件,你可以在此文件中设置站点的用户、用户组,站点 sock 文件位置,进程管理模式等。

[www]
user = www-data
group = www-data
listen = /run/php/php7.2-fpm.sock
listen.owner = www-data
listen.group = www-data
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20

        尤其需要注意的是 pm 和 pm.max_children 这两项配置,这两个选项的配置决定了 PHP-FPM 的进程管理模式以及最大子进程数量,是非常重要的性能调优参数。

三、服务器4核8G配置 PHP-FPM的最佳实践

        对于4核8G配置的服务器来说,我们首先假设每个 PHP-FPM 进程占用50MB内存,所以理论上最大子进程数为8G/50MB = 160个进程。然而在实际设置时,我们需要留出一部分内存给系统进程和其他程序使用,因此,合理的 pm.max_children 选项值可以设置在100~120之间。

        动态模式(dynamic)适用于此类型服务器,因为它能够在保证性能的同时,使服务器资源得到充分利用。具体的参数我们可以设置如下:

[www]  # 这个是 Pool 名称,每个 Pool 的名称应当是唯一的,不能有重复,一般默认叫 www。

user = www-data  # 指定运行 PHP-FPM 进程的用户,这里是 www-data。
group = www-data  # 指定运行 PHP-FPM 进程的用户组,这里是 www-data。

listen = /run/php/php7.2-fpm.sock  # 指定一个文件路径供 nginx 或 apache 服务器通过 fastcgi 协议调度 php-fpm 进程,这里用的是 unix socket 方式,也可以用 host:port 的方式。

listen.owner = www-data  # 设置 unix socket 文件的所有者,需要与 nginx 或者 apache 运行的用户一致。
listen.group = www-data  # 设置 unix socket 文件的所属用户组,需要与 nginx 或者 apache 运行的用户组一致。

pm = dynamic  # 进程管理模式,dynamic 表示动态管理子进程,另外还有 static , ondemand。

pm.max_children = 100  # 设置允许创建的最大子进程数
pm.start_servers = 10  # 启动时创建的子进程数,仅 dynamic 和 ondemand 模式有效。
pm.min_spare_servers = 5  # 空闲状态时,最小的子进程数,仅 dynamic 模式有效,当空闲进程数少于此值时,php-fpm 会创建新的子进程。
pm.max_spare_servers = 20  # 空闲状态时,最大的子进程数,仅 dynamic 模式有效,当空闲进程数多于此值时,php-fpm 会杀掉多余的子进程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/551790.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何看懂电路图,理解电流回路

任何电器都需要电源来供电。电源有正极(+)和负极(-),为了向负载提供电力,电流必须从正极流出,通过负载后再回到负极。这构成了一个供电电流回路,负载得到电力供应后才能开始工作。如果其中的某个环节断开,就无法形成供电电流回路,负载将得不到供电,也无法正常工作。 在一…

Typescript 总结3——类

一、是什么 类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础 类是一种用户定义的引用数据类型,也称类类型 传统的面向对象语言基本都是基于类的,JavaScript …

机器学习与深度学习 --李宏毅(笔记与个人理解)Day 20

Day 20 RNN 2 实际使用和其他应用 在实际的学习(training)过程中是如何工作的? step 1 Loss step 2 training Graindent Descent 反向传播的进阶版 – BPTT CLIpping 设置阈值~ 笑死昨天刚看完关伟说的有这玩意的就不是好东西 Why&#xff1…

window轻松使用k8s

Docker Desktop安装篇 1、win安装 1、下载安装包 https://www.docker.com/products/docker-desktop/ 官网下载安装包 2、配置win支持虚拟化 不勾选Hyper-V,它和Windows Subsystem for Linux (WSL) 是两套功能,这里不选他 3、安装WSL配置window支持lin…

2024电容笔专业对比评测:西圣、倍思、绿联哪款平替电容笔更好用?

在当今学习和工作环境中,iPad作为一种多功能的学习和生产力工具,受到越来越多人的青睐与需求。然而,要充分发挥iPad的功能,一个优质的电容笔是必不可少的配件之一。电容笔不仅可以帮助用户进行手写笔记、绘画创作,还能…

包装类的认识

前言~🥳🎉🎉🎉 hellohello~,大家好💕💕,这里是E绵绵呀✋✋ ,如果觉得这篇文章还不错的话还请点赞❤️❤️收藏💞 💞 关注💥&#x1…

48.基于SpringBoot + Vue实现的前后端分离-雪具销售系统(项目 + 论文PPT)

项目介绍 本站是一个B/S模式系统,采用SpringBoot Vue框架,MYSQL数据库设计开发,充分保证系统的稳定性。系统具有界面清晰、操作简单,功能齐全的特点,使得基于SpringBoot Vue技术的雪具销售系统设计与实现管理工作系统…

探索分布式系统监控zabbix-------------监控Windows

扩展windows 10 server2012 server2016 server2019 监控 一、在虚拟机中安装zabbix的客户端 下载网站 Download and install Zabbix 安装系统一直托不进虚拟机中;因为没安装Tools组件 点击虚拟机,选择安装VMware Tools 查看主机名 二、在web页…

ArcGIS在洪水灾害普查、风险评估及淹没制图中的技术应用

2020年国务院办公厅印发《关于开展第一次全国自然灾害综合风险普查的通知》,定于2020年至2022年开展第一次全国自然灾害综合风险普查。水旱灾害风险普查是全国自然灾害综合风险普查的重要组成部分。其中,我国有超过 60%的国土面积、90%以上的人口均受到不…

FFmpeg: 自实现ijkplayer播放器--01项目简介

文章目录 项目介绍流程图播放器实现过程界面展示项目代码 项目介绍 此项目基于FFmeg中 ffplay.c进行二次开发,实现基本的功能,开发软件为Qt 项目优势: 参考ijkplayer播放器,实现UI界面和播放器核心进行解耦,容易添加…

SpringBoot3 函数式web 小记

说明:函数式web是spring5.2之后的一个新特性,Spring Boot 3 进一步优化了这一模型,为开发现代 Web 应用提供了更加灵活、简洁的方法; 函数式web的四大核心对象 - RouterFunction:定义路由信息 - RequestPredicates&am…

15_SpringBoot

文章目录 SpringBoot创建SpringBoot应用官网IDEApom.xml文件启动类 整合SpringMVC整合配置类静态资源处理FilterTomcat其他配置 整合MyBatis约定大于配置的原理配置文件中的值的获取yml形式的配置文件约定大于配置的说明注解配置文件配置项 SpringBoot SpringBoot简化Spring阶…

强化网络安全防线,您的等级保护措施到位了吗?

在这个信息化飞速发展的时代,网络安全已经成为我们每个人都需要关注的问题。无论是企业还是个人,我们的工作和生活都越来越依赖于网络。确保网络环境的安全,防止信息泄露和网络攻击,已经成为了一项至关重要的任务。等级保护制度作…

现货白银的止损:原始止损和移动止损

止损是我们做现货白银必备的工具,它的主要功能是控制投资者的亏损,进而控制我们在交易中的风险。而现货白银的止损主要有两种,一个是原始止损,另外一个是移动止损。 原始止损是我们现货白银止损的基本方法。原始止损的意思就是初次…

Git回滚版本并push到远端master

1、查看日志 git log 2、还原最近的版本 () --git reset --hard commit-id 如:git reset --hard d84da14bf2743683eca7a015f56114faaa344f42 3、覆盖分支版本 git push -f origin dev 回滚本地master完成后,将回滚后的代码push到远端master&#xf…

C++ | Leetcode C++题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; class Solution { public:// 翻转一个子链表&#xff0c;并且返回新的头与尾pair<ListNode*, ListNode*> myReverse(ListNode* head, ListNode* tail) {ListNode* prev tail->next;ListNode* p head;while (prev ! tail) {ListN…

C++练级之路——类和对象(中二)

1、运算符重载 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也是具有其返回值类型&#xff0c;函数名字以及参数列表&#xff0c;其返回值类型和参数列表与普通的函数类似。 函数名字为&#xff1a;关键字operator后面接需…

华为ensp中静态路由和默认路由的原理及配置

作者主页&#xff1a;点击&#xff01; ENSP专栏&#xff1a;点击&#xff01; 创作时间&#xff1a;2024年4月17日17点37分 默认路由 [Router] ip route-static <目的网络> <目的网络掩码> <下一跳地址>默认路由的作用是将无法匹配路由表中其他路由表项的…

储能的全生命周期成本即平准化度电成本的计算方法及python实践

1. 平准化度电成本&#xff08;LCOE&#xff09;是一种衡量电力项目经济性的指标 LCOE&#xff08;Levelized Cost of Energy,&#xff09;的概念最早由美国国家可再生能源实验室&#xff08;NREL&#xff09;在1995年提出&#xff0c;它是通过将一个项目生命周期内的所有成本…

公司微信公众号怎么创建?

公众号已经成为企业、品牌、个人IP与粉丝互动的重要平台。今天&#xff0c;伯乐网络传媒就来深入探讨如何巧妙地创建属于自己的微信公众号&#xff0c;为公司或品牌打造一个线上影响力的坚实基石。 一、注册微信公众号 第一步&#xff1a;访问微信公众平台官网 第二步&#x…
最新文章