霍者博客

VPS云主机服务器大量php-cgi.exe进程,导致CPU占用100%的解决方法

最近发现一个站点被攻击的很厉害,导致整个CPU持续跑满。网上方法文章很多,下面我就总结整理一个最简单的方法。

解决这个问题的办法是在web服务器配置中优化fastcgi配置文件参数。

C:\WINDOWS\system32\inetsrv\fcgiext.ini 文件中可以设定php-cgi进程相关参数,如:

[Types]
php = PHP
[PHP]
ExePath=C:\php-5.3.8-nts-Win32-VC9-x86\php-cgi.exe
maxInstances=100
InstanceMaxRequests=10000
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000
RequestTimeout=600
ActivityTimeout=900

有的版本里可能找不到这个maxInstances=100,我是自己在系统文件里加进去的。

在上面的配置中:

ExePath  指定了FastCGI解析程序的路径,

instanceMaxRequests  指定了每个实例可以处理的最大请求数,

maxInstances 指定可以启动的最大实例数目,

EnvironmentVars 创建了一个环境变量 PHP_FCGI_MAX_REQUESTS ,默认值设为10000,

requestTimeout  指定了请求的超时时间为600秒,

activityTimeout  指定了活动会话超时时间为900秒。

以下是建议值:

maxInstances=

把这个值改小

建议

512M 内存的改maxInstances=50

1G 内存的改maxInstances=80

2G 内存的改maxInstances=140

再修改

InstanceMaxRequests=

把这个值改小

建议

512M 内存的改InstanceMaxRequests=200

1G 内存的改InstanceMaxRequests=300

2G 内存的改InstanceMaxRequests=500

改完, 重启IIS。

instanceMaxRequests 和 PHP_FCGI_MAX_REQUESTS  这两个参数决定了一个php-cgi进程被创建出来之后,最多接受的PHP请求数,在lighttpd中默认配置是10000。也就是说这个php-cgi进程每接受10000次PHP请求后会终止,释放所有内存,并重新被管理进程启动。如果把它降低,比如改成100,那么php-cgi重启的周期会大大缩短,偶然的高内存操作造成的问题影响时间也会缩短。

maxInstances 这个参数指定可以启动的最大实例数目,即php-cgi.exe进程的数目。如果把它降低,比如改成100,那么在任务管理器的进程中最多只有php-cgi.exe进程,php-cgi.exe所占用的总内存将大大减少。

我现在用的服务器为windows 2003操作系统,2G内存,一个php-cgi.exe程序占用7-25M内存,我把maxInstances值调为10(因为我还有其他站点,所以大了,CPU还是会跑满),减少了php-cgi.exe进程的总数量,占用内存也减小了,反应速度比以前快了不少,至少调整到多少,可根据您的站点访问量来决定。

以下是我自己配置的数值:

[Types]
php=PHP
[PHP]
ExePath=D:\SOFT_PHP_PACKAGE\php5.3\php-cgi.exe
maxInstances=10
InstanceMaxRequests=200
ActivityTimeout=300
RequestTimeout=120
EnvironmentVars=PHP_FCGI_MAX_REQUESTS:1000,PHPRC:D:\SOFT_PHP_PACKAGE\php5.3\,MonitorChangesTo=D:\SOFT_PHP_PACKAGE\php5.3\php.ini


原创文章请注明转载自霍者博客本文地址:http://www.huozheweb.com/post/724.html,标题:VPS云主机服务器大量php-cgi.exe进程,导致CPU占用100%的解决方法

【我来说两句】
分享到:

相关文章:



评论 0

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。