DNN网站出现服务不可用
前几天,在调试DNN网站的时候,当数据量一大,发现网站速度特别慢。
而且动不动就出现服务不可用的提示。
经过半个小时的调整后,总算又恢复了正常。因为在DNN山海经里一说,发现大家似乎都有这个问题,估计也会有其他朋友遇到,因此把我的一些心得体会写出来,给大家一点启示。因为是几天前的事情了,具体的一些提示信息等的可能记不清楚了。但是具体思路应该是对的。
首先是查看windows的应用程序日志,可以发现提示asp.net的内存使用超过60%的提示,造成aspnet_wp.exe被结束重启。
观察windows的内存使用情况,发现sqlserver和aspnet_wp.exe 2个进程的内存达到了将近1G。我使用服务器的物理内存就只有1G。
首先,我将sql server的内存进行了限制,限制最大到300M。
发现还是不行。
于是想到的是因为我在DNN的Host配置中
Page State Persistence: Memory
Module Caching Method: Memory
Performance Setting: Heavy Caching
因此我将这几个配置降低,改成以下配置:
Page State Persistence: Page
Module Caching Method: Disk
Performance Setting: Moderate Caching
进行这样更改后,基本能正常访问了,但是发现只要多访问几下,马上还是会出现内存超过60%的问题。只是现在出现的次数少点。
没有办法,只好更改machine.config中<processModel>节点中对内存的限制,
将memoryLimit改为150,也就是允许使用物理内存的150%。这时基本正常了。
以上是具体的解决过程。
通过这个过程,我有以下感想:
1、首先是我采用的是永日的文章管理模块,当我的数据量不是很大的时候,没有出现这个问题,但当我数据上了万条以后就出现了,感觉它的这个性能优化做的不是很好,怀疑它的List显示模块没有对数据进行很好的缓存和优化。同时,感觉这种没有源代码的东西很烦,尤其是在碰到问题的时候,因为这种属于小东西,不可能有那么好的售后服务,于是对于使用者来说就会很痛苦。所以看来如果要采用文章管理模块,尽量还是自己写,或者开源的。
我之所以采用永日这个东西,主要是因为我做的这个项目时间很紧,我从接触DNN,到项目完成只有3个月时间。当时的要求是必须开源,而且要基于Asp.Net,并且要很好的继承原先asp网站的数据,这这么短的时间里,自己写个这样的框架不太现实,而Asp.net开源中,DNN无疑是最为耀眼的CMS框架。
2、DNN的性能确实很成问题,如果没有很好的服务器配置,很难流畅的运行。因此,象小型的个人网站,购买空间的这种小型网站,采用DNN不是很好,因为有点杀鸡用牛刀的感觉。首先是DNN的目标并不是个人网站,而是主机供应商;其次是DNN没有免费的文章管理模块,而对于国内的这种网站来说,这块是非常重要的。
对于服务器配置问题,我下一步准备采用更好的服务器配置,可能会采用几个CPU和几个G的服务器进一步测试。
3、对于上面的性能缓存问题,最好根据自己的内存进行配置,否则可能适得其反,因为如果如果缓存很大的话,对内存和cpu都是有损耗的,有个人可能会说只对内存有损耗,怎么会对cpu有损耗呢?原因是管理缓存,查找缓存的时候对cpu有影响,因此如果cpu和内存跟不上,反而造成性能下降。
接触DNN也有2,3个月了,分析了它很多的源代码,学到了很多知识,其中有正面,也有反面的。
例如其中采用的Provider设计方式就是值得借鉴的,同时例如DataProvider和xxxDataProvider这种继承架构感觉就不太好,这里应该采用接口,而不是抽象类,这样xxxDataProvider可以继承自统一的xxxDataProviderBase类,这样不需要在每个xxxDAtaProvider类中都有那些读取连接字符串等等的一些公用操作。
经过很多的思考后,觉得DNN需要改进的东西还有很多很多,至少对于我自己的项目来说是这样。对于里面一些设计思想,我可能会继续学习,不过也有了搭建自己的类似架构的想法。