关于php-fpm多版本共存,回收内存等问题


目前多版本共存的方法有好几种,

1,使用端口监听

listen = 127.0.0.1:9080

 

2,使用sock监听
listen = /usr/local/php8/php-cgi.sock

 

但是目前个人建议的方式如下 nginx 通信php-fpm的时候使用unix-socket通信,因为套接字效率更高

查看是否启动成功 ps -es|grep php

nginx转发请求

location ~ \.php(.*)$ {
            fastcgi_pass   unix:/usr/local/php8/php-cgi.sock;
            #fastcgi_pass   127.0.0.1:9080;
            fastcgi_index  index.php;
            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param  PATH_INFO  $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;
            include        fastcgi_params;
        }
location ~ \.php(.*)$ {
            fastcgi_pass   unix:/usr/local/php72/php-cgi.sock;
            #fastcgi_pass   127.0.0.1:9072
 fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; }

这就多版本共存的模式

还有我们常说的php-fpm不会吧内存归还给系统内存是因为什么呢?

第一是可以更高效执行,但是会吃掉很多系统内存

max_request默认是0,即不释放,就是我们一般所说的不归还系统内存

如果你需要一定程度触发内存释放给内存

你可以设置max_request =300,

注意如果这个值设置过大,就不会经常触发fpm的进程内存释放

如果设置过小,就会经常释放内存,一定程度上影响PHP性能

 

怎么设置一个合理的大小呢?这个你需要注意的点比较多,

首先你平常需要关注一下项目的最大峰值,平常内存水平

 

以下均为估值

比如你的内存是8G,平常访问是qps是500,php-fpm内存消耗是2G,峰值是6G,qps是3000左右

但是6Gfpm的消耗,加上系统其他服务的消耗,基本没剩多少了,为了减少峰值情况下,内存耗尽的问题,导致fpm问题,

那么你的max_request可以设置成600 OR 800,不影响平常运行,开始出现峰值开始释放内存

 

如果你真的需要高并发低内存场景,你可以试试swoole做服务端

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM