代码改变世界

死循环导致w3wp.exe进程CPU占用率100%

2008-10-21 16:08  zhangz  阅读(1681)  评论(0编辑  收藏  举报

    昨天快下班时同事准备把改好的报表的链接发给客户,让客户测试。在发邮件之前先检查了一遍,结果发现连页面都打不开,之前是可以打开的。同事让我帮他检查一下。

   我remote到server上,一进桌面就弹出来提示说C盘空间不足,一看就剩100多M了,赶快把没用的都删了。可是报表还是打不开。试试其他的网站都能打开,说明不是IIS的问题。打开任务管理器发现有一个w3wp.exe进程CPU占用率100%,我就给报表站点新建了一个application pool,重启iis。然后点开几个报表,都能打开了,但是过一会CPU又100%了。应该是代码有问题了。又重启IIS,然后把刚才的那几个报表挨个打开试试,最后发现有一个页面一打开CPU占用率立刻就上去了,终于找到了~,剩下的事就是去改代码了。

   解决内存占用过多,可以做以下配置:
   1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
   2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500M),就自动回收内存。

   解决CPU占用过多:
   1、在IIS中对每个网站进行单独的应用程序池配置。
   2、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。

 

   google到的怎样找到有问题的网站:

   首先设置任务管理器的查看方式,勾上显示PID,记住w3wp.exe进程的PID。

   然后在命令行里运行iisapp -a,可以看到PID对应的应用程序池。

   再去iis中查看该应用程序池对应的网站,有问题的网站就找到了,剩下的就是这个网站代码中的问题了。  


   IIS的设置推荐Omar AL Zabir的这篇blog:Best practices for creating websites in IIS 6.0