哪家企业的网站做的好,宁波seo关键词如何优化,网站备案是备什么,投票网页怎么制作文章目录 1 GC调优概述1.1 调优指标1.1.1 吞吐量1.1.2 延迟1.1.3 内存使用量 2 GC调优方法2.1 发现问题2.1.1 jstat工具2.1.2 visualvm插件2.1.3 PrometheusGrafana2.1.4 GC Viewer2.1.5 GCeasy 2.2 常见GC模式2.2.1 正常情况2.2.2 缓存对象过多2.2.3 内存泄漏2.2.4 持续FullGC… 文章目录 1 GC调优概述1.1 调优指标1.1.1 吞吐量1.1.2 延迟1.1.3 内存使用量 2 GC调优方法2.1 发现问题2.1.1 jstat工具2.1.2 visualvm插件2.1.3 PrometheusGrafana2.1.4 GC Viewer2.1.5 GCeasy 2.2 常见GC模式2.2.1 正常情况2.2.2 缓存对象过多2.2.3 内存泄漏2.2.4 持续FullGC2.2.5 元空间不足导致FullGC 2.3 解决GC问题的手段2.3.1 优化基础JVM参数2.3.1.1 -Xmx -Xms 堆参数2.3.1.2 -XX:MaxMetaspaceSize -XX:MetaspaceSize 元空间参数2.3.1.3 -Xss 虚拟机栈参数2.3.1.4 不建议设置参数2.3.1.5 模板 2.3.2 更换垃圾回收器 2.4 实战2.4.1 总结 1 GC调优概述 1.1 调优指标
1.1.1 吞吐量 1.1.2 延迟 使用GCeasy来进行分析
1.1.3 内存使用量 2 GC调优方法 2.1 发现问题
2.1.1 jstat工具 jstat -gc 3785 1000 102.1.2 visualvm插件 2.1.3 PrometheusGrafana 2.1.4 GC Viewer
生成GC日志 -XX:PrintGCDetails -Xloggc:test1.log生成 java -jar gcviewer-1.36.jar test1.log2.1.5 GCeasy
https://gceasy.ycrash.cn/gc-dashboard.jsp 给的相当详细 2.2 常见GC模式
2.2.1 正常情况 2.2.2 缓存对象过多 2.2.3 内存泄漏 2.2.4 持续FullGC 2.2.5 元空间不足导致FullGC 2.3 解决GC问题的手段 2.3.1 优化基础JVM参数
2.3.1.1 -Xmx -Xms 堆参数 2.3.1.2 -XX:MaxMetaspaceSize -XX:MetaspaceSize 元空间参数 所以我们启动程序之后基本都会触发1到2次的由元空间不足引起的FullGC这是因为-XX:MetaspaceSize触发FullGC最开始的大小可能只有20M所以会触发1到2次的FullGC因为是在启动的时候触发的所以并不会对用户的使用产生影响。
2.3.1.3 -Xss 虚拟机栈参数 2.3.1.4 不建议设置参数 2.3.1.5 模板 2.3.2 更换垃圾回收器
第二点减少对象的产生就涉及内存调优这个在以前已经讲过了不再赘述 private Cache cache Caffeine.newBuilder().weakKeys().softValues().build();软引用弱引用最大程度保证缓存不会溢出
先测试jdk8自带pspo
-Xms4g -Xmx4g -Xss256k -XX:MaxMetaspaceSize512m -XX:DisableExplicitGC -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:/test.hprof -verbose:gc -XX:PrintGCDetails -XX:PrintGCTimeStamps启动测试脚本 50并发下最大的响应时间是280ms最后总结并发越高fullgc时间越长因为创建对象速度快可能刚刚释放又要创建又要fullgc
再测试parnewcms
-Xms4g -Xmx4g -Xss256k -XX:MaxMetaspaceSize512m -XX:DisableExplicitGC -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPathD:/test.hprof -verbose:gc -XX:PrintGCDetails -XX:PrintGCTimeStamps -XX:UseParNewGC -XX:UseConcMarkSweepGC50并发下最大的响应时间是220ms其实都差不多
最后测试g1在jdk17上 平均不到100ms差距还是非常明显的。
2.4 实战 分析出有很多缓存对象
如果想要生成内存快照时不做fullgc则需要通过jmap来保存去掉live即可
jmap -dump:formatb,file/home/jvm/dump/jvm-optimize-jmap.hprof 29317但是mat分析时还是会自动把能回收的对象排除在外所以我们需要 找到了482M的对象本应该是被回收的但是这些数组已经不在gcroot的引用链上了所以用回溯找是没法找到的 2.4.1 总结