服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - PHP教程 - php-fpm优化总结经验分享

php-fpm优化总结经验分享

2022-11-15 16:27村东头最靓的仔 PHP教程

这篇文章主要为大家介绍了php-fpm优化总结的经验分享,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Nginx 与 php-fpm 运行流程

  • Nginx 查看 nginx.conf 配置文件
  • 加载 nginx 的 fast-cgi 模块
  • php-fpm 监听 127.0.0.1:9000
  • php-fpm 接收到请求,启用 worker 进程处理请求
  • php-fpm 处理完请求,返回给 nginx
  • nginx 将结果通过 http 返回给浏览器\

php-fpm优化总结经验分享

Nginx 与 php-fpm 通信机制

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  www.test.com
        |
        |
      Nginx
        |
        |
路由到 www.test.com/index.php
        |
        |
加载 nginx 的 fast-cgi 模块
        |
        |
fast-cgi 监听 127.0.0.1:9000 地址
        |
        |
www.test.com/index.php 请求到达 127.0.0.1:9000
        |
        |
     等待处理...

Nginx 与 php-fpm 的结合

  • 在 Linux 上,nginx 与 php-fpm 的通信有 tcp socket 和 unix socket 两种方式。
  • tcp socket 的优点是可以跨服务器,当 nginx 和 php-fpm 不在同一台机器上时,只能使用这种方式。
  • Unix socket 又叫 IPC (inter-process communication 进程间通信) socket,用于实现同一主机上的进程间通信,这种方式需要在 nginx 配置文件中填写 php-fpm 的 socket 文件位置。

两种方式的数据传输过程如下图所示:

php-fpm优化总结经验分享

php-fpm 进程管理

php-fpm 采用的是 master-worker 的进程方式。其中,

  • master 负责监听端口,等待链接;其次,注册信号,可以通过信息好 master 进行管理
  • worker 负责处理具体的逻辑
    查看 php-fpm 日志信息
  • 默认路径 -/usr/local/php/var/log

php-fpm 优化

php.ini 优化

?
1
2
3
4
5
6
7
//默认情况下服务器对上传文件的大小是有限制的,如果想修改上传文件的限制可以修改php.ini文件
file_uploads = On; //是否允许上传文件
upload_max_filesize = 1024M; //上传文件的最大限制
post_max_size = 1024M; //通过post提交的最多数据
max_execution_time = 300; //脚本最长的执行时间 单位为秒
max_input_time = 30000; //接收提交的数据的时间限制 单位为秒
memory_limit = 256M; //每个脚本使用的最大内存  ;在安全模式下,你不能用ini_set()在运行时改变这个设置。

php-fpm.conf 优化

(1)进程数设置

?
1
2
3
4
5
pm = dynamic
pm.max_children = 15  //静态方式下开启的php-fpm进程数量
pm.start_servers = 5    //动态方式下的起始php-fpm进程数量
pm.min_spare_servers = 5 //动态方式下 空闲时间最小的php-fpm进程
pm.max_spare_servers = 5 //动态方式下 空闲时间最大的php-fpm进程

(2)最大处理请求数

最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn新的。

该配置可以避免php解释器自身或程序引起的memory leaks。 

默认值是500, pm.max_requests = 1024 这样的规划,1秒钟 

最大请求数:15*1024=15360 最小请求数:5*1024=7120

如何避免程序 hang 死

方法 1:设置 php-fpm 执行的超时时间为固定值

?
1
vi php-fpm.conf 修改为request_terminate_timeout = 60

方法 2:定时 reload php-fpm

在负载较高的服务器上定时重载 php-fpm

reload 可以平滑重启而不影响生产系统的 php 脚本运行,每 15 分钟 reload 一次

?
1
0-59/15 * * * * /usr/local/php/sbin/php-fpm reload

方法 3:优化进程池配置

php-fpm 根据配置文件内容和实际情况,动态创建子进程来处理请求。

当达到能够创建的最大值时,只能阻塞。一个个地进行执行。

进程数优化

?
1
2
3
4
5
pm = dynamic
pm.max_children = 300
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35

最大请求数优化

?
1
pm.max_requests = 10240

提示:这个用来处理因为 PHP 解析器或引用的第三方库时,造成的内存泄露问题。

最大请求数:指一个 php-fpm 的工作进程在处理多少个请求后就终止掉。

最长执行时间优化(php.ini)

?
1
request_terminate_timeout = 20

提示:这个是用来处理因为 PHP 执行时间超长而报 502 错误的解决。

这个时长配置可以在 php.ini(max_execution_time)或 php-fpm.conf 中配置均可,为了不影响全局配置,可在 php-fpm.conf 中实现 crontab 定时任务把 php-fpm 平滑重启,这种方式就是使用 crontab 定时任务去定时查询网站是否 502 了,如果 502 了,就把 php-fpm 平滑重启

首先在 /root/ 目录下面创建脚本

?
1
vim restart-php-fpm.sh

然后给这个脚本赋予执行权限

?
1
chmod +x /root/restart-php-fpm.sh

然后就是编写脚本内容了,上代码

?
1
2
3
4
5
6
#!/bin/bash
MY_URL="http://www.****.com/"
RESULT=`curl -I $MY_URL|grep "HTTP/1.1 502"`
if [ -n "$RESULT" ]; then
 /etc/init.d/php7.2-fpm restart
fi

注意:

我是使用的 /etc/init.d/php7.2-fpm restart 这种方式重启的

然后编写定时任务

?
1
2
crontab -e
/root/restart-php-fpm.sh

用 crontab -l 查看定时任务列表

以上就是php-fpm优化总结经验分享的详细内容,更多关于php-fpm优化经验的资料请关注服务器之家其它相关文章!

原文链接:https://juejin.cn/post/7132767043165618189

延伸 · 阅读

精彩推荐
  • PHP教程php技巧小结【推荐】

    php技巧小结【推荐】

    本文主要分享了分享php工作中遇到的一些探究和技巧,具有很好的参考价值,下面跟着小编一起来看下吧...

    郑宏鑫erke5472021-04-15
  • PHP教程php实现汉字验证码和算式验证码的方法

    php实现汉字验证码和算式验证码的方法

    这篇文章主要介绍了php实现汉字验证码和算式验证码的方法,实例分析了算式验证码及中文汉字验证码的实现技巧,非常具有实用价值,需要的朋友可以参考下...

    PHP教程网4622020-09-08
  • PHP教程PHP多进程编程总结(推荐)

    PHP多进程编程总结(推荐)

    下面小编就为大家带来一篇PHP多进程编程总结(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    PHP教程网11212021-02-05
  • PHP教程php不用正则验证真假身份证

    php不用正则验证真假身份证

    以前我要验证身份证我们多半会使用正则判断用户输入是不是15位或18位的全数字,然后来判断身份证是否合法了,这种方法只是最基础的,下面提供的这个...

    zxhpj2262020-05-26
  • PHP教程PHP中的.htaccess伪静态文件

    PHP中的.htaccess伪静态文件

    htaccess是apache的伪静态文件了不过普通人不熟悉linux不熟悉apache,可能都用惯了iis,可是又不懂伪静态规则,现在项目就只提供了这么一个.htaccess文件,真叫...

    robortly6502021-11-04
  • PHP教程php7 安装yar 生成docker镜像

    php7 安装yar 生成docker镜像

    这篇文章主要介绍了php7 安装yar 生成docker镜像,需要的朋友可以参考下...

    闯进华府的952710142021-05-18
  • PHP教程PHP中uploaded_files函数使用方法详解

    PHP中uploaded_files函数使用方法详解

    PHP uploaded_files函数的功能非常强大,希望通过这篇文章中介绍的内容能够帮助我们解决相关问题,提高我们对PHP语言的了解程度。 ...

    PHP教程网4882019-11-19
  • PHP教程PHP中foreach()用法汇总

    PHP中foreach()用法汇总

    这篇文章主要给大家详细介绍了PHP中foreach()用法以及相关的示例,十分的细致,有需要的小伙伴可以参考下。...

    PHP中文网3942020-10-29