曾经问过这个问题(http://community.csdn.net/Expert/topic/3281/3281276.xml?temp=.8477594
),后来不知怎么着,好了。因为我碰不到公司的服务器,所以也不知道怎么解决的,总之以前的问题访问量增加后,突然任何asp.net页面都没有反应了,应该是asp.net的进程死掉了。因为asp页面正常。最近又有一个新的问题出现,我们又完成一个新的网站。(改造旧网站),在我自己的开发机器上win2000+ii5 ,看起来还好。但是正式发到我们公司带负载平衡的机器上(win2003+iis6), Host.dll(好像是这个名字)那个进程占用内存不断攀升,然后死机。匆忙中转移到开发服务器上,避免了影响正常服务器上其它程序的运行。我实在不知怎么回事,因为这回的程序我保证
1.绝对每次关闭连接
2.访问数据库一个页面里只有一次,应该和数据库连接不是极频繁。(这个理由欠妥)在移到开发服务器上后,因为这个服务器上没有其它的网站运行,所以就是它自己,据硬件部门反馈移过来后内存由7M攀升到300多M.
后来的几分钟内我给我的一个连接数据库的用户控件加了一个5分钟的cache,因为这个用户控件每页都有。upload后。机器没出现立即死机现象。运行一个下午正常,但是这时候无法知道是我加的cache起的作用还是这台服务器上的其它程序少起的作用。但是因为这台服务器已经开始正式工作,所以无法再断开测试。晚上,死了一回。第二天,第三天,因为设置成了IIS每隔一小时reset,所以问题似乎没再出现。但是今天公司也不知道哪来的软件做了个测试,尽管asp.net的网站没问题,但是速度上比公司其它的asp网站要慢。所以,要向各位请教。asp.net应该没道理比asp慢,我的页面基本上都是静态的,只是每页有一个usercontrol,每次与数据库进行一条SQL语句的查询,后台数据库是一个Oracel(8.1.7),运行在一个unix上。我后来单独给这个控件加入一个5分钟的cache后,效果确实有改善。运行IIS服务器的硬件配置 win2003, 512M以上内存(我也不是很清楚,应该只多不少)我的分析:应该机器硬件或者负载平衡的问题。因为那个发布服务器上同时运行着另外4、5个网站,全是asp的,只有一个asp,net的(以前我说慢的那个)。但是又似乎不可能,因为虚拟主机服务商的机器上应该至少运行10个以上网站吧。请有经验的各位指点如何分析和找到问题所在。那个服务器的访问量大概在3000次/天,不同IP大概 500-1000/天。问得有点啰嗦,请您费心。
感谢。

解决方案 »

  1.   

    影响效率的因素非常多。
    既然你是负载均衡,你是否用了<sessionState mode="SQLServer"。
    这样会严重影响速度。
      

  2.   

    影响效率的因素很多,有开发的、部署的等等,开发方面你可以参考--Developing High-Performance ASP.NET Applications:
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconDevelopingHigh-PerformanceASPNETApplications.asp个人对部署不是很了解,如gshope提到的,如果你使用的是out-of-process方式的session,会影响一定的性能,另外如防火墙等的配置不当也会导致性能下降
      

  3.   

    感觉是你遇到dll hell,或写的程序不会自释放,建议你换win2003 IIS6,将此应用单开一个程序池,如果没有条件换server,在2000机器里寻找machine.config,改动相关配置,使其cpu或内存超限制就重起.
      

  4.   

    processModel项是用来配置asp.net进程管理的,这些设置只能在machine.config中完成,其用于机器上的所有asp.net应用程序其配置共有14个选项(注意大小写):
    enable ="true|false" 是否起启用单独的asp.net进程
    timeout ="infinite|munute" 进程超时后重启asp.net进程
    idleTimeout="infinite" 自动终止进程
    shutDownTimeout="000:05" 从容结束进程 在asp.net kill进程前从容结束进程
    requestQueueLimit="5000" 在N个请求之后重新运行进程
    restartQueueLimit="10" 排队的请求达到N个之后重新启动asp.net进程
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    memeoryLimit="60" 内存消耗过多后重新运行进程
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    webGarden="false" 支持多工作进程,只有在多处理器上支持
    cpuMask="0xffffffff" 
    userName=""
    password=""
    logLevel="Errors"
    clientConnectedCheck="0:00:05"检查客户端是否保持连接
    另外不要将大量数据存放在dataset中,一般情况下,datareader就够用了,一台普通服务器一天3WIP也没问题,程序中注意异常处理,同样可以捕获错误,不要用debug模式
      

  5.   

    >既然你是负载均衡,你是否用了<sessionState mode="SQLServer"。
      整个项目没用Session。 
    >用垃圾收集试试
      咋试呢
    >你在2003下开发  怎么还在2000下开发?  不同的机器某些方面一定不同你最好在2003下编译一次
      我的开发机器是win2000, 公司的服务器是win2003>to  magicmaster(蓝色) 
      我会照你的方法试一试,以前还真没关注过这方面PS: 公司今天新做了一个win2000的服务器+IIS5 单独跑asp.net的程序, 4 个750CPU,1G内存。 我在那上面再试试。有什么问题再来请教,暂不结贴。谢谢。 
      

  6.   

    新服务器运行了1个多月了,又是两个服务器跑的负载平衡,这回上面放的都是.net的项目,大概有4个网站,都是.net写的,总体上看没有死机的现象出现了,工作可称为正常。但就是利用测试软件发现 asp.net下的网页总是比asp写的要慢一些。 因为asp网站现在在另外一个服务器上了,所以可以对二者有一个简单的比较,但是anyway, 能工作了, 谢谢大家的的帮忙。谢谢。