G1 垃圾收集器配置

G1 垃圾收集器

-XX:ActiveProcessorCount=16 -XX:-UseContainerSupport -Xss512k -Xmx18g -Xms18g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=512m -XX:ReservedCodeCacheSize=240m -XX:+HeapDumpOnOutOfMemoryError -XX:+UseG1GC -XX:G1HeapRegionSize=8M -XX:InitiatingHeapOccupancyPercent=40 -XX:MaxGCPauseMillis=100 -XX:+TieredCompilation -XX:CICompilerCount=4 -XX:-UseBiasedLocking -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintAdaptiveSizePolicy -XX:+PrintGCApplicationStoppedTime -XX:+PrintHeapAtGC -XX:+PrintStringTableStatistics -XX:+PrintTenuringDistribution -Xloggc:/opt/logs/query/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=30 -XX:GCLogFileSize=50M -XX:+PrintFlagsFinal -XX:G1HeapWastePercent=15 -XX:ConcGCThreads=4 -XX:ErrorFile=/opt/logs/query/vmerr.log -XX:HeapDumpPath=/opt/logs/query/HeapDump -jar ./query-server.jar
每个配置的含义

JVM参数的含义:

  1. -XX:ActiveProcessorCount=16:设置JVM可见的处理器数量为16。这对于在容器环境或需要限制JVM使用CPU核心数的场景中很有用。

  2. -XX:-UseContainerSupport:禁用容器支持。JVM在容器环境中默认会启用容器支持来适应容器的资源限制。

  3. -Xss512k:设置每个线程的堆栈大小为512KB。

  4. -Xmx18g:设置JVM最大堆内存为18GB。

  5. -Xms18g:设置JVM初始堆内存为18GB,与最大堆内存相同,可以减少堆扩展时的性能开销。

  6. -XX:MetaspaceSize=512m:设置元空间的初始大小为512MB。元空间用于存放类元数据。

  7. -XX:MaxMetaspaceSize=512m:设置元空间的最大大小为512MB。

  8. -XX:ReservedCodeCacheSize=240m:为即时编译的代码分配240MB的代码缓存空间。

  9. -XX:+HeapDumpOnOutOfMemoryError:在发生内存溢出时自动生成堆转储文件。

  10. -XX:+UseG1GC:使用G1垃圾收集器。

  11. -XX:G1HeapRegionSize=8M:设置G1垃圾收集器中每个Region的大小为8MB。

  12. -XX:InitiatingHeapOccupancyPercent=40:设置堆使用率达到40%时开始并发GC周期。

  13. -XX:MaxGCPauseMillis=100:设置期望的最大GC停顿时间为100毫秒。

  14. -XX:+TieredCompilation:启用分层编译,这可以在程序运行时根据代码的热度来选择不同的编译级别,以优化性能。

  15. -XX:CICompilerCount=4:设置即时编译器的线程数为4。

  16. -XX:-UseBiasedLocking:禁用偏向锁。偏向锁可以提高同步代码的执行效率,但在某些应用场景下可能不适用。

  17. -XX:+PrintGCDetails-XX:+PrintGCDateStamps-XX:+PrintGCTimeStamps-XX:+PrintAdaptiveSizePolicy-XX:+PrintGCApplicationStoppedTime-XX:+PrintHeapAtGC-XX:+PrintStringTableStatistics-XX:+PrintTenuringDistribution:这些参数用于开启不同的GC日志打印选项,帮助分析GC行为和性能。

  18. -Xloggc:/opt/logs/query/gc.log:指定GC日志的输出路径。

  19. -XX:+UseGCLogFileRotation-XX:NumberOfGCLogFiles=30-XX:GCLogFileSize=50M:启用GC日志文件的轮转,设置最多保留30个日志文件,每个文件的最大大小为50MB。

  20. -XX:+PrintFlagsFinal:打印所有JVM参数的最终值。

  21. -XX:G1HeapWastePercent=15:设置G1垃圾收集器在回收时可以容忍的堆内存浪费比例为15%。

  22. -XX:ConcGCThreads=4:设置并发GC时使用的线程数为4。

  23. -XX:ErrorFile=/opt/logs/query/vmerr.log:指定虚拟机错误日志(如JVM崩溃时的hs_err_pid日志)的输出路径。

  24. -XX:HeapDumpPath=/opt/logs/query/HeapDump:指定堆转储文件的输出路径。

  25. -jar ./query-server.jar:指定要运行的jar包。

总是报jvm.gc.time>1000

给定的G1垃圾收集器配置中,有几个关键参数可能与jvm.gc.time>1000(GC时间超过1000毫秒)的问题相关。我们将逐一分析这些参数,探讨可能的原因、定位方法和解决方案。

可能的原因

针对高并发、高可用、高性能(三高)服务,降低jvm.gc.time时间、改善服务的tp999耗时,并提高系统性能,可以从以下几个方面进行优化:

1. JVM参数调整

  • 调整-XX:MaxGCPauseMillis:当前设置为100毫秒,这个目标可能过于严格,导致G1垃圾收集器频繁执行,增加了GC时间。可以尝试放宽这个值,比如设置为200或250毫秒,以减少GC的频率。

  • 调整-XX:InitiatingHeapOccupancyPercent:当前设置为40%,意味着堆使用率达到40%时就开始并发GC周期。可以考虑提高这个阈值,比如设置为60%或70%,以减少GC的频率。

  • 增加-XX:ConcGCThreads:增加并发GC线程的数量,可以加快GC的处理速度。但要注意,增加线程数会消耗更多的CPU资源,需要根据实际CPU核心数和系统负载进行调整。

  • 优化堆内存大小-Xmx-Xms都设置为18GB,如果通过监控发现实际使用的堆内存远低于这个值,可以适当减小堆大小,以减少GC的工作量。

2. 应用层面的优化

  • 对象池:对于频繁创建和销毁的对象,使用对象池可以减少GC的压力。

  • 减少大对象的分配:大对象的分配和回收会增加GC的负担,尽量避免在高频操作中分配大对象。

  • 优化数据结构:选择更合适的数据结构,减少内存占用和提高访问效率。

  • 缓存策略:合理使用缓存可以减少对后端服务的请求,降低系统负载,同时也减少了对象的创建。

3. 监控和分析

  • 分析GC日志:通过开启的GC日志进行深入分析,找出GC的热点,了解是Minor GC还是Full GC导致的延迟,针对性地进行优化。

  • 使用JVM监控工具:利用JVisualVM、JMC等工具实时监控JVM的性能,特别是堆内存的使用情况和GC活动。

4. 系统架构调整

  • 服务拆分:对于电商平台这样的复杂系统,通过微服务架构拆分服务,可以更灵活地进行资源分配和扩展,提高系统的整体性能和稳定性。

  • 负载均衡和扩容:合理分配负载,并根据系统负载情况动态扩容,可以有效应对高峰期的流量。

通过上述方法,可以有效地降低jvm.gc.time时间,改善服务的tp999耗时,并提高系统性能。需要注意的是,调整JVM参数和进行系统优化都需要仔细测试,以确保不会引入新的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值