优化VestaCP phpfcgid模板配置进程多内存耗尽500错误

广告

VestaCP 的WEB服务 选择 “phpfcgid” 模板后,大量的PHP-CGI进程,造成内存很快被耗光:

  • 重新启动服务器的几个小时内,基本上一直处于内存不足的状态。
  • 之前空闲的PHP-CGI进程没有被杀死,1个进程运行近20个子进程,消耗至少100M的内存。

SSH 中使用 htop 命令(需安装),可查看到此状态 ▼

VestaCP 的WEB服务 选择 “phpfcgid” 模板后,大量的PHP-CGI进程,造成内存很快被耗光

如果你在使用 htop 命令时,出现错误提示 “-bash: htop: command not found”,解决方法请看这篇教程 ▼

大量的PHP-CGI进程,造成内存很快被耗光,问题就出在VestaCP在CentOS的phpfcgid模板中,使用了未优化的配置。

  • VestaCP在phpfcgid模板中,设置1个PHP-CGI进程可以运行最多20个子进程。

请参阅 /usr/local/vesta/data/templates/web/httpd/phpfcgid.sh 文件的第13行:

export PHP_FCGI_CHILDREN=20

但是,这样的设置违反了Apache在PHP子进程管理文档中的警告:

PHP child process management (PHP_FCGI_CHILDREN) should always be disabled with mod_fcgid, which will only route one request at a time to application processes it has spawned; thus, any child processes created by PHP will not be used effectively. (Additionally, the PHP child processes may not be terminated properly.) By default, and with the environment variable setting PHP_FCGI_CHILDREN=0, PHP child process management is disabled.

因为在Apache的mod_fcgid模块里,PHP-CGI进程只能响应一个请求并一次运行,PHP-CGI子进程的效率非常低。

所以,应该直接禁用PHP子进程管理的设置 ▼

PHP_FCGI_CHILDREN=0

同时,如果你已经有生成的虚拟主机,则需要修改所有网站的配置文件 ▼

/home/用户名/web/域名/cgi-bin/fcgi-starter

打开 fcgi-starter 配置文件后,将以下内容▼

export PHP_FCGI_CHILDREN=20

修改成 ▼

export PHP_FCGI_CHILDREN=0
  • 修改后,PHP子进程管理将以mod_fcgid模式关闭。
  • PHP-CGI进程将不再生成子进程,这可以节省大量内存。

还有,VestaCP 没有设置闲置进程的终止机制:

  • 所有新执行的PHP-CGI进程将继续使用内存,直到系统重新启动。

要解决这个问题,只需在mod_fcgid配置文件 /etc/httpd/conf.d/fcgid.conf 中添加以下设置 ▼

FcgidIdleTimeout 120
  • 将Apache设置为自动终止闲置2分钟(120秒)的PHP-CGI进程。

设置完成后,重新启动Apache服务 ▼

service httpd restart

在服务重新启动后,之前HTOP中显示的数百个PHP-CGI进程将不再显示。

通常,单个Vesta CP用户的单个PHP-CGI进程消耗30至40M内存,完全满足Linux主机的需求。

因此,网络营销人想要做好SEO,对Vesta CP和模板的配置优化非常重要 ^_^

可以看看以下VestaCP面板的相关教程 ▼

希望陈沩亮博客( https://www.chenweiliang.com/ ) 分享的《优化VestaCP phpfcgid模板配置进程多内存耗尽500错误》,对您有帮助。

欢迎分享本文链接:https://www.chenweiliang.com/cwl-735.html

欢迎加入陈沩亮博客的 Telegram 频道,获取最新更新!

喜欢就分享和按赞!
您的分享和按赞,是我们持续的动力!