java程序内存泄漏排查
2017-12-29 17:51
417 查看
首先通过jps找到java进程ID。然后top -p [pid]发现内存占用达到了最大值(-Xmx)。开始怀疑是由于频繁Full GC导致的,于是通过jstat -gcutil [pid] 60000查看GC的情况,其中60000表示每隔1分钟输出一次。果然是Full GC次数太多,JVM大部分时间都进行Full GC,而此时JVM会暂停其他一切工作,所以程序运行得非常慢。
那到底的程序的哪一部分导致消耗了这么多的内存呢?通过jmap -histo:live [pid]查看进程中各种类型的对象创建了多少个,以及每种类型的对象占多少内存。当我看到有个对象被创建了5千多万个实例时,我就能定位到是哪儿的问题了。
顺带说一下,通过jmap还可以生成JVM的内存dump文件,命令为jmap -dump:format=b,file=文件名 [pid],然后通过jhat命令在浏览器中查看,或者通过jvisualvm、eclipse memory analyzer等工具进行查看。使用jhat命令查看的方式为:jhat -J-Xmx1024M [file],等控制台输出Started HTTP server on port 7000. Server is ready.后在浏览器中输入ip:7000就可以查看各上类中各种实例被创建了多少个。
相关文章推荐
- 如何分析java程序的内存泄漏
- Java程序里的内存泄漏是如何表现的
- java应用死循环排查方法或查找程序消耗资源的线程方法
- Java 程序里的内存泄漏
- vc++ 程序内存泄漏的排查
- Java程序排查问题利器之Btrace
- Java 程序里的内存泄漏
- java应用死循环排查方法或查找程序消耗资源的线程方法(面试)
- Java 程序里的内存泄漏
- Java虚拟机性能管理神器 - VisualVM(6) 排查JAVA应用程序内存泄漏
- 内存监控方法之——Jmap结合Memory Analyzer,分析java程序是否存在内存泄漏
- Java程序中的“内存泄漏”问题
- 记一次java程序CPU占用过高问题排查
- 一个java内存泄漏的排查案例
- Java内存泄漏--程序和内存的关系
- 通过一个小Demo学会java内存泄漏排查优化
- Java程序中的“内存泄漏”问题
- java内存泄漏问题排查
- Java程序排查问题利器之Btrace
- Java排查内存泄漏的好工具