我在共享服务器上有一个asp.net/c# 4.0网站。
os Windows Server 2012运行的是IIS 7,拥有32GB内存和3.29GHz处理器。
服务器一次又一次遇到困难,例如RDP和其他PHP网站运行缓慢的问题。
我们的系统管理员建议我的网站可能存在这些问题并导致这些问题。
在任何时候,网站"内存(私人工作集)"是2GB,最高可达15GB。
我在服务器上运行了 JetBrains dotMemory 的试用版,附加到网站的w3wp.exe进程。我第一次使用这个程序,我是一个完整的新手。
我使用dotMemory拍摄了两张内存快照。
可以在此处查看基本快照比较:http://i.imgur.com/0Jk8yYE.jpg
从上面的比较中我们可以看到System.String和BusinessObjects.Item是具有最多幸存字节的两个项目。
深入研究system.string我可以看到主要的幸存对象是 System.Web.Caching.CacheEntry 135MB 。请参阅screengrab:http://i.imgur.com/t1hs8nd.jpg
这让我怀疑是否可能会缓存太多?
我缓存来自我的数据库的所有数据:HTML页面内容,导航菜单项,页面之间的关系&儿童,文章等。使用 HttpContext.Current.Cache.Insert 。
将缓存超时设置为10080分钟。
我的问题:
1 - 是2GB内存(专用工作集),对于32 GB Ram的服务器,峰值高达15GB?
2 - 我是否正确使用了dotMemory来识别问题?
3 - 我的缓存是一个问题吗?
4 - 可能的其他原因?
5 - 可能的解决方案?
由于
答案 0 :(得分:0)
使用大量内存本身不能减慢程序的速度。它可以放慢速度
您可以在dotMemory中查看内存流量信息。不幸的是,如果附加到程序中它无法收集此类信息,收集对象创建堆栈跟踪和内存流量信息的唯一方法是在dotMemory profiler下启动程序,启用相应的设置。
<强> BUT!强> 问题是您无法评估内存流量“N”是高还是不高,找到性能问题根的唯一方法是使用性能分析器。
例如JetBrains dotTrace可以告诉你,你在垃圾收集中花费了多少时间,只有这是一个瓶颈,你应该使用内存分析器找到一个流量根。
结论:首先尝试使用性能分析器找到瓶颈。 然后,如果您对dotMemory仍有疑问,请问我,我会尽力帮助您:)