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。

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 = 1500
    
2. 重启生效: systemctl  restart  php-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,那说明你的最大进程数量过小,可以适当调整。

你可能感兴趣的:(LNMP,php,lnmp,nginx,云计算,linux)