zoukankan      html  css  js  c++  java
  • 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 的这个功能后,问题解决。

  • 相关阅读:
    springboot + ApplicationListener
    spring-boot集成swagger
    Servlet对象生命周期(四)
    MyEclipse 基本使用(三)
    Servlet视频-开发第一个java web(最简单的java web程序)(二)
    java Servlet学习笔记(一)
    java JDBC
    冒泡和选择排序 事例
    c#转 java学习笔记(原创)
    数据存储、进制转换
  • 原文地址:https://www.cnblogs.com/zrhai/p/3793152.html
Copyright © 2011-2022 走看看