介绍
介绍
福哥把PHP从Apache module换成了Fpm,跑了几天突然发现网站打不开了。
页面显示超时,检查MySQL、Redis一众服务都正常。
进入Fpm容器查看日志,发现了如下的错误信息:
server reached pm.max_children setting (5), consider raising it
原因
原来默认情况下Fpm的系统参数是这样的:
pm.max_children = 5 pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_spare_servers = 3
说明一下这些参数:
max_children | 最多进程数量 |
start_servers | 启动时候开启的进程数量 |
min_spare_servers | 最小空闲进程数量 |
max_spare_servers | 最多空闲进程数量 |
最多5个进程,这显然是不够用的了!
解决
加大子进程数量避免系统崩溃!
平均一个进程占用35M左右的内存,容器分配的内存是1G,1024/35=29,避免内存用光设置少一点,就25个吧!
pm.max_children = 25 pm.start_servers = 10 pm.min_spare_servers = 10 pm.max_spare_servers = 25
除此之外我们还可以通过max_requests参数让进程经过一定的服务次数之后重新启动,这样可以避免系统崩溃的情况出现。
max_requests参数比较容易理解,就是一个进程服务这么多次数之后就会自动销毁掉,然后系统根据其他参数自动补充进程。
这个没有什么算法,服务器访问量大就设置大一些,访问量小就设置小一些。
pm.max_requests = 600
总结
服务器搭建是非常简单的,关键是调整这些参数以适应网站、平台的性能,保证它的稳定运行,这个才是价值所在!