探索,發現,愛好、學習,記錄,分享。
學海無涯,天涯若比鄰,三人行,必有我師。

VestaCP面板PHP-CGI进程过多耗尽内存问题解决

VestaCP面板对较新发布的系统支持并不理想,到现在对Ubuntu 14.04的支持只能说是勉强能正常运行,还没有得到很好的优化,而对Redhat/CentOS 7的支持则完全还没开始。在Ubuntu 14.04系统中,VestaCP面板的部分设置仍有调整优化的空间,Kaijia这次就遇到的PHP-CGI进程耗尽内存的情况就是由于配置未优化造成的。

Kaijia的VestaCP模块(Package)设置使用的是phpfcgid模板,这样可以通过PHP-CGI模块有效得实现站点间文件访问的阻隔。但这样做的代价是每个Unix用户都会拥有自己的FCGI实例,因此需要支出额外的内存。当配置失当时更会造成虽然服务器访问量低但内存接近耗尽的情况,使用htop等工具查看有如下图:

HTOP显示PHP-CGI大量进程占用内存情况

HTOP显示PHP-CGI大量进程占用内存情况

虽然Kaijia放在VestaCP服务器上的网站P/V很低,但大量的PHP-CGI进程仍然在服务器重启后数小时内基本耗尽了内存,很早之前闲置的PHP-CGI进程没有被杀死,一个进程下面运行了近20个子进程消耗了至少100M的内存。造成这一现象的原因既是VestaCP在Ubuntu的phpfcgid模板中使用了未优化的配置。

首先VestaCP在phpfcgid模板中设置了单个PHP-CGI进程最多可以运行20个子进程(见/usr/local/vesta/data/templates/web/apache2/phpfcgid.sh文件第13行):

然而这样的设置却违反了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子进程管理,即设置:

在VestaCP中解决这个问题,首先需要修改/usr/local/vesta/data/templates/web/apache2/phpfcgid.sh文件的第13行参数为0。同时,如果有已经生成的虚拟主机,需要修改所有站点的配置文件,将/home/用户名/web/域名/cgi-bin/fcgi-starter中的:

修改为:

完成修改后mod_fcgid模式下PHP子进程管理将会关闭,PHP-CGI进程将不再生成子进程,可以节约大量内存。

其次,VestaCP没有设置有效的空闲进程杀死机制,所有新运行的PHP-CGI进程将会持续占用内存直到系统重启。解决这个问题只需要在mod_fcgid的配置文件/etc/apache2/mods-enabled/fcgid.conf中增加设置:

就可以了,FcgidIdleTimeout设置了Apache自动杀死空闲2分钟(120秒)及以上的PHP-CGI进程。

完成设置后重启Apache服务:

服务重启后htop中显示的上百个PHP-CGI进程就再也不会出现了。一般情况下单个VestaCP用户单个PHP-CGI进程消耗30~40M的内存,完全满足商业虚拟主机的需求,因此对VestaCP和模板的配置优化是不可缺少的。

版權聲明:本文采用知識共享 署名4.0國際許可協議 [BY-NC-SA] 進行授權
轉載事宜:如需轉載需徵得應允,轉載必須注明來源於本站的信息。
文章名称:《VestaCP面板PHP-CGI进程过多耗尽内存问题解决》
文章链接:https://www.thefreesky.com/blog/20585.html
本站資源僅供個人學習交流,請於下載後24小時內刪除,不允許用於商業用途,否則法律問題自行承擔。

評論 抢沙发