目录
4. jamp+MAT(导出内存映像文件,MAT分析内存溢出)
1.基于JDK命令行工具的监控
1.1JVM的参数类型
1.1.1标准参数(相对来说比较稳定的参数)
1.1.2 X参数(有可能会变)
1.1.3 XX参数 用得最多最重要 主要分为两类
bool类型 表示启用或者禁用,例如:
非bool类型,K,V的形式,比如:
注意:-Xms 和-Xmx也是XX类型参数
更多命令访问:https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr.html#diagnostic_tools
2.运行时JVM参数查看
查看正在运行的java进程:jps
加上-l参数显示应用程序主类的完整包名或应用程序JAR文件的完整路径名:
jinfo命令查看运行时JVM的参数:
查看运行的jvm被我们手动赋过值的参数:jinfo -flags <进程号>
查看运行的jvm指定的参数:jinfo -flag MaxHeapSize <进程号>
3. jstat查看JVM统计信息
查看类装载的信息:jstat -class <进程号>
类装入器统计信息。
Loaded:已加载的类数。
Bytes:加载的KB数。
Unloaded:已卸载的类数。
字节:卸载的KB数。
时间:执行类加载和卸载操作所花费的时间。
查看垃圾回收:jstat -gc <进程号> <每隔多少毫秒> <输出多少次>
JVM内存结构:
4. jamp+MAT(导出内存映像文件,MAT分析内存溢出)
堆区内存溢出:堆内存溢出前文有演示,这里不再赘述。
非堆区内存溢出:非堆指的是方法区,也叫永久区,存的是类信息(class),常量,静态变量,即时编译器编译后的代码等数据。
-XX:MetaspaceSize=320M -XX:MaxMetaspaceSize=320M
导出内存印象文件:
第一种内存溢出自动导出前文介绍过,这里就看第二种 使用jmap命令手动导出
jmap -dump:format=b,file=noheap.hprof 21408
导入分析工具:
内存中有一千个我们的类:
看他的强引用:
然后就开始排查代码 为什么这个list没有被释放。