最近的服务器网站打开很缓慢,甚至有的时候根本就打不开,ping服务器返回值是正常的。
在解决了打开网站"Services Unavailable"页面的情况后,网页是可以很快的打开了,但是接下来出现的问题是打开很缓慢,刷新几次就根本打不开网页了,也没什么错误提示,明显的是网速过慢的状况。
难道是服务器的访问量太大了造成的访问过慢?前几天的日访问量达到3W人都没问题的啊,这次出现的问题难道就是访问量大造成的吗?实在是摸不着头绪。根据上面的问题,把各个网站新建自己的应用程序池,再一个一个的关闭,测试出其中一个网站的应用程序池出了问题后网站就打不开了,其它网站没影响,但是服务器远程连接反应超级慢,无意中打开“任务管理器”看了一下,发觉w3wp.exe占用了很高的cpu,难道是CPU占用导致了服务器运行缓慢?再导致网站访问缓慢?
经过实验,证实应用程序池确实和w3wp.exe存在着很大的关系,一个网站的主机头对应一个w3wp.exe进程 ,如果某个应用程序池运行不正常的话,那么就会导致w3wp.exe占用大量的CPU,拖垮服务器。
更详细的判定是哪个网站的应用程序池的问题,可以用下面的判定方法:
1 在任务管理器中增加显示 pid 字段。就可以看到占用内存或者 cpu {zg}的进程 pid !
2 在命令提示符下运行 iisapp -a。注意,{dy}次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到 pid 对应的应用程序池。
3 到 iis 中察看该应用程序池对应的网站就可以了!然后真对站点排除错误!(如果运行后出现 error - no no results 这样的提示,说明你的站点没有开启或还没有被访问过!)
解决方法:
1 尝试删除系统路径\System32\Logfiles\W3SVC1 下当天的错误日志文件,如:ex090404.log,然后重新启动IIS,等待一段时间,看看有没有问题。
注:有时非法重启或者写入日志错误都有可能造成 w3wp.exe 进程锁死。
2 设置应用程序池的CPU监视,不超过25%,每分钟刷新,超过限制时自动关闭。
注:此方法只能用来做为测试,在真正的环境下,这个可能会引起网站时好时坏。不推荐长期使用。
3 检查你的程序代码,或者网页调用,程序没写好或者有死循环,是最容易造成 w3wp.exe 锁死的。
注:方法是先停止IIS,再删除当天的网站日志(系统路径\System32\Logfiles\对应的网站目录下),然后开启IIS,等待CPU高占用的出现,这时在1分钟内打开新建的日志文件,按出现时间,对应检查里面所罗列出现的文件,检查代码是否有问题。
4 检查数据库完整性和 ODBC 的有效性。
注:有些写得不好的 ASP 程序,在访问数据库无法做到容错性,所以有些时候数据库损坏或者 ODBC 传送数据不正常,都有可能造成多次强制查询,从而体现为 w3wp.exe 高 CPU 占用。
5 检查文件的权限。
注:不要奇怪,某些时候真的出现这种事情,一个文件无法写入或者无法读取,都会引起很大的问题。
我使用的解决办法:根据目前所使用的方法,启用“应用程序池”的进程回收。所谓的“CPU监视--停止”方法实际上不是很稳定,在windows2003+php下很容易导致“PHP has encountered an Access Violation at 7C95C853”的错误。同时关闭“启用快速失败保护”。