标签归档:jvm

JVM GC问题排查手段

最近生产环境上出现过两次由于JVM参数设置不当导致的频繁FGC的问题,现在做个简单的记录.

  1. 首先查看GC日志,观察每次FGC的频率以及各个区的回收情况
  2. 然后再配合使用jstat与jmap查看是否有泄露问题,分析内存泄露最佳组合就是jamp dump + MAT,先dump内存,然后MAT分析来定位问题,要jmap -heap需要慎用,在用cms gc的情况下,有些时候jmap -heap会循环输出,然后就卡死了
  3. 最后使用jstack排查各线程的状态,包括用户线程和虚拟机线程,同时结合Lock信息来检测是否发生了死锁和死锁的线程.
    ​另外在用top -H看到占用CPU非常高的pid时,可以转换成16进制后在jstack dump出来的文件中搜索,看看到底是什么线程占用了CPU

总之,GC问题是一个需要不断跟进的问题,它会随着业务与技术发展而不断出现,需要用到很多方法与经验.

JVM参数大全

阅读全文…

JVM参数
-Xms 设置JVM初始化堆内存大小
-Xmx 设置JVM最大的堆内存大小
-Xss 设置JVM栈内存大小
-Xmn 设置young generation的堆内存大小,一般设置为Xmx的1/3
-Xmixed 混合模式执行
-Xint 解释模式执行
-Xbootclasspath: 设置zip/jar资源或者类(.class文件)存放目录路径
-Xbootclasspath/a: 追加zip/jar资源或者类(.class文件)存放目录路径
-Xbootclasspath/p: 预先加载zip/jar资源或者类(.class文件)存放目录路径
-Xnoclassgc 关闭类垃圾回收功能
-Xincgc 开启类的垃圾回收功能
-Xloggc: 记录垃圾回日志到一个文件
-Xbatch 关闭后台编译
-Xprof 输入CPU概要表数据
-Xfuture 执行严格的代码检查,预测可能出现的情况
-Xrs 通过JVM还原操作系统信号
-Xcheck:jni 对JNI函数执行检查
-Xshare:off 尽可能不去使用共享类的数据
-Xshare:auto 尽可能的使用共享类的数据
-Xshare:on 尽可能的使用共享类的数据,否则运行失败
非稳态选项使用说明
-XX:+<option> 启用选项
-XX:-<option> 不启用选项
-XX:+<option>=-<number> 给选项设置一个数字类型值,可跟单位,例如 32k,1024m,2g
-XX:+<option>=-<string> 给选项设置一个字符串值,例如-XX:HeapDumpPath=./dump.core