安装php时候,细心的大家可以发现我们同时安装了php-fpm模块,fpm模块就是负责处理请求进程的。而fpm这里相关的操作将直接影响服务器能响应多少请求,设置得当将有效提高处理效率,否则将会出现502网关超时或504错误。
下面我们来打开/etc/php/7.2/fpm/pool.d下的www.conf文件,找到如下几个参数:
pm = dynamic pm.max_children = 5 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 ;pm.max_requests = 500
这是笔者安装php后的默认参数,下面逐一讲解:
第一个dynamic表示进程的处理模式为动态,对应还有static模式
如果pm设置为staic,那么只有pm.max_childern这个参数生效
如果pm设置为dynamic,后面4个参数都生效。系统会在php-fpm运行开始时启动pm.start_servers个php-fpm进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整php-fpm进程数。
第二个参数pm.max_children表示最大能fork(启动)多少个进程,很明显,这个数额越大,那么将能同时更多的请求,自然不会出现连接慢、请求等待时长但是CPU或内存还占用不高的情况。这个数值在静态方式下指开启的php-fpm进程数量, 在动态方式下限定php-fpm的最大进程数。
第三个参数pm.start_servers表示如果是dynamic动态模式下,初始状态启动几个进程,随后根据需要动态调整,并由pm.min_spare_servers和pm.max_spare_servers两个参数决定。
第四个参数pm.min_spare_servers表示动态方式下空闲状态下的最小php-fpm进程数量,清理空闲进程后保留的数量
第五个参数pm.max_spare_servers表示动态方式下空闲状态的最大php-fpm进程数量,即当空闲进程达到此数值时清理
第六个参数pm.max_requests表示经历多少次请求后,销毁此进程重新启动,这样可以避免内存泄漏问题。
很明显这里max_children是5刚开始还够用,随着流量增大一定是不够用的,下面来谈谈具体的数值设定,最直接影响的是pm.max_children值,最基本的原则是:在内存CPU系统资源允许的情况下,越大越好,这里可给一个计算方式,如一个fpm进程大约15~25M,那么当服务器4G内存情况下,仅在理想状态下,开满可以约150~300个,然后观察服务器状态予以调整
一般而言,大内存服务器(如32、64G起))可以考虑静态模式,并发量效果好,小内存服务器可以考虑动态模式,按需自动控制
大家可以根据自己情况予以压力测试,根据自身服务器状况予以调整
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程