每次我怀疑有内存泄漏时,我都要翻箱倒柜找这些命令。所以,这里总结一下以备后用:

首先,我用下面的命令监视进程:

1
while ( sleep 1 ) ; do ps -p $PID -o %cpu,%mem,rss  ; done

(如果有的话还有New Relic)

如果你看到内存上升很快,可能是因为虚拟机设置。如果你没有明确指定JVM的内存设置,它将设置默认值给他们。要获得默认值,使用以下命令:

1
java -XX:+PrintFlagsFinal -version | grep -i HeapSize

如果这些都不符合你所希望的,那么你就需要指定JVM的内存设置。可以用下面的命令设置最小和最大堆大小:

1
java -Xms128m -Xmx256m

尽管你有了合理的内存设置,也可以监控进程,但你仍然可能看到内存随时间增加。为了进一步探究原因,你可以使用下面的命令查看对象实例的直方图:

1
jmap -histo $PID

如果仍然没有足够的信息,那么可以用以下命令进行堆转储:

1
jmap -dump:format=b,file=/tmp/dump1.hprof $PID

通常,我会用两个堆转储,然后使用下面的jhat命令比较它们:

1
jhat -baseline /tmp/dump1.hprof /tmp/dump2.hprof

这个命令会启动一个HTTP服务器,你可以用它来探索这两个堆转储之间的差值。在默认情况下,HTTP服务器启动7000端口,你可以在浏览器中访问该端口。

如果你有防火墙,可以通过SSH访问,那么你可以通过如下命令连接该端口:

1
ssh -L 7000:localhost:7000 $HOST

向下滚动到第一页的底部,你会看到两个有用的链接:

  • Show heap histogram
  • Show instance counts for all classes (excluding platform)

这将给你展示在不同堆转储之间所有“新”的实例,应该对你检测泄漏来自哪里有些帮助。截图如下:

然后你就拥有了一个神奇命令行的快速查看目录,以便于你需要诊断内存泄漏时使用(然而我总是忘记)。

原文链接: dzone 翻译: ImportNew.com - fzr
译文链接: http://www.importnew.com/17153.html

诊断Java中的内存泄露相关推荐

  1. Java中的内存泄露的几种可能

    转载自  Java中的内存泄露的几种可能 Java内存泄漏引起的原因: 内存泄漏是指无用对象(不再使用的对象)持续占有内存或无用对象的内存得不到及时释放,从而造成内存空间的浪费称为内存泄漏. 长生命周 ...

  2. java中的内存泄漏

    ● 请问java中内存泄漏是什么意思?什么场景下会出现内存泄漏的情况? 考察点:内存泄漏 参考回答: Java中的内存泄露,广义并通俗的说,就是:不再会被使用的对象的内存不能被回收,就是内存泄露.如果 ...

  3. Java中关于内存泄漏出现的原因以及如何避免内存泄漏

    转账自:http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静 ...

  4. (转载)Java中关于内存泄漏出现的原因以及如何避免内存泄漏

    原文链接 Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题.内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实 ...

  5. ​Java 中的内存溢出和内存泄露是什么?我给你举个有味道的例子​

    作者 l 会点代码的大叔(CodeDaShu) JAVA中的内存溢出和内存泄露分别是什么,有什么联系和区别,让我们来看一看. 01 内存泄漏 & 内存溢出 1. 内存泄漏(memory lea ...

  6. LeakCanary——消除Android中的内存泄露

    2019独角兽企业重金招聘Python工程师标准>>> ##LeakCanary ####简介 LeakCanary是Square公司最近公布的开源项目,旨在消除Android中的内 ...

  7. android中内存泄露,Android中的内存泄露

    编辑推荐: 本文来自于csdn,本文主要从java的内存模型讲起,最终举出几个内存泄露的例子和解决方案. java运行时内存模型 具体信息:http://gityuan.com/2016/01/09/ ...

  8. Java中关于内存泄漏分析和解决方案,都在这里了!

    作者:李序锴 www.jianshu.com/p/54b5da7c6816 最近正在熟悉Java内存泄漏的相关知识,上网查阅了一些资料,在此做个整理算是对收获的一些总结,希望能对各位有所帮助,有问题可 ...

  9. java程序会发生内存泄露吗及内存泄漏场景

    java程序会发生内存泄露的问题吗?请简单说说你的观点 答案:会.Java内存管理是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收的,java程序员不需要通过调用函数来 ...

最新文章

  1. js调用ios和安卓方法
  2. 博客园有人随笔总数10000+?
  3. Nginx负载均衡配置实例详解(转)
  4. 打开流 fopen 、freopen和fdopen函数
  5. POJ 2593解题报告
  6. php5.5升级到php5.6,从php5.5.9升级到php5.6之后,相当于php5enmod?
  7. C ++ STL中的set :: lower_bound()函数
  8. win10下安装deepin双系统教程
  9. RustScan(端口扫描器)
  10. “科目四”竟是民间杜撰出来的?
  11. BZOJ 3772: 精神污染
  12. 电脑换固态装系统总结
  13. 张飞硬件MOSFET驱动电路_sdchguyi_新浪博客
  14. TIDB 性能测试(TIUP-TPCC)
  15. HDU3507打印文章 斜率优化入门
  16. 劳伦-杰克逊日记里对姚明的真情告白
  17. STC8H8K64U 的 USB 功能测试(未成功)
  18. 【愚公系列】2023年02月 WMS智能仓储系统-012.登录功能的实现
  19. 2020苏州大学计算机考研上机试题
  20. VR制作中必须踩的坑365之029(oculus2、UE4、UE5、VR记录一年的踩坑之旅)触感反馈/为VR控制器制作震动

热门文章

  1. 2022-03-18 今日工作
  2. linux install命令文件夹,详解Linux系统中的install命令的用法
  3. 关于微型计算机主板的描述错误的是,2016年9月计算机一级考试试题及答案「单选」...
  4. 约瑟夫环双向链表c语言实,双向链表与约瑟夫环代码
  5. python中raise stoplteration_推导表达式迭代器生成器模块和包 | 编程电脑技术交流...
  6. java公平所与非公平所_一张图读懂Java非公平锁与公平锁
  7. CSS+HTML大白
  8. Vivado 随笔(6) Timing Summary 相关讨论(一)
  9. Verilog HDL 使用规范(一)
  10. hive无法执行带where语句的SQL