类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
曾经问过这个问题(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/天。
问得有点啰嗦,请您费心。
感谢。
网友回答:
up
拟主机服务商的机器不可能只是512m的内存的
影响效率的因素非常多。。。。
既然你是负载均衡,你是否用了<sessionState mode="SQLServer"。。。。
这样会严重影响速度。
不会吧。
影响效率的因素很多,有开发的、部署的等等,开发方面你可以参考--
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,会影响一定的性能,另外如防火墙等的配置不当也会导致性能下降。。。
感觉是你遇到dll hell,或写的程序不会自释放,建议你换win2003 IIS6,将此应用单开一个程序池,如果没有条件换server,在2000机器里寻找machine.config,改动相关配置,使其cpu或内存超限制就重起.
都是高人呀,学习中
用垃圾收集试试
你在2003下开发 怎么还在2000下开发? 不同的机器某些方面一定不同
你最好在2003下编译一次
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模式
gz
up