频繁fullgc排查
jvm配置
-Xms200m -Xmx200m -Xmn50m -XX:PermSize=30m -XX:+HeapDumpBeforeFullGC -XX:+HeapDumpAfterFullGC -XX:HeapDumpPath=/Users/liqiang/Desktop/logs/fullgcdump.dump
通过-XX:HeapDumpPath配置 fullGC前dumpgc日志到/Users/liqiang/Desktop/logs/fullgcdump.dump
我这里配置了堆大小为200
代码模拟
public static void main(String[] args) throws IOException, InvocationTargetException, IllegalAccessException, ParserConfigurationException, SAXException, XPathExpressionException { List<Classes> classesList = new ArrayList<Classes>(); while (true) { Classes classes = new Classes(); classes.setName("一年级"); classesList.add(classes); } }
运行之后发现5次fullGc 都记录了文件
visualvm分析
下载地址:https://visualvm.github.io/download.html
我们可以看出Classes占用最多
Dump内存情况的几种时机
-XX:+HeapDumpOnOutOfMemoryError 内存溢出的是dump(比较实用 往往需要分析的时候是内存溢出的时候)
-XX:+HeapDumpBeforeFullGC 当 JVM 执行 FullGC 前执行 dump。
-XX:+HeapDumpAfterFullGC 当 JVM 执行 FullGC 后执行 dump。
-XX:+HeapDumpOnCtrlBreak 交互式获取dump。在控制台按下快捷键Ctrl + Break时,JVM就会转存一下堆快照。(mac下不能使用)
连接远程
暂无例子 需要服务器配置jmx外部可以访问 现在这张图是本机
visualVM插件安装
https://visualvm.github.io/index.html
2.复制链接
将复制的链接编辑进去
选择你要装的插件安装 重启
v比如我装了visual gc插件