热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

phpfpm优化的方法是什么

这篇文章主要讲解了“phpfpm优化的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“p

这篇文章主要讲解了“php fpm优化的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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 通信机制

      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 优化

    //默认情况下服务器对上传文件的大小是有限制的,如果想修改上传文件的限制可以修改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)进程数设置

     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 执行的超时时间为固定值

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

    方法 2:定时 reload php-fpm

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

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

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

    方法 3:优化进程池配置

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

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

    进程数优化

    pm = dynamic
    pm.max_children = 300
    pm.start_servers = 20
    pm.min_spare_servers = 5
    pm.max_spare_servers = 35

    最大请求数优化

    pm.max_requests = 10240

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

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

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

    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/ 目录下面创建脚本

    vim restart-php-fpm.sh

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

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

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

    #!/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 这种方式重启的

    然后编写定时任务

    crontab -e
    /root/restart-php-fpm.sh

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

    感谢各位的阅读,以上就是“php fpm优化的方法是什么”的内容了,经过本文的学习后,相信大家对php fpm优化的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


    推荐阅读
    • Nginx使用AWStats日志分析的步骤及注意事项
      本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
    • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
    • Centos7.6安装Gitlab教程及注意事项
      本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
    • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
      本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
    • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
    • 如何在服务器主机上实现文件共享的方法和工具
      本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
    • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
    • 本文介绍了5个基本Linux命令行工具的现代化替代品,包括du、top和ncdu。这些替代品在功能上进行了改进,提高了可用性,并且适用于现代化系统。其中,ncdu是du的替代品,它提供了与du类似的结果,但在一个基于curses的交互式界面中,重点关注占用磁盘空间较多的目录。 ... [详细]
    • 计算机存储系统的层次结构及其优势
      本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
    • Webmin远程命令执行漏洞复现及防护方法
      本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
    • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
    • mac php错误日志配置方法及错误级别修改
      本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
    • 如何提高PHP编程技能及推荐高级教程
      本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
    • 本文介绍了RxJava在Android开发中的广泛应用以及其在事件总线(Event Bus)实现中的使用方法。RxJava是一种基于观察者模式的异步java库,可以提高开发效率、降低维护成本。通过RxJava,开发者可以实现事件的异步处理和链式操作。对于已经具备RxJava基础的开发者来说,本文将详细介绍如何利用RxJava实现事件总线,并提供了使用建议。 ... [详细]
    • Linux下安装免费杀毒软件ClamAV及使用方法
      本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
    author-avatar
    手机用户2502900835
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有