4.3.1.如何配置垃圾收集器
- 首先是内存大小问题,基本上每一个内存区域我都会设置一个上限,来避免溢出问题,比如元空间。
- 通常,堆空间我会设置成操作系统的 2/3,超过 8GB 的堆,优先选用 G1
- 然后我会对 JVM 进行初步优化,比如根据老年代的对象提升速度,来调整年轻代和老年代之间的比例
- 依据系统容量、访问延迟、吞吐量等进行专项优化,我们的服务是高并发的,对 STW 的时间敏感
- 我会通过记录详细的 GC 日志,来找到这个瓶颈点,借用 GCeasy 这样的日志分析工具,定位问题
4.3.2.常用命令
jps、jinfo、jstat、jstack、jmap
4.3.2.1.jps:查看java进程及相关信息
jps -l 输出jar包路径,类全名jps -m 输出main参数jps -v 输出JVM参数
4.3.2.2.jinfo:查看JVM参数
jinfo 11666jinfo -flags 11666Xmx、Xms、Xmn、MetaspaceSize
4.3.2.3.jstat:查看JVM运行时的状态信息,包括内存状态、垃圾回收
jstat [option] LVMID [interval] [count]其中LVMID是进程id,interval是打印间隔时间(毫秒),count是打印次数(默认一直打印)option参数解释:-gc 垃圾回收堆的行为统计-gccapacity 各个垃圾回收代容量(young,old,perm)和他们相应的空间统计-gcutil 垃圾回收统计概述-gcnew 新生代行为统计-gcold 年老代和永生代行为统计
4.3.2.4.jstack:查看JVM线程快照,jstack命令可以定位线程出现长时间卡顿的原因,例如死锁,死循环
jstack [-l] <pid> (连接运行中的进程)option参数解释:-F 当使用jstack <pid>无响应时,强制输出线程堆栈。-m 同时输出java和本地堆栈(混合模式)-l 额外显示锁信息
4.3.2.5.jmap:可以用来查看内存信息(配合jhat使用)
jmap [option] <pid> (连接正在执行的进程)option参数解释:-heap 打印java heap摘要-dump:<dump-options> 生成java堆的dump文件
