网站服务器:奔4cpu双核2.8GHz,2G内存,win 2003server企业版。asp.net程序,Duwamish架构,全部采用存储过程。数据库里有个表,里面数据2万条左右,使用了搜索引擎工具供用户对这个表里的数据进行全文搜索。现在访问量大概每天1600左右,iis6.0的w3wp进程隔几十分钟cpu资源就占到100%,有时分裂成两个w3wp进程,应该是在进行内存回收吧,这时网站特别慢,回收完后速度马上又快了iis的回收设置都改过,好像不起作用,还是随时都可能回收
局域网内ACT测试程序同时支持200个浏览器没问题
服务器也重装了
最不明白的是网站正常运行了好几个月后才出这种问题,访问量增加了一倍(估计)就变成这样啊由于自己经验不足,弄了10多天没进展,请高手、好心人帮帮我,可能原因那些。如果要优化程序,该怎样下手

解决方案 »

  1.   

    did you check the event logs? anything significant? seeHOWTO: Basics of IIS6 Troubleshooting
    http://blogs.msdn.com/david.wang/archive/2005/12/31/HOWTO_Basics_of_IIS6_Troubleshooting.aspx
      

  2.   

    刚刚遇到似乎和你相同的问题,不过不是垃圾回收,而是iis死掉。给程序增加了运行Log,发现了一些莫名奇妙的错误。研究半天发现应该是程序占用内存过多的问题。解决方法:检查程序,肯定有内存泄漏的地方,比如资源使用后没有dispose。你的访问量并不是很大,每天1600左右,我遇到情况是访问量1万多,只能采取页面静态化+缓存。
      

  3.   

    不是杀毒软件问题。。
    saucer:the event logs指的是操作系统的事件查看吗,看了没什么问题
    查内存泄露有什么好办法吗,一句句跟踪太慢了
      

  4.   

    1600访问量比较小了啊。是不是哪资源没释放?w3wp好象是存储缓存的吧?
    不管是什么,代码用到对象的时候都尽早dispose();
      

  5.   

    一是能加 dispose的类 都加 dispose
    还有一个比较好使的办法,
    在 iis 服务管理器里,你的程序所在的“应用程序池”上
     右键
    在属性 第2页,性能那里
    把 Web 园,最大进程数 改为 3-5 或者更多,然后会出现多个 w3wp.exe 进程
    来处理你的网站,占用CPU100% 就不会发生了
    我以前出现类似情况就是这么处理的
    感觉 iis 的 w3wp.exe 有点问题的一定,为啥多进程就没事了
      

  6.   

    没有别的办法,只能耐心的检查代码,我用act作压力测试都不会出现类似的问题,似乎只有到了真正的环境下才会有。我的解决方法就是读代码,找漏洞,增加异常日志,通过日志也会找到一些问题,比如请求超时什么的。
      

  7.   

    服务器上就一站?ASP程序在使用联接方式如:DBQ="&server.mappath("/2.mdb")&";DRIVER={Microsoft Access Driver (*.mdb)};" 
    在访问人数多时也会假死.
      

  8.   

    Window 2003 引进了应用程序池的概念,楼主可以在 IIS 看到“应用程序池”的节点建议:
         1、为站点单独分配一个应用程序池(最好是一个系统建立一个),如果不新建的话,所有系统将放在“DefaultAppPool”中
         2、设定好“应用程序池”的属性,如回收时间、执行的线程数、权限等
         3、代码中若出现死循环,则将引发“应用程序池”的中止事件
      

  9.   

    FlashElf:能加 dispose的类除了sqlconnection外,最常见的还有什么资源类呢。
    soldierB:另有一个问题,哪些地方最可能内存泄露?
    现在正在检查代码,过两天就结帖子,谢谢大家的关心
      

  10.   

    System.IO命名空间下的很多类都需要dispose,我还遇到使用System.web.ui.webcontrols.xml控件的时候Xsl转换xml的时候也会导致内存累积无法清除,根本原因是Xmlserializer的使用会导致csc.exe编译临时文件。另外还需要检查程序在逻辑上有没有问题,会不会在大访问量的时候频繁使用内存。