当前位置: 首页 > news >正文

PHP特性知识点扫盲 - 下篇

概述

在实际的生产环境中遇到了实际需要解决的问题,需要把服务部署的方式梳理出来,在同一个服务器中部署多个PHP环境,架构图如下:

架构方案

在这里插入图片描述

在工作实践中遇到的很多问题的普遍性都是相通的,公司运行的可新项目都是版本比较低的,需要一步一步去升级、优化,也就是一点一点的分步骤优化,有着诸多挑战,技术人的成长就是敢于一步一步抽丝剥茧,最后让架构变的丝滑。

依然使用Nginx作为链接PHP-FPM的Web服务器,分别使用9000、9001、90002端口分别去搭建不同的版本的php-fpm,设置Nginx不同的运行$document_root中,这个是预设方案,在实施过程中需要准备一些准备的知识,谋定而后动。

php-fpm 全局配置

emergency_restart_threshold在指定的一段时间内,如果失效的PHP_FPM子进程数超过这个值,PHP_FPM主进程就优雅重启。

emergency_restart_threshold = 10

设定emergency_restart_interval设置采用的时间跨度。

emergency_restart_interval = 0

配置进程池

下面要详细介绍的是php-fpm的配置:

  • user 拥有这个PHP-FPM进程池中的子进程系统用户,要把这个设置的值设为运行PHP应用的非根用户名户名。

  • group 拥有这个PHP-FPM进程池中的子进程系统用户组。要把这个设置的值设为运行PHP应用的非根用户所属的用户组名。

  • listen PHP-FPM进程池监听的IP地址和端口号,让PHP-FPM只接受Nginx从这里传入的请求。127.0.0.1:9000让指定的PHP-FPM进程池监听从本地端口9000进入的。可以使用任何大于1024且没被其他系统进程占用的端口号。

  • pm.max_children 这个设置设定任何时间点PHP-FPM进程池中最多能有多少个进程。

  • pm.start_servers = 3 PHP-FPM启动时PHP-FPM进程池中立即可用的进程数。

  • pm.min_spare_servers PHP应用空闲时PHP-FPM进程池中可以存在的进程数量最小值。这个值一般比pm.start_servers设置的值一样,用于确保新进入的Http请求无需等待PHP-FPM在进程池中重新初始化进程。

  • pm.max_spare_servers PHP应用空闲时PHP-FPM进程池中可以存在的进程数量最大值。

  • pm.max_requests
    回收进程之前,PHP_FPM进程池中各个进程最多能处理的Http请求数量。这个设置有助于避免PHP扩展库因编写拙劣而导致不断泄露内存。

  • showlog 这个设置的值是一个日志文件在文件系统中的绝对路径。这个日志文件用于记录处理时间超过n秒的Http请求信息,以便找出PHP应用的瓶颈,进行调试,记住,PHP_FPM进程池所属用户和用户组必须有这个文件的写权限。

  • request_showlog_timeout 如果当前Http请求的处理时间超过指定的值,就把请求的回溯信息写入showlog设置指定的日志文件。

user = nobodygroup = nobodylisten = 127.0.0.1:9000  pm.max_children = 51pm.start_servers = 3pm.min_spare_servers = 2pm.max_spare_servers = 4pm.max_requests = 1000showlog = /path/to/showlog.logrequest_showlog_timeout = 5s

有时间在更新同一个服务器上部署多个PHP版本的服务器的内容。

http://www.lryc.cn/news/273909.html

相关文章:

  • HarmonyOS应用开发之DevEco Studio安装与初次使用
  • 记录第一次在GitHub上面提交Issue
  • 【数据库设计和SQL基础语法】--用户权限管理--数据备份和恢复策略
  • java数据结构与算法刷题-----LeetCode70. 爬楼梯
  • 【Unity入门】UGUI之Slider(滑动条)
  • MySQL中UNION和UNION ALL的区别有哪些?
  • Android kotlin build.gradle.kts配置
  • css、js、vue常考部分面试题
  • OpenAI ChatGPT-4开发笔记2024-03:Chat之Function Calling/Function/Tool/Tool_Choice
  • 二叉搜索树与双向链表
  • uniapp中组件库的Checkbox 复选框 的丰富使用方法
  • Spring Cloud + Vue前后端分离-第10章 基于阿里云OSS的文件上传
  • C++ 中的耗时计算函数
  • 【Element】el-form和el-table嵌套实现表格编辑并提交表单校验
  • 初识Winform
  • Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)
  • 前端优化之一:dns预获取 dns-prefetch 提升页面载入速度
  • C语言中一些基本数据类型的典型大小
  • [C/C++]排序算法 快速排序 (递归与非递归)
  • 『年度总结』逐梦编程之始:我的2023学习回顾与展望
  • MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发
  • 【React系列】受控非受控组件
  • OpenCV-Python(22):2D直方图
  • Kubernetes 100个常用命令
  • labuladong日常刷题-差分数组 | LeetCode 1109航班预定统计 | 花式遍历 151反转字符串里的单词
  • HbuilderX中的git的使用
  • LeetCode每日一题 | 1944. 队列中可以看到的人数
  • React16源码: JSX2JS及React.createElement源码实现
  • 整理composer安装版本的python脚本
  • 十、基本对话框大集合(Qt5 GUI系列)