MyEclipse Profile 结合visualvm 监控内存泄露
VisualVM是集成了多个JDK命令工具的一个可视化工具,它主要用来监控JVM的运行情况,可以用它来查看和浏览Heap Dump、Thread Dump、内存对象实例情况、GC执行情况、CPU消耗以及类的装载情况。在JDK Update7之后,VisualVM作为JDK的一部分发布,但同时VisualVM也发布独立的版本。VisualVM必须运行在JDK1.6以上的VM环境下,但可以用它来监控JDK1.4以上的JVM。
1:创建java工程VisualvmTest,写一个消耗内存的测试代码:
- public class MemoryLeak {
- public static void main(String[] args) throws InterruptedException {
- int MAX_CONSUMERS = 10000;
- int SLEEP_BETWEEN_ALLOCS = 5;
- ConsumerContainer objectHolder = new ConsumerContainer();
- while (objectHolder.size() < MAX_CONSUMERS) {
- System.out.println("Allocating object "
- + Integer.toString(objectHolder.size()));
- objectHolder.add(new MemoryConsumer());
- try {
- Thread.currentThread().sleep(SLEEP_BETWEEN_ALLOCS);
- } catch (InterruptedException ie) {
- // Do nothing.
- }
- } // while.
- Thread.sleep(1000*60*60);
- } // main.
- } // End of MemoryLeak.
- class ConsumerContainer extends Vector {
- }
- class MemoryConsumer {
- public static final int MEMORY_BLOCK = 1024;
- public byte[] memoryHoldingArray;
- MemoryConsumer() {
- memoryHoldingArray = new byte[MEMORY_BLOCK];
- }
- } // End MemoryConsumer.
public class MemoryLeak {public static void main(String[] args) throws InterruptedException {int MAX_CONSUMERS = 10000;int SLEEP_BETWEEN_ALLOCS = 5;ConsumerContainer objectHolder = new ConsumerContainer();while (objectHolder.size() < MAX_CONSUMERS) {System.out.println("Allocating object "+ Integer.toString(objectHolder.size()));objectHolder.add(new MemoryConsumer());try {Thread.currentThread().sleep(SLEEP_BETWEEN_ALLOCS);} catch (InterruptedException ie) {// Do nothing.}} // while.Thread.sleep(1000*60*60);} // main.} // End of MemoryLeak.class ConsumerContainer extends Vector {
}class MemoryConsumer {public static final int MEMORY_BLOCK = 1024;public byte[] memoryHoldingArray;MemoryConsumer() {memoryHoldingArray = new byte[MEMORY_BLOCK];}
} // End MemoryConsumer.
2:在MemoryLeak.java右键菜单选择【Profile As】->【Java Application】,在弹出如下窗口,选择【memory】.
3:程序开始启动运行,同时弹出visualvm窗口,如下图,【profile】tab可以看到对象大小比例。【监控】可以看到对的运行走向。
4:可以发现byte数组暂用比较大。在byte[]右键菜单选择【生成快照并显示栈分配跟踪】。能够快速定位在什么地方消耗比较大的内存,能够快速解决问题:
参考资料: VisualVM远程监控
MyEclipse Profile 结合visualvm 监控内存泄露相关推荐
- 内存泄露(十)-- KOOM(高性能线上内存监控方案)
KOOM介绍 OOMMonitor 介绍 KOOM线上APM监控最全剖析 一文看懂快手KOOM高性能监控方案 KOOM 浅析 [开源库剖析]KOOM V1.0.5 源码解析 目录 KOOM 功能 1. ...
- 进入Xcode4,选择菜单“Product”-“Profile”,快捷键Command+I 监测内存泄露
进入Xcode4,选择菜单"Product"->"Profile",快捷键Command+I 监测内存泄露 转载于:https://blog.51cto. ...
- java 监控 native 内存_JVM NativeMemoryTracking 分析堆外内存泄露
Native Memory Tracking (NMT) 是Hotspot VM用来分析VM内部内存使用情况的一个功能.我们可以利用jcmd(jdk自带)这个工具来访问NMT的数据. NMT介绍 工欲 ...
- java 内存泄露监控,Linux下实用的JAVA内存泄露监控命令
内存泄露一直是比较头疼的事情,下面三个命令我个人觉得相当有用. 1.jstack (linux下特有) 可以观察到jvm中当前所有线程的运行情况和线程当前状态 jstack 2083 输出内容如下: ...
- 安装Java Visualvm监控堆内存和参数说明
安装Java Visualvm监控堆内存和参数说明 1.概述 这篇文章介绍使用Java Visualvm工具监控堆内存VisualGC插件的安装以及监控堆内存参数说明. 摘要 VisualGC插件安装 ...
- 生产环境Go程序内存泄露,用pprof如何快速定位
内存泄漏可以在整个系统中以多种形式出现,除了在写代码上的疏忽,忘了关闭该关闭的资源外,更多的时候导致系统发生内存泄露原因可能是设计上决策不对.或者业务逻辑上的疏忽没有考虑到一些边界条件. 比如查数据库 ...
- 记一次线上JVM原生系统内存泄露排查
目录 问题报告 应用概况 初步分析 Java堆内存,MetaSpace等使用情况 Java堆外内存分析 进程原生内存分析(Native Memory) 原生内存详细分析 内存内容分析 引入jemall ...
- 7种内存泄露场景和13种解决方案
什么是内存泄露 什么是内存泄露,通俗的来说就是堆中的一些对象已经不会再被使用了,但垃圾收集器却无法将它们从内存中清除. 内存泄漏很严重的问题,因为它会阻塞内存资源并随着时间的推移降低系统性能.如果不进 ...
- 用 Go STL 查询 DB 引发的内存泄露
本文字数:5295 字 精读时间:10 分钟 也可在 5 分钟内完成速读 问题起因 这几天有一个 Go API service 经过定时监控发现占用的内存不断上涨,内存从初始的 70M 一直上升到超过 ...
最新文章
- 【硬件基础】制作直流电源
- 微软CEO纳德拉对话沈向洋:那些未来可期的计算机视觉研究与应用
- socket.io 之 engine.io
- 微软 Excel 365 里如何设置下拉菜单和自动高亮成指定颜色
- Java 9迁移指南:七个最常见的挑战
- 我的世界pe开服务器网站,我的世界pe服务器怎么开 开服图文教程
- 分支限界算法c语言_算法分析
- 【聚类分析】基于matlab交通干道车流量FCM聚类分析及预测【含Matlab源码 1141期】
- VMware pro 14
- 智慧城市网络安全建设框架及实践
- 哈勃分析系统解密:中招敲诈木马不用交赎金
- 2020-12-06 高等数学:常用积分公式
- Alibaba Cloud Linux 等保 2.0 三级版操作系统详解
- 两向量点乘坐标运算_向量点乘(内积)和叉乘(外积、向量积)概念及几何意义解读...
- 到底买苹果XS还是XR_iPhone XS和iPhone XR买哪个好?苹果XR和XS区别对比测评
- BottomNavigationView+ViewPager+Fragment 底部导航按钮
- 读懂LaTeX中cls文件
- [ecshop 资料] ecshop 手机 自动识别 ua 自动跳转到手机版本 miqinew ecmoban
- 小米路由器与edge109版本的问题
- C语言 —— 多维数组