LNMP|2021最新 LNMP => Php-fpm参数解析与优化(生产环境)

架构解析

  • 动态网站架构
  • FastCGI & PHP-fpm解析
    • FastCGI
    • php-fpm
    • php-mysql
  • LNMP运行原理
  • php-fpm配置优化解析
    • 核心配置文件
    • 全局配置文件
    • 日志文件等级
    • 扩展配置文件
  • 优化php-fpm(生产环境)
    • 参数优化
    • php_status监控页面
    • 监控页面参数解析
动态网站架构
index.php => Windows/Linux+nginx+php+mysql#开源的php(主要) index.py=> Windows/Linux+apache+python+mysql#开源python index.jsp => windows/Linux+tomcat+JDK+Oracle#商业JAVA index.asp => Windows+iis+asp.net+sql-server/oracle/mogodb#商业c#


FastCGI & PHP-fpm FastCGI => Fast Common Gateway Interface(快速通用网关接口)
模块:ngx_fastcgi_modul ? 原理:处理动态请求的接口、nginx 通过ngx_fastcgi_modul模块 链接 php-fpm处理动态请求。

PHP-fpm => php Pastcgi Process Manager(fastcgi进程管理器)
原理:PHP通过php-fpm接收前台nginx的动态访问的请求,向后端Mysql进行查询请求后,将查询结果返回给前台nginx。

【LNMP|2021最新 LNMP => Php-fpm参数解析与优化(生产环境)】PHP-mysql
原理:php连接mysql的独立子程序(接口程序)


LNMP运行原理
环境:用户访问的http请求是由两种组成 => 静态请求、动态请求 1. 当用户发起静态请求 => .txt .jpg .avi .css,这些都属于静态元素 nginx是能够独立进行处理,并且将数据返还给用户。 2. 当用户发起动态请求 => .php..... nginx程序是无法全面处理动态请求, nginx通过FastCGI模块连接PHP 3. PHP接收用户的动态请求,再通过php-fpm处理动态请求 4. 最后通过php-mysql连接数据库,进行动态存储数据,经查询的结果返还给用户。


php-fpm 配置及优化 核心配置文件
vim /etc/php.ini # date.timezone = PRC(Asia/Shanghai)#设置PHP时区 # open_basedir#设置PHP脚本访问的目录

全局配置文件
vim /etc/php-fpm.conf # pid = /run/php-fpm/php-fpm.pid//pid文件的位置 # error_log = log/php-fpm.log//错误日志的文件 # log_level = notice//记录日志的等级 # process.max = 3//控制子进程最大数、0表示无限制、默认没设置 # daemonize = yes//经fpm转至后台运行(守护进程,执行后不会退出)

日志等级
alert(必须立即处理) error(错误情况) warning(警告情况) notice(一般重要信息) debug(调试信息)默认: notice.


扩展配置文件
vim /etc/php-fpm.d/www.conf # user = nginx//设置用户 # group = nginx //设置用户组 # listen.allowed_clients = 127.0.0.1//分离式部署时填写的Nginx服务器地址 # listen = 127.0.0.1:9000//本机的监听地址:端口 # slowlog = /var/log/php-fpm/$pool-slow.log//开启慢日志 # pm=dynamic//动态模式进程管理开启(下列进程的数量可以调整) # start_servers=5//初始化进程数量 # min_spare_server =5//最小空闲进程数(等待更多用户访问)、必须保证5个进程闲着 # max_children = 50// 最大进程数(防止多用户来时,服务器内存的负载) # max_spare_servers=10 //最大空闲进程数/消灭进程(高并发过后,子进程的剩余数) # max_requests = 500//每个子进程能响应的请求数量,到达此数字,该PHP进程就被释放掉了。

max_spare_servers=10
原理:只要是用在高并发场景/用户大规模,用户处理完请求后,有很多空闲的进程 每个进程之间都会消耗服务器的内存资源,一个php进程占用20M-30M空间 设置最大进程数,消灭多余的子进程,为服务器节省资源的消耗。

max_requests = 500
原理:每一个进程在处理完用户的请求之后,会残留用户不用的数据,这些数据会滞留在内存中 占用系统的资源,等待处理完500次请求后,在服务完成的最后一刻,释放掉,消灭该进程。 等下一个用户来了,在分出一个子进程处理。 滞留的数据:当你访问淘宝买东西,点一件商品,选好规格、颜色等信息后,你又不准备买,直接退出。 等你下一个在选择这件商品时,还是你之前选好的规格、颜色等..... 这些数据就滞留在服务器内存中。


优化php-fpm(生产环境)
1. vim /etc/php-fpm.d/www.conf # pm = dynamic # pm.start_servers = 32 # pm.max_children = 512 # pm.min_spare_servers = 32 # pm.max_spare_servers = 64 # pm.max_requests = 15002. 重启生效: systemctlrestartphp-fpm 3. 查看进程数:ps aux|grep php|wc -l


启动php状态监控页面功能
原理:通过Web前端展示页面详细显示PHP的状态,主要是给PHP工程师搭建
1. 启动测试页面: vim/etc/php-fpm.d/www.conf # pm.status_path = /php_status 2. nginx配置页面转发:vim /etc/nginx/conf.d/default.conf location = /php_status { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; #在运行时用的内置变量参数 include fastcgi_params; #包含了用到的变量 } 3. 配置生效: systemctl restart php-fpm systemctl restart nginx 4. 访问测试页面: http://本机IP/php_status

php_status参数解析
pool#fpm池名称,大多数为www process manager#进程管理方式dynamic或者static start time#启动日志,如果reload了fpm,时间会更新 start since#运行时间 accepted conn#当前池接受的请求数 listen queue#请求等待队列,如果这个值不为0,那么需要增加FPM的进程数量 max listen queue#请求等待队列最高的数量 listen queue len#socket等待队列长度 idle processes#空闲进程数量 active processes#活跃进程数量 total processes#总进程数量 max active processes#最大的活跃进程数量(FPM启动开始计算) max children reached#程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量过小,可以适当调整。






    推荐阅读