技术开发 频道

Java内存泄漏分析

    按Total time排序查看就可以找到哪些方法是占用CPU最多的。

    

    图3 按Total time排序查看Thread methods的数据

    但是当时我犯了非常严重的错误,以前在filter中把系统类(例如java.*、sun.*等等)过滤了,忘了取消,结果查出来的结果非常莫名其妙,最占用CPU的函数(达30%多)居然只有一个long型的赋值语句!这是在profiler的属性中设置的,如图:

    

    图4 Eclipse的profiler插件的运行属性设置

    后来想起有这个问题,把fliter重新设好,检测结果就正常了,不过没有什么有价值的线索,占用CPU较多的都是java系统包的方法(后来查出问题后回想才发现这里其实是有线索的)。于是就怀疑是内存快用光时JVM的内存管理模块会大量占用CPU,所以导致java程序的CPU占有率偏高(现在还不知道是否确实如此),另一方面,这些检测工具本身就大量消耗系统资源,也是导致CPU占用为100%的主要原因。于是,又改为用Borland Optimizeit Suite检查内存问题了。

    先启动Optimizeit Suite中的profiler模块:

    

    图5 启动Profiler模块

    

    图6 在Profiler主界面中添加新Setting

0
相关文章