java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
有人说 Java 之所以能够崛起,JVM 功不可没。Java 虚拟机最初服务于让 Java 语言凌驾于平台之上,实现 "编写一次,到处运行",那么下面这篇文章主要给大家分享了个关于 Java 虚拟机 JVM 优化实战的过程全记录,需要的朋友可以参考借鉴,下面来一起看看吧。
前言Java 虚拟机是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,它是 Java 最具吸引力的特性之一。Java 虚拟机是通过在实际的计算机上仿真模拟各种计算机功能模拟来实现的,通过 Java 虚拟机,您只要根据 JVM 规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何 Java 代码能够在该系统上运行。
最近在看 JVM 群里有人发了一个 GC 情况,让人帮忙看优化的,于是我也凑热闹发了出来想让群里的大神们指导优化一下,以下是优化过程记录.
一开始我贴了下面的两张图jstat 看 GC 记录
- jstat - gcutil pid 1000 20
jcmd 看 VM 参数 (第一次使用这个命令)
jcmd pid VM.flags
可以看到 YGC 了 8W 多次,FGC 有 1100+,相比较另一个发出来求教的,我这个更糟糕,他的是运行了 3 天左右 FGC370 次
然后飞神让我看下运行时间
ps -p pid -o etime
我的也是跑了 3 天左右,感觉优化空间非常的大
又让我拉了 JVM 配置
jinfo -flags pid(没权限,没执行成功)
ps aux | grep pid
发现我的 JVM 完全没做过优化,据我自己的印象,就改过 PermSize, 因为这个 OOM 过,所以调大了一点。
然后飞神给了我一份他之前用过的配置
- JAVA_OPTS = "-Xms2g -Xmx2g -Xmn512m -XX:MaxPermSize=256m -server -Xss256k -XX:PermSize=128M -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/data/log/gclog/gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/log/jvmdump/jvm.bin -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:+TieredCompilation -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC"
并嘱咐了一句 loggc 和 dumpPath 提前 mkdir
因为已经是周五晚上了,我没有权限直接修改这个配置,所以准备下周一再配上去看效果。
万万没想到,回家路上,笨神出来说话了,要我看下存活实例
- jmap - histo: live pid
由于没有开启 GC 日志,于是笨神让我开着 jstat(飞神提到 jstat -gccause pid 可以 gc 情况),然后在另一个窗口执行 jmap -histo:live
刚开始没明白,后来才知道原来这个命令可以触发 FGC
可以看到 FGC 了以后 Old 区从 90% 降到了 79%,FGC 效果很差,说明活对象太多了。
回过头去看 jmap 实例,发现 AtomicInteger 这个类对象特别的多,竟然有 300 多万个实例, 已经是 top2 了。
翻看代码没有发现有使用这个类的地方,初步怀疑是依赖的 jar 包使用的,笨神建议 dump 用 MAT 分析一下。
dump 命令导出文件
总结
- jmap -dump:format=b,file=pid.dump pid
以上就是这篇文章的全部内容了,暂时告一段落,持续更新中。希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对 PHPERZ 的支持。
来源: http://www.phperz.com/article/18/0104/355480.html