进程中出现很多php-cgi.exe的解决方案

By | 2014年1月7日

今天就要下班了,编辑部反应统计文章这一块程序出现问题。于是乎我就登陆网站后台去解决此问题,不想此问题好解决,遇上另一问题。在查看后台的时候,异常的缓慢,但是以为是公司网速问题,可是发现打开其他的页面都不慢,所以并非本机网速问题。同时一想,是不是服务器网速这会不行呢,于是立即用命令ping一查看,还好呀,很快。于是我就登陆服务器控制板,发现登陆不了,远程也不行。这时就知道是服务器问题了。

好不容易登陆进去,可是很慢,操作很麻烦,于是打开任务管理器一开。发现很多php-cgi.exe的进程,直接内存满了,CUP100%,导致卡死。

现象如图:

因为之前没有接触过这方面,想到谷歌,百度。找到原因和解决方案如下:

原因一:

系统临时文件在C盘(c://WINDOWS/TEMP),导致空间不够,运行缓慢。

解决方案:

更改系统临时缓存文件存储位置,同时删除临时文件,可用杀毒软件进行垃圾处理。

原因二:

服务器中毒了,导致了cgi这个程序一直在实例化,而且实例化进程最高限制没有设定好

解决方案:

进行杀毒,同时更改cgi的最高线程实例。更改文件fastcgi里面的最大进程数字改成“2”。

原因三:

由于php是动态原因,每访问一次数据库,或者刷新一次就会在进程中多出一个php-cgi.exe进程,怀疑是有人恶意访问,统称被D。

解决方案:

把原来的cgi模式改成isapi模式,怎么改?

cgi模式改成isapi模式方法:

进入IIS,右键网站,属性如图更改

网站更改完了,更改web服务扩展,如图

注意事项:

在更改模式的时候,填写isapi执行文件地址的时候,如果地址中出现空格会“地址中出现空格需要用括号括起来”之类的提示。可是怎么加括号都没有用,原来是微软提示BUG,应该是用引号不是括号,这样就可以了。

如果还是不行,可以偿试下面的方法

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:1000
RequestTimeout=60
ActivityTimeout=90
php.ini下找到memory_limit = 128M ; Maximum amount of memory a script may consume (128MB) ?把两个128都改成512

php安装目录,给一个users用户组的“读取和运行”权限

如果还是不行,就用fastcgi模械,设一个iisreset的计划任务吧。