. net网站超大峰值工作集内存
本文关键字:工作集 内存 网站 net | 更新日期: 2023-09-27 18:16:53
我在一个共享服务器上有一个asp.net/c# 4.0网站。
Windows Server 2012运行IIS 7,内存32GB,处理器3.29GHz。
服务器运行遇到困难,如问题的RDP和其他PHP网站运行缓慢。
我们的系统管理员建议我的网站是一个可能的内存占用和这些问题的原因。
在任何给定时间,站点的"内存(私有工作集)"为2GB,最高可达15GB。
我在服务器上运行了一个试用版的JetBrains dotMemory,附在网站的w3wp.exe进程上。这是我第一次使用这个程序,在这里我完全是个新手。
我用dotMemory拍了两个内存快照。
和基本的快照比较可以在这里看到:https://i.stack.imgur.com/8Oksl.jpg
从上面的比较我们可以看到,系统。字符串和业务对象。
表示保存字节数最多的两个条目。钻入系统。我可以看到幸存下来的主要支配对象是System.Web.Caching。CacheEntry with 135MB。见截图:https://i.stack.imgur.com/WvWYy.jpg
这让我怀疑也许我缓存太多了?
我缓存所有数据,来自我的数据库:HTML页面内容,导航菜单项,页面之间的关系&儿童、物品等。使用 HttpContext.Current.Cache.Insert 。
缓存超时时间设置为10080分钟。
我的问题:
1 - 2GB内存(私有工作集)和高达15GB的峰值对于具有32 GB Ram的服务器来说太多了吗?
2 -我是否正确使用dotMemory来识别问题?
3 -我的缓存有问题吗?
4 -可能的其他原因?
5 -可能的解决方案?
谢谢
使用大量内存本身不会减慢程序的速度。可以放慢速度
- 如果windows正在使用交换文件。请管理员检查此情况
- 如果。net程序导致垃圾收集过多(产生过多内存流量)
您可以在dotMemory中看到内存流量信息。不幸的是,如果它附加到程序上,它不能收集这些信息,收集对象创建堆栈跟踪和内存流量信息的唯一方法是在dotMemory profiler下启动程序,启用相应的设置。
但是!问题是您无法评估内存流量"N"是否高,找到性能问题根源的唯一方法是使用性能分析器。
例如,JetBrains dotTrace可以告诉你,你的程序在垃圾收集上花费了多少时间,只有在这种情况下,你才应该使用内存分析器来找到流量的根源。
结论:首先尝试使用性能分析器找到瓶颈。然后,如果你仍然有关于dotMemory的问题,问我,我会尽力帮助你:)