内存泄漏诊断步骤:
1.查看各个代的内存使用情况(一般情况都是堆内存溢出) jmap -heap pid
2.查看jvm中对象的实例个数(找出占用内存较大的异常对象,根据程序可以初步判断是否应该存在比较大量的实例对象) jmap -histo pid
3.查看jvm中线程个数,是否有没被回收的线程(过多的不能被回收的线程会占用一定部分堆内存),将进程中所有的线程输出到文件,根据异常线程分析代码 jstack pid
4.通过dumap出内存数据,使用MAT进行分析(工具基本可以定位到哪些代码块,以及哪些实例变量是异常的)
5.配合服务器上面装的zabbix之类的监控软件,
jmap -heap pid
查看Java 堆(heap)使用情况
jmap -histo pid
查看堆内存(histogram)中的对象数量,大小
jmap -histo:live pid
这个命令执行,JVM会先触发gc,如果堆比较大,此步可能会stop the world,线上使用需要注意
jstat -gcutil pid 1000
每一秒钟监控打印一次pid的gc情况,分析YGC 和FGC 是否异常
jstat命令详解: https://blog.csdn.net/zhaozheng7758/article/details/8623549
jstack pid
查看当前jvm进程所有的线程
jmap -dump:format=b,file=/home/quote/recevier_hk/dump.dat 26333
dump某个程序的内存数据
这个命令执行,JVM会将整个heap的信息dump写入到一个文件,heap如果比较大的话,就会导致这个过程比较耗时,
并且执行的过程中为了保证dump的信息是可靠的,所以会暂停应用。
#调查java进程中的线程数、以及都是什么线程
1.查看线程数: ps -Lf pid | wc -l 或者是top -H -p pid (查看某个进程的信息,包含线程数)
2.通过top -H -p 命令查看各个线程使用资源的情况,并找出线程id
MAT(linux)分析内存步骤:
1.通过jmap -dump 将运行的java进程的内存数据dump出来
2.使用MAT for linux 的工具将第一步dump出来的文件分析。
具体执行命令:
sh ParseHeapDump.sh /home/quote/heap-Analyzer/sdata-dump.dump org.eclipse.mat.api:suspects org.eclipse.mat.api:overview org.eclipse.mat.api:top_components
3.通过第二步分析会产生几个html的页面结果
案例:https://www.cnblogs.com/liangzs/p/8489321.html
MAT下载:http://www.eclipse.org/mat/downloads.php
Shallow heap & Retained heap: http://bjyzxxds.iteye.com/blog/1532937
相关推荐
简单的判断JVM内存溢出的方法
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,导致内存溢出。 这一个一般是加大-XX:PermSize -XX:MaxPermSize 来解决问题。 -XX:PermSize 永久保存区域初始大小 -XX:PermSize 永久...
而阻碍系统性能提高的第一大元凶就是内存问题,更糟糕的是如果GC不能完全释放无用的内存,这会导致内存溢出,从而产生更严重的后果。 找出内存问题的元凶是一件非常困难的任务,幸运的是,heapaudit可以解决这个问题...
* 在内存结构章节,能够学习掌握 JVM内存溢出现象,堆栈内存结构,利用内存诊断工具排查问题。彻底分析 StringTable的相关知识与性能优化,掌握直接内存分配原理和释放手段。 * 在垃圾回收章节,不仅会介绍垃圾回收...
本作者项目原创经历,内容关于java的一个web项目内存溢出的分析和解决,其中详细介绍了诊断的方法和一些工具的使用,重点写了利用Eclipse Memory Analyzer 分析工具来分析jvm的堆快照。很有实用价值。
第4节jvm初体验-内存溢出问题的分析与解决 [免费观看] 00:17:59分钟 | 第5节jvm再体验-jvm可视化监控工具 [免费观看] 00:21:17分钟 | 第6节杂谈 [免费观看] 00:12:37分钟 | 第7节Java的发展历史00:27:24分钟 | ...
因为热爱,所以坚持 ...原因很简单:我们不想止于“增删改查工程师”这样的初级水平,一旦程序发生了内存溢出、内存泄漏等问题时,我们可以用已掌握的知识更好的调节和优化我们的代码。在学这章节之前
JVM内存模型1.7和1.8的区别 如何判断一个对象是否是垃圾对象 垃圾回收算法 Minor GC和Full GC 垃圾收集器 集合的继承体系 Collection 和 Collections的区别。 如何通过jdbc访问数据库 JDBC处理事务采用什么方法 ...
方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖 finalize() ...
答:运行时异常时(JVM)java虚拟机在运行过程中发生的问题,比如:内存溢出等问题。这类异常没法要求程序员去一一捕获并抛出,一般异常是Java类库或程序员自己写的代码发生的错误,这类异常可以由我们去一一捕获并...
<BR>3、常见异常实例包括:数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出异常处理功能:主要处理一些同步异常(除数为0),不宜处理一些异步事件(Disk I/O End、网络信息到达、点击...