GC调优

news/2024/9/20 14:28:14 标签: jvm, 开发语言, java

文章目录

  • GC调优
    • 发现问题
      • jstat
      • visualvm插件
      • GC日志
      • GCeasy
    • 常见的GC模式
    • 解决GC问题
      • 优化基础JVM参数

GC调优

GC调优指的是对垃圾回收(Garbage Collection)进行调优。GC调优的主要目标是避免由垃圾回收引起程序性能下降。

GC调优的核心分成三部分:

  • 通用Jvm参数的设置。
  • 特定垃圾回收器的Jvm参数的设置。
  • 解决由频繁的FULLGC引起的程序性能问题。

GC调优的核心指标:

  • 垃圾回收吞吐量:垃圾回收吞吐量指的是 CPU 用于执行用户代码的时间与 CPU 总执行时间的比值,即吞吐量 = 执行用户代 码时间 /(执行用户代码时间 + GC时间)。吞吐量数值越高,垃圾回收的效率就越高,允许更多的CPU时 间去处理用户的业务,相应的业务吞吐量也就越高。
  • 延迟(Latency): 延迟指的是从用户发起一个请求到收到响应这其中经历的时间。延迟 = GC延迟+ 业务执行时间,所以如果GC时间过长,会影响到用户的使用。
  • 内存使用量:内存使用量指的是Java应用占用系统内存的最大值,一般通过Jvm参数调整,在满足上述两个指标的前提下, 这个值越小越好。

发现问题

jstat

Jstat工具是JDK自带的一款监控工具,可以提供各种垃圾回收、类加载、编译信息 等不同的数据。

使用方法为:jstat -gc 进程ID 每次统计的间隔(毫秒) 统计次数

visualvm插件

VisualVm中提供了一款Visual Tool插件,实时监控Java进程的堆内存结构、 堆内存变化趋势以及垃圾回收时间的变化趋势。同时还可以监控对象晋升的直方图。

请添加图片描述

GC日志

通过GC日志,可以更好的看到垃圾回收细节上的数据,同时也可以根据每款垃圾回收器的不同特点更好地发 现存在的问题。

使用方法:-XX:+PrintGCDetails -Xloggc:文件名

GCeasy

GCeasy是业界首款使用AI机器学习技术在线进行GC分析和诊断的工具。定位内存泄漏、GC延迟高的问题,提供JVM 参数优化建议,支持在线的可视化工具图表展示。

官方网站:https://gceasy.io/ (需要科学上网)

请添加图片描述

常见的GC模式

1)正常情况:呈现锯齿状,对象创建之后内存上升,一旦发生垃圾回收之后下降到底部,并且每次下降之后的内存大小 接近,存留的对象较少。

请添加图片描述

2)缓存对象过多:呈现锯齿状,对象创建之后内存上升,一旦发生垃圾回收之后下降到底部,并且每次下降之后的内存大小接近,处于比较高的位置。

请添加图片描述

3)内存泄漏:呈现锯齿状,每次垃圾回收之后下降到的内存位置越来越高,最后由于垃圾回收无法释放空间导致对象无 法分配产生OutOfMemory的错误。

请添加图片描述

4)持续的FullGC:在某个时间点产生多次Full GC,CPU使用率同时飙高,用户请求基本无法处理。一段时间之后恢复正常。

问题产生原因: 在该时间范围请求量激增,程序开始生成更多对象,同时垃圾收集无法跟上对象创建速率,导致 持续地在进行FULL GC。

请添加图片描述

5)元空间不足导致的FULLGC:堆内存的大小并不是特别大,但是持续发生FULLGC。

请添加图片描述

解决GC问题

优化基础JVM参数

1)参数1 : -Xmx–Xms

-Xmx参数设置的是最大堆内存,但是由于程序是运行在服务器或者容器上,计算可用内存时,要将元空间、操作系统、 其它软件占用的内存排除掉。

-Xms用来设置初始堆大小,建议将-Xms设置的和-Xmx一样大

最合理的设置方式应该是根据最大并发量估算服务器的配置,然后再根据服务器配置计算最大堆内存的值。

2)参数2 : -XX:MaxMetaspaceSize–XX:MetaspaceSize

-XX:MaxMetaspaceSize=值:参数指的是最大元空间大小,默认值比较大,如果出现元空间内存泄漏会让操作系 统可用内存不可控,建议根据测试情况设置最大值,一般设置为256m。

-XX:MetaspaceSize=值:参数指的是到达这个值之后会触发FULLGC, 后续什么时候再触发JVM会自行计算。如果设置为和MaxMetaspaceSize一样大,就不会FULLGC,但是对象也无法回收。

3)参数3 : -Xss虚拟机栈大小

如果我们不指定栈的大小,JVM 将创建一个具有默认大小的栈。大小取决于操作系统和计算机的体系结构。 比如Linux x86 64位 : 1MB,如果不需要用到这么大的栈内存,完全可以将此值调小节省内存空间,合理值为 256k – 1m之间。

JVM参数模板:

-Xms1g
-Xmx1g
-Xss256k
-XX:MaxMetaspaceSize=512m 
-XX:+DisableExplicitGC
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/logs/my-service.hprof
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:文件路径

http://www.niftyadmin.cn/n/5667232.html

相关文章

在线免费公共DNS解析服务器列表

115站长工具网公共DNS栏目推荐阿里DNS、百度DNS、Google免费DNS地址、OpenDNS地址库、114 DNS、DNSPod等

(七)使用SoapUI工具调用WebAPI

1.调用一个无参数的GET请求 [HttpGet(Name "GetWeatherForecast")]public IEnumerable<WeatherForecast> Get(){return Enumerable.Range(1, 5).Select(index > new WeatherForecast{Date DateTime.Now.AddDays(index),TemperatureC Random.Shared.Next(…

QUIC 和 HTTP/3:提升网络性能的关键技术

一、引言 1.1 简要介绍 QUIC 和 HTTP/3 QUIC&#xff08;Quick UDP Internet Connections&#xff09;是一种基于 UDP 的传输层协议&#xff0c;旨在解决 TCP 在高延迟和丢包环境下的性能问题。HTTP/3 则是 HTTP 协议的最新版本&#xff0c;它基于 QUIC 协议而非 TCP&#xf…

Python 从入门到实战22(类的定义、使用)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了面向对象简单介绍相关知识。今天我们将学习一…

Spark-RDD持久化

一、Spark的三种持久化机制 1、cache 它是persist的一种简化方式&#xff0c;作用是将RDD缓存到内存中&#xff0c;以便后续快速访问&#xff0c;提高计算效率。cache操作是懒执行的&#xff0c;即执行action算子时才会触发。 2、persist 它提供了不同的存储级别&#xff0…

C++速通LeetCode中等第7题-和为K的子数组(巧用前缀和)

巧用哈希表与前缀和&#xff0c;前缀和差为k的两个序号之间的数组就是满足条件的子数组&#xff0c;用哈希表来存放每个序号的前缀和。 前缀和就是头元素到当前序号子数组元素的和 class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_…

IntelliJ IDEA 创建 Java 项目指南

IntelliJ IDEA 是一款功能强大的集成开发环境(IDE),广泛用于 Java 开发。本文将介绍如何在 IntelliJ IDEA 中创建一个新的 Java 项目,包括环境的设置和基本配置。更多问题,请查阅 一、安装 IntelliJ IDEA 1. 下载 IntelliJ IDEA:访问 [JetBrains 官网](https://www.jet…

叉车倒车雷达系统,预防人与叉车相撞

叉车在厂区内运行&#xff0c;由于运行距离短&#xff0c;调头和倒车的次数比较多。叉车在调头和倒车的时候&#xff0c;驾驶员的视线会受到一定程度的限制。由于视野盲区&#xff0c;观察不周到及其他原因&#xff0c;使车辆调头或倒车时发生的事故较多。 若给叉车装上倒车雷达…