18910140161

php-fpm.conf配置性能优化

顺晟科技

2021-06-16 10:32:32

236

默认情况下,php-fpm.conf有以下配置(如果php-fpm.conf没有找到这个配置,那么这个配置在www.conf) :

pm=动态

pm.max_children=50

pm.start_servers=20

pm.min_spare_servers=10

pm.max_spare_servers=30

Pm表示使用哪种过程数量管理方法

当值为动态时,表示FastCGI进程数是动态的,由pm.start_servers在开始时指定。如果有更多的请求,它将自动增加,以确保空闲进程的数量不小于pm.min_spare_servers。如果有更多的进程,它将被相应地清理,以确保冗余进程的数量不超过pm。max _ spare _ servers。

当值为静态时,表示php-fpm进程数是静态的,进程数是pm.max_children从头到尾指定的数,不会增减

Pm.max_children配置在静态模式下打开的FastCGI进程数

Pm.start_servers以动态模式配置启动FastCGI进程的数量

Pm.min_spare_servers在动态模式下配置最小数量的FastCGI进程

动态模式下FastCGI进程的更大数量由pm.max_spare_servers配置

数值设置参考你的实际硬件配置,参考总内存/30M计算。

如果dm设置为静态,只有参数pm.max_children实际生效。系统将打开FastCGI进程来设置该号码。

如果dm设置为动态,参数pm.max_children无效,最后三个参数生效。在php-fpm运行之初,系统会启动pm.start_servers FastCGI进程,然后根据系统需求动态调整pm.min_spare_servers和pm.max_spare_servers之间的FastCGI进程数。

如何选择“pm=动态”或“pm=静态”

事实上,就像Apache一样,运行的PHP程序在执行后或多或少都会有内存泄漏的问题。

这也是为什么一个php-fpm进程在一开始只占用3M左右的内存,运行一段时间后会上升到20-30M。

对于内存大的服务器(比如8G以上),使用static max_children其实更合适,因为不需要控制额外的进程数,这样会提高效率。因为php-fpm进程频繁开关机会延迟,内存足够大的时候静态效果会更好。量也可以根据总内存/30M得出。比如8GB的内存可以设为100,那么php-fpm消耗的内存就可以控制在2G-3G。

对于内存小的服务器,比如1~2G,指定静态进程数更有利于服务器的稳定。这样可以保证php-fpm只得到足够的内存,不会给其他应用分配太多的内存,这样会让系统运行的更顺畅。

对于内存小的服务器,比如内存256M的VPS,即使按照20M的内存量计算,10个FastCGI进程也会消耗200M的内存,所以系统崩溃应该是正常的。

所以FastCGI进程的数量要尽量控制,在其他应用占用的内存一般已知后,再分配一个静态的小数量给它,这样会让系统更加稳定。

或者使用动态模式,因为动态模式会结束冗余进程,可以回收释放部分内存,所以建议在内存较少的服务器或者VPS上使用,具体更大数量可以按照总内存/20M来获得。

例如,对于512M VPS,建议pm.max_spare_servers设置为20。至于pm.min_spare_servers,建议根据服务器的负载情况进行设置,比较合适的值在5-10之间。

总结:建议小内存使用动态(pm=动态),大内存使用静态(pm=静态)。

使用以下命令查看平均内存状况

ps - no-headers -o 'rss,cmd '-C PHP-fpm | awk ' { sum=$ 1 } END { printf(' % d % s \ n ',sum/NR/1024,' M') } '

使用以下命令确定每个PHP-FPM子进程(即FastCGI)使用的内存:

ps -ylC php-fpm - sort:rss

相关文章
我们已经准备好了,你呢?
2024我们与您携手共赢,为您的企业形象保驾护航