Site Loader

  在使用Nextcloud Web服务的过程中,我们很多时候发现页面响应比较缓慢,当请求量大时,甚至会出现502 Bad gateway的情况。出现这种情况,多为PHP的进程管理没有优化好,导到PHP-CGI挂了。

  因此,我们需要对PHP的进程管理进行适当优化。直接影响进程性能的有两个fpm参数,pm.max_children和request_terminate_timeout。

  pm.max_children表示php-fpm启动的子进程的最大数量。一个子进程的内存占用约为20-40M,默认值是5,这个值远远不够,可按服务器的内存多少分配。
  笔者服务器8G内存,并发请求量不大,目前pm.max_children的值设为50,满载运行约占1000-2000M不等,内存占用量的计算方式为“pm.max_children的值 x 子进程内存占用量”。

  request_terminate_timeout表示执行子进程后的超时终止时间。默认值为0 ,表示执行子进程后并不会将其终止,但对于服务器性能一般,并且访问不频繁的情况下,会导到资源的虚耗。
  我们可以修改一下值,笔者设成900,表示900秒。

  首先安装好php-fpm,可参照《Nextcloud性能优化-开启HTTP2》安装php-fpm部分。

  修改/etc/php/7.3/fpm/pool.d/www.conf(本文以php7.3-fpm为例)

  找到pm.max_children,把值改为50。

pm.max_children = 50

  再找到 request_terminate_timeout,把前面分号去掉,值设为900,默认单位是秒,数值后面加小写s代表秒,小写m代表分钟,小写h代表小时,小写d代表天。

request_terminate_timeout = 900

  最后重启一下php7.3-fpm及apache2让其生效即可。

service php7.3-fpm restart
service apache2 restart

  至此,php-fpm的进程已优化好,但所设定的值并非固定,需要按自己实际的情况而定,可以在使用过程中慢慢调整,找出一个适合自己的设定值。

  在使用过程中,可以运行htop命令查看资源使用情况。