咨询网站模板,湘潭网站建设设计,pc和移动端网站跳转,企业网站四大类型文章目录 版权声明GC调优概念GC调优核心指标(KPI)吞吐量延迟#xff08;Latency#xff09;内存使用量 GC调优方法GC调优步骤GC调优工具jstat工具visualvm插件Prometheus Grafana GC日志分析GC日志保存GC日志分析工具GC ViewerGCeasy 常见的GC模式正常情况缓存对象过多情况内… 文章目录 版权声明GC调优概念GC调优核心指标(KPI)吞吐量延迟Latency内存使用量 GC调优方法GC调优步骤GC调优工具jstat工具visualvm插件Prometheus Grafana GC日志分析GC日志保存GC日志分析工具GC ViewerGCeasy 常见的GC模式正常情况缓存对象过多情况内存泄漏情况持续FullGC情况元空间不足导致FULLGC情况 版权声明
本博客的内容基于我个人学习黑马程序员课程的学习笔记整理而成。我特此声明所有版权属于黑马程序员或相关权利人所有。本博客的目的仅为个人学习和交流之用并非商业用途。我在整理学习笔记的过程中尽力确保准确性但无法保证内容的完整性和时效性。本博客的内容可能会随着时间的推移而过时或需要更新。若您是黑马程序员或相关权利人如有任何侵犯版权的地方请您及时联系我我将立即予以删除或进行必要的修改。对于其他读者请在阅读本博客内容时保持遵守相关法律法规和道德准则谨慎参考并自行承担因此产生的风险和责任。本博客中的部分观点和意见仅代表我个人不代表黑马程序员的立场。
GC调优概念
GC调优指的是对垃圾回收Garbage Collection进行调优。GC调优的主要目标是避免由垃圾回收引起程序性能下降。
GC调优的核心分成三部分
通用Jvm参数的设置特定垃圾回收器的Jvm参数的设置。解决由频繁的FULLGC引起的程序性能问题
GC调优没有没有唯一的标准答案如何调优与硬件、程序本身、使用情况均有关系重点调优的工具和方法
GC调优核心指标(KPI)
判断GC是否需要调优需要从吞吐量、延迟和内存使用量来考虑
吞吐量
吞吐量(Throughput) 业务吞吐量和垃圾回收吞吐量。
业务吞吐量指的在一段时间内程序需要完成的业务数量。比如企业中对于吞吐量的要求可能会是这样的支持用户每天生成10000笔订单在晚上8点到10点支持用户查询50000条商品信息。 保证高吞吐量的常规手段 一 优化业务执行性能减少单次业务的执行时间二 优化垃圾回收吞吐量 垃圾回收吞吐量指的是 CPU 用于执行用户代码的时间与 CPU 总执行时间的比值即 吞吐量 执行用户代码时间 / 执行用户代码时间 G C 时间 吞吐量 执行用户代码时间 /执行用户代码时间 GC时间 吞吐量执行用户代码时间/执行用户代码时间GC时间。 吞吐量数值越高垃圾回收的效率就越高允许更多的CPU时间去处理用户的业务相应的业务吞吐量也就越高。
如下图gceasy分析工具给出的吞吐量较差
延迟Latency
延迟指的是从用户发起一个请求到收到响应这其中经历的时间。 延迟 G C 延迟 业务执行时间 延迟 GC延迟 业务执行时间 延迟GC延迟业务执行时间如果GC时间过长会影响到用户的使用 如下图gceasy分析工具给出的延迟较差
内存使用量
内存使用量指Java应用占用系统内存的最大值一般通过Jvm参数调整在满足上述两个指标的前提下值越小越好
GC调优方法
GC调优步骤 GC调优工具
jstat工具
Jstat工具是JDK自带的一款监控工具可以提供各种垃圾回收、类加载、编译信息等不同的数据。优点操作简单、无需额外的软件缺点无法准确到GC产生的时间、只能用于判断GC是否存在问题
参数含义S0C年轻代中第一个幸存区的容量KB (Survivor 0 Capacity)S1C年轻代中第二个幸存区的容量KB (Survivor 1 Capacity)S0U年轻代中第一个幸存区已使用的空间KB (Survivor 0 Used)S1U年轻代中第二个幸存区已使用的空间KB (Survivor 1 Used)EC年轻代中Eden区的容量KB (Eden Capacity)EU年轻代中Eden区已使用的空间KB (Eden Used)OC老年代的容量KB (Old Capacity)OU老年代已使用的空间KB (Old Used)MC方法区Metaspace的容量KB (Metaspace Capacity)MU方法区已使用的空间KB (Metaspace Used)CCSC压缩类空间的容量KB (Compressed Class Space Capacity)CCSU压缩类空间已使用的空间KB (Compressed Class Space Used)YGC年轻代垃圾回收的次数 (Young Generation Garbage Collection Count)YGCT年轻代垃圾回收所花费的时间秒 (Young Generation GC Time)FGC老年代垃圾回收的次数 (Full GC Count)FGCT老年代垃圾回收所花费的时间秒 (Full GC Time)CGC压缩类空间垃圾回收的次数 (Compressed Class Space GC Count)CGCT压缩类空间垃圾回收所花费的时间秒 (Compressed Class Space GC Time)GCT总的垃圾回收时间秒 (Total GC Time)
使用方法为jstat -gc 进程ID 每次统计的间隔毫秒 统计次数
C:\Users\HPjps
20224
724 JpsC:\Users\HPjstat -gc 20224 1000 5
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT
0.0 2048.0 0.0 1589.7 378880.0 208896.0 653312.0 456939.0 375360.0 371249.6 50944.0 49257.5 41 0.321 0 0.000 26 0.122 0.443
0.0 2048.0 0.0 1589.7 378880.0 217088.0 653312.0 456939.0 375360.0 371249.6 50944.0 49257.5 41 0.321 0 0.000 26 0.122 0.443
0.0 2048.0 0.0 1589.7 378880.0 227328.0 653312.0 456939.0 375360.0 371249.6 50944.0 49257.5 41 0.321 0 0.000 26 0.122 0.443
0.0 2048.0 0.0 1589.7 378880.0 235520.0 653312.0 456939.0 375360.0 371249.6 50944.0 49257.5 41 0.321 0 0.000 26 0.122 0.443
0.0 2048.0 0.0 1589.7 378880.0 243712.0 653312.0 456939.0 375360.0 371249.6 50944.0 49257.5 41 0.321 0 0.000 26 0.122 0.443visualvm插件
VisualVm中提供了一款Visual Tool插件实时监控Java进程的堆内存结构、堆内存变化趋势以及垃圾回收时间的变化趋势优点适合开发使用能直观观察堆内存和GC的变化趋势缺点对程序运行性能具有一定影响生产环境程序员没有权限进行操作 visual安装visual GC插件步骤如图
Prometheus Grafana
PrometheusGrafana是企业中运维常用的监控方案其中Prometheus用来采集系统或者应用的相关数据同时具备告警功能。Grafana可以将Prometheus采集到的数据以可视化的方式进行展示。优点支持系统级别和应用级别的监控比如linux操作系统、Redis、MySQL、Java进程支持告警并允许自定义告警指标通过邮件、短信等方式尽早通知相关人员进行处理缺点环境搭建较为复杂一般由运维人员完成
GC日志分析
通过GC日志可以更好的看到垃圾回收细节上的数据同时也可以根据每款垃圾回收器的不同特点更好地发现存在的问题。
GC日志保存
JDK 8及以下-XX:PrintGCDetails -Xloggc:文件名JDK 9-Xlog:gc*:file文件名
GC日志分析工具
GC Viewer
GCViewer是一个将GC日志转换成可视化图表的小工具github地址使用方法java -jar gcviewer.jar 日志文件.log
GCeasy
GCeasy是一款用于分析Java应用程序的垃圾回收日志的工具。通过分析GC日志GCeasy可以展示垃圾回收的统计信息、内存使用情况、GC停顿时间等关键指标帮助开发人员更好地优化其应用程序的性能。GCeasy的官方网站https://gceasy.io/
常见的GC模式
正常情况
特点呈现锯齿状对象创建之后内存上升一旦发生垃圾回收之后下降到底部并且每次下降之后的内存大小接近存留的对象较少
缓存对象过多情况
特点呈现锯齿状对象创建之后内存上升一旦发生垃圾回收之后下降到底部并且每次下降之后的内存大小接近处于比较高的位置。问题产生原因 程序中保存大量的缓存对象导致GC之后无法释放可以使用MAT或者HeapHero等工具进行分析内存占用的原因。
内存泄漏情况
特点呈现锯齿状每次垃圾回收之后下降到的内存位置越来越高最后由于垃圾回收无法释放空间导致对象无法分配产生OutOfMemory的错误。问题产生原因 程序中保存大量的内存泄漏对象导致GC之后无法释放可以使用MAT或者HeapHero等工具进行分析是哪些对象产生了内存泄漏。
持续FullGC情况
特点在某个时间点产生多次Full GCCPU使用率同时飙高用户请求基本无法处理。一段时间之后恢复正常。问题产生原因 在该时间范围请求量激增程序开始生成更多对象同时垃圾收集无法跟上对象创建速率导致持续地在进行FULL GCGCeasy文档报告地址
元空间不足导致FULLGC情况
特点堆内存的大小并不是特别大但是持续发生FULLGC。问题产生原因 元空间大小不足导致持续FULLGC回收元空间的数据GCeasy文档报告地址