php配置学习
重要的以粗体+斜体进行展示
php-fpm.conf
emergency_restart_threshold = 10 : 在指定时间内,如果失效的php-fpm子进程数超过这个数值,php-fpm主进程进行优雅重启
emergency_restart_interval = 1m : 设定emergency_restart_threshold设置采用的时间跨度
Pool Definitions
include=/usr/local/php72/etc/php-fpm.d/*.conf : 一个名为Pool Definitions的区域,这个区域里的配置用于设置每个php-fpm进程池.php-fpm进程池中是一系列相关的php子进程.include=是引入进程池定义文件.在/usr/local/php72/etc/php-fpm.d/中有个www.conf就是进程池的配置文件
www.conf
[www] ====>www是进程池的名称
user = nginx 拥有这个php-fpm进程池中子进程的系统用户
group = nginx 拥有这个php-fpm进程池中子进程的系统用户组
listen = 127.0.0.1:9000 php-fpm进程池监听的IP和端口,让php-fpm只接受nginx从这里传入的请求
listen.allowed_clients = 127.0.0.1 可以向这个php-fpm进程池发送请求的ip地址.127.0.0.1的设置.说明了只有当前设备能把请求转发给php-fpm进程池
pm.max_children = 51 设定php-fpm进程池最多有多少子进程.我们可以根据设备进行设置.比如你给php分配了512MB内存,然后每个php进程大概是5-15mb内存.512/10(平均单个进程内存) = 51 个子进程
分配可以参考如下方式 1.一共能给php分配多少内存?2.单个php进程平均消耗多少内存?可以用top命令查看,也可以在php代码最后调用memory_get_peak_usage()返回分配给 PHP 内存的峰值(字节数)3.获得能负担得起多少个php-fpm进程, 总内存/平均单个内存=php-fpm进程数
pm.start_servers = 2 php-fpm启动时进程池中立即可用的进程数.
pm.min_spare_servers = 1 php应用空闲的时候php-fpm进程池中存的进程数的最小值
pm.max_spare_servers = 3 php应用空闲的时候php-fpm进程池中存的进程数的最大值
pm.max_requests = 500 回收进程前,php进程最多处理的http请求数.这个设置有助于避免内存泄漏
slowlog = log/$pool.log.slow 这个日志文件用于记录处理时间超过request_slowlog_timeout的http请求信息
request_slowlog_timeout = 5 关联slowlog使用,超过这个时间就进行记录
php.ini
memory_limit = 128M 设置单个php进程可以使用的系统内存最大值
Zend OPcache扩展----用于缓存操作码
HTTP请求流程
客户端 ===> nginx ===> 转发给php-fpm ===> 把请求交给php子进程处理 ==> 找到对应的代码==> 读取代码===> 将代码编译为操作码(字节码)===> 执行操作码===> 生成响应===> 发给nginx===> 客户端
缓存之后我们可以从缓存中直接读取并执行预先编译好的操作码,不用每次处理http请求的时候都查找,读取和编译
下面是关于这个zend OPcache的配置,从php5.5就已经内置了Zend OPcahce扩展(我的是php7.2),下面的配置可以参考但别照抄应该根据自己的系统配置
开启
zend_extension=opcache.so
opcache.enable=1
opchache.memory_consumption=128 为操作码缓存分配多少内存量(MB)
opcache.interned_strings_buffer=8 用来存储驻留字符串的内存量(mb)
驻留字符串解释
php解释器在会找到相同字符串的多个实例,把这个字符串保存到内存中,如果再次使用相同的字符串,php解释器会使用指针,这么做能节省内存.在默认情况下,php驻留的字符串会隔离在各个php进程中.而opcache.interned_strings_buffer这个配置能将所有进程的驻留字符串保存到共享的缓冲区中.这样多个进程之间就可以使用这个驻留字符串.从而节省更多内存
opcache.max_accelerated_files=10000 操作码缓存中最多缓存多少个php脚本.这个值一定要比你php应用的文件数量大.但是也要在200----100000(不通php版本可能不一样,100000是我从Modern PHP看的)
opcache.revalidate_freq=2 设置多长时间检查一次php脚本是否有更新(单位:秒)
opcache.validate_timestamps=1 1:经过一段时间(revalidate_freq)php会检查php脚本的内容是否有变化. 0:不自动检查,需要自己手动清除缓存的操作码.(建议开发环境设为1,正式环境设为0).手动的方式是调用opcache_reset()这个php方法刷新