什么会导致 IISExpress 私有字节不断增加,而托管堆中没有任何重大变化?
我有一个 ASP.NET MVC 3 应用程序,它使用 Windsor 来注入存储库和 NHibernate 会话。今天,我第一次遇到了 OutOfMemoryException
。起初我认为这可能是因为我没有释放 Windsor 创建的任何 Transient
对象。作为一个快速实验,我将所有这些转变为 PerWebRequest
生活方式,但它似乎并没有在很大程度上影响内存使用模式 - 它仍然持续上升。
- 我没有做任何缓存
- 我没有使用任何非托管资源
- 我正在对几个匿名对象进行 JSON 序列化
- 我用于压力测试的操作仅返回一个微小的 JSON 对象(32 字节) ),所以任何地方都不涉及大对象
当我的托管堆大小稳定(使用 Perfmon 验证)时,什么可能导致 IISExpress 私有字节继续增加?
调试这个问题的正确工具是什么?我假设 CLR 分析器可能没有帮助,因为 Perfmon 没有显示托管堆中的任何泄漏。
I have an ASP.NET MVC 3 app that uses Windsor for injecting repositories and NHibernate sessions. Today, for the first time, I hit an OutOfMemoryException
. At first I thought it might be because I wasn't releasing any of the Transient
objects that Windsor was creating. As a quick experiment, I turned all of those into PerWebRequest
lifestyle, but it doesn't seem to have affected the memory usage pattern in a big way -- it still keeps going up.
- I'm not doing any caching
- I'm not using any unmanaged resources
- I am doing JSON serialization of several anonymous objects
- The action that I'm using for stress testing just returns a tiny JSON object (32 bytes), so no large objects are involved anywhere
What could cause IISExpress private bytes to keep going up when my managed heap size is stable (verified with Perfmon)?
What would be the right tool to debug this? I'm assuming CLR profilers may not be helpful because Perfmon doesn't show any leak in the managed heap.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
禁用 Glimpse 后,内存使用情况似乎很稳定。
我不知道它可能会做什么来泄漏非托管内存,但只需在 web.config 的 Glimpse 配置部分中设置
on="false"
即可立即使内存使用稳定。Memory usage seems to be stable after I disabled Glimpse.
I don't know what it could possibly be doing to leak unmanaged memory, but just setting
on="false"
in the Glimpse configuration section in web.config instantly makes the memory usage stable.