php的静态模式与动态模式区别(附加学习链接)

php的静态模式与动态模式区别

前言

php-cgi是早期php官方出品的fastcgi管理器,不支持平滑重启,改了php.ini就要kill掉原来的php-cgi再重新启动才能生效;不支持动态worker调度只能一开始指定要起几个worker。灵活性很低,管理很不方便,于是出现了php-fpm。

php-fpm是从php5.3.3版本才加入的fastcgi进程管理器,加入了动态调度功能,可以根据请求来访压力变化动态增减worker进程数量;支持reload指令,让worker进程在完成当前请求后重启,并应用php.ini新配置。

而php-fpm作为管理php-cgi进程的工具,有两种管理模式:静态模式和动态模式。废话少说,今天我和大家一起来学习 php的动态模式和静态模式的区别以及在生产环境下该如何去选择!

静态模式

1.启动指定数量的php-fpm进程,在工作过程中进程数量保持不变。

2.配置文件:

  • pm  static    指定静态模式
  • pm.max_children 指定进程数量 (总内存处于30一般2G内存设置为50 4GB设置为100)

动态模式

1.预先启动指定的php-fpm进程,然后这个进程会随着请求的增大或减少进行动态的变化(自适应)

2.配置文件:

  • pm dynamic 指定动态模式
  • pm.max_children
  • pm.start_servers 动态模式下起时的php-fpm进程数量。一般10到20 (要小于最大php-fpm数量)
  • pm.min_spare_servers 动态模式下最小的php-fpm进程数量 (一般5-10之间)
  • pm.max_spare_servers 动态模式下最大的php-fpm数量(总内存的百分之80再处以20)

注意:动态模式也需要配置pm.max_children  且pm.max_spare_servers的数量要小于pm.max_children

两种模式配置文件的优先级问题

如果将dm设置为static,那么就只有pm.max_children这个参数生效。系统会开启设置的数量个php-fpm进程。

如果将dm设置为dynamic,那么pm.max_children参数会失效(但是不能没有这个参数),后面3个参数生效。系统会在php-fpm运行开始的时候启动pm.start_servers个php-fpm进程,然后根据系统需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。

注意:该图则是我在动态模式下删除了 pm.max_children参数 

两种模式如何选择

首先我们的程序都会存在一个内存泄露的问题,尤其是开发技术不够给力的时候,在程序申请操作系统的内存后没有做好回收策略,导致随着程序使用的过程中,内存占用的越来越大,除非重启服务才会释放。例如一个php-fpm进程只占用3M左右,但是运行一段时间就会上升到20M甚至30M。那么基于这个问题考虑

1.如果你的机器内存不够大,我们常常选择动态模式,这样的话在请求空闲的时候会自动清理多余的进程来释放内存。

2.如果你的服务器内存较大,设置为静态模式会提高工作效率,因为频繁的开关php-fpm进程有时也会有时滞。

备注:附加几个比较好的截图 

摘自:https://www.kancloud.cn/digest/php-src/136260

 

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Loading...