JAVA GC调优零碎记录
来源:互联网 发布:linux shell 复制粘贴 编辑:程序博客网 时间:2024/06/08 02:53
是否需要进行GC调优
决定是否进行Java GC调优,前提是主要看新生代的Minor GC和老年代的FULL GC 的GC频率和每次GC停顿的时间对于业务来说是否可接受,一般满足以下条件,可不用考虑GC调优(仅参考,具体还要看业务)
1 MinorGC执行的很快(小于50ms)
2 MinorGC执行的并不频繁(大概10秒一次)
3 FullGC执行的很快(小于1s)
4 FullGC执行的并不频繁(10分钟一次)
如何监控
1、启动时指定参数,打印出日志
-Xloggc:/var/log/hadoop-hdfs/$USER/gc.log-`date +'%Y%m%d%H%M'` -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps
2、使用命令行
jstat -gc 26990 1000 10 (每秒展示一次,总共展示10次,内存各区使用情况及总的GC情况)//查看内存实际使用类,对象jmap -heap 25856 (在CMS GC的情况下可能造成进程挂起,查看内存各区域used,free情况,以及内存参数配置,执行很快)jmap -histo -F 4191 (能查到在内存里哪些类,类有多少实例,占多少空间,注意使用该命令时,比较慢,进程暂停对外工作) jmap –dump:format=b,file=test.bin 3500 //生成dump文件,可再用visualvm可视化分析?在java bin目录下有jvisualvm,若无响应指定-F,用jhat分析dump文件功能比较弱, -dump:[live,]format=blive指定只输出活的对象到文件 //查看虚拟机内部线程jstack -l -F 22595 (注意执行比较慢)//查看jvm显示指定的参数和隐式的默认参数Jps –v //查看各个进程的显示参数Jinfo –flag CMSInitiatingOccupancyFractionpid (查看某个进程某个参数值)
如何调优
目前调优主要还是针对JVM参数进行调整,针对自己的业务考虑
1、选择哪种垃圾收集器
比较成熟使用较多的是parallel gc 、CMS gc,尤其CMS GC停顿时间较短,实际使用更为常见,而G1 GC停顿时间更短,也没有CMS GC内存碎片问题,但是稳定性还未可知,并且占用内存会更多,所以目前阶段只是不是GC出现严重问题,一般不选择G1 GC
2、怎么调整参数
比较重要的是针对新生代和老年代的空间分配大小找个折中点, 如果发现FULL GC执行频率能接受,但是一旦GC发行停顿时间很长,可适当减小老年代的空间大小,相反执行频率过快,单次停顿较短,是否该考虑调大老年代空间,新生代同理
如果使用的是CMS GC垃圾收集器,会产生内存碎片问题,可设置多少次FULL GC以后进行一次碎片整理
3、应用层去调优减少不必要的对象生成,或者启用多个JVM实例,避免单个JVM实例大内存GC问题
0 0
- JAVA GC调优零碎记录
- Java配置零碎知识记录
- 零碎记录
- 零碎记录
- 零碎记录
- 零碎记录
- 零碎记录
- 零碎记录
- 零碎记录
- Java GC调优总结
- java GC性能调优
- Java GC 专家系列3:GC调优实践
- Java GC 专家系列3:GC调优实践
- java零碎
- java零碎
- java零碎
- java零碎
- java零碎
- UVa-679 小球下落
- java操作当前日期的年月日
- Git简单使用心得
- 合并排序数组 II——LintCode
- 【Codeforces Round 275 (Div 2)E】【状压DP 概率DP求期望 线性相加思想 二进制系统函数】Game with Strings n个串目标串随机猜位置随机的猜出答案的期望步
- JAVA GC调优零碎记录
- 【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联
- java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
- MYSQL截取列里面的数据为多行
- mysql命令
- mysql安装后简单的配置(以5.6.22 x64为示例)
- HD_1312 Red and Black
- 关于iOS SDK9.0 不能用http请求的解决办法
- 电商分享问题