分析内存泄漏问题
频繁GC问题或内存溢出问题
- 使用jps查看线程ID
- 使用jstat -gc 3331 250 20 查看gc情况,一般比较关注PERM区的情况,查看GC的增长情况。
- 使用jstat -gccause [PID]:额外输出上次GC原因
- 使用jmap -dump:format=b,file=heapDump 3331生成堆转储文件
- 使用jhat或者可视化工具(Eclipse Memory Analyzer 、IBM HeapAnalyzer)分析堆情况。
- 结合代码解决内存溢出或泄露问题。
jstat -gc 3331 250 20
生成堆转储文件
jmap -dump:format=b,file=[导出文件名] [PID]
jmap -dump:format=b,file=[导出文件名] [PID]
jmap -dump:format=b,file=iot08-TCP0506Dump 426184
会在当前目录下生产堆栈文件
IBM HeapAnalyzer
官网:
https://www.ibm.com/support/pages/ibm-heapanalyzer
dowmload:
https://public.dhe.ibm.com/software/websphere/appserv/support/tools/HeapAnalyzer/ha457.jar
下载 ha*.jar 后运行
java -Xmx2g -jar ha*.jar
-Xmx2G 是加载的 堆栈文件太大, 内存不够使用
选择接在 上面的堆转储文件 heapDump(例子) 的文件
生成的堆转储文件 也可以使用 JProfiler 进行分析
后缀需要改成 .hprof
官网:
https://www.ej-technologies.com/products/jprofiler/overview.html
JProfiler 帮助文档:
https://www.ej-technologies.com/resources/jprofiler/v/12.0/help_zh_CN/doc/main/memory.html