Windbg 分析内存上涨
症状:
上次一站点发布后,发现服务器内存持续上涨。正常本地缓存占了4-5个G ,使用内存直接涨到20G后应用程序池重启。
检查代码后发现,没有什么内存泄漏的地方。最后还是找来DUMP文件排查原因。
!dumpheap –stat 查看当前所有托管类型的统计信息
System.Threading.ReaderWriterCount 占了七个G。这是个读写锁, 有一亿多个对象。
!dumpheap –mt 000007fef32fa770 查看函数表地址中的各个对象信息
然后查看其中一个对象
!gcroot 0xooooooo1f27e03b8 查找对象的根,需要很久的时间
这个是ReaderWriterLockSlim 的内部对象。
继续查找ReaderWriterLockSlim的根
!gcroot 00000001d09379d8
这是用引用框架DLL 内部的方法。
应该是什么原因造成创建了大量ReaderWriterLockSlim对象又没有释放。
找到原代码后发现,是由于注册了一个HttpModule 对每个不重复的访问目录进行记录,这个过程会对每个目录分配一个读写锁。
正好,上次另一个客端的更新,每次访问都加上随机后缀目录。造成大量的读写锁。
禁掉DLL 的这个功能后,问题解决。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。