我安装了 PHP5-CGI、Apache 和 MYSQL。在添加这些设置之前,PHP5-CGI 会无休止地拥有超过 15 个进程,每个进程都会占用 5 MB 的内存。因此,我将这些设置添加到 /etc/apache2/conf.d/php5-fcgid.conf,PHP5-cgi 进程受到限制。但是,现在,每次我在 4 或 5 分钟内打开 20 个线程/页面时,服务器就会停止正常运行,一切都会冻结,页面停止加载,直到 2 或 3 分钟过去后,它又会像闪电一样快速运行。
AddHandler fcgid-script .fcgi .php
# Where to look for the php.ini file?
DefaultInitEnv PHPRC "/etc/php5/cgi"
# Where is the PHP executable
FCGIWrapper /usr/bin/php-cgi .php
# Maximum requests a process handles before it is terminated
MaxRequestsPerProcess 1500
# Maximum number of PHP processes.
MaxProcessCount 15
# Number of seconds of idle time before a process is terminated
IPCCommTimeout 240
IdleTimeout 240
# Large site
ServerLimit 2048
ThreadLimit 100
StartServers 10
MinSpareThreads 30
MaxSpareThreads 100
ThreadsPerChild 64
MaxClients 2048
MaxRequestsPerChild 5000
我正在运营一个网站(smf 论坛),平均每 20 分钟有大约 450 名用户访问,因此有点忙乱。那么,发生了什么事?
答案1
我马上看到的第一件事是,你的代码FCGIWrapper
看起来像是实际的php-cgi
可执行文件,而不是一个包装脚本,它配置了 PHP 期望的环境变量,其值将与 一起使用fcgid
。默认情况下,PHP 在 500 个请求后退出,但你让 fcgid 期望它们持续 1500 个。你可以在以下位置找到示例和解释Apache 的文档但基本上您需要将PHP_FCGI_MAX_REQUESTS
环境变量设置为php-cgi
大于MaxRequestsPerProcess
fcgid 正在使用的设置。
你可以跳过包装脚本,直接DefaultInitEnv PHP_FCGI_MAX_REQUESTS 1501
在 Apache 配置中使用
此外,您的配置很旧,所有指令名称已改变但旧的还可以用目前。