首页 > 其他分享 >JVM 参数优化

JVM 参数优化

时间:2024-05-27 15:56:17浏览次数:13  
标签:回收 XX 参数 内存 JVM 优化 垃圾

1. JVM 参数优化

1.1. 查看 JVM 默认参数

java -XX:+PrintFlagsInitial

1.2. 关键 JVM 参数

JVM 总体上可以分成三类:

  • -:标准参数,比如 -verbose:gc 这类表示标准实现,所有的虚拟机都需要实现这些参数的功能,且向后兼容;
  • -X:非标准参数,默认 JVM 会实现这些参数的功能,但是不保证所有的 JVM 实现都满足,且不保证向后兼容;
  • -XX:非 Stable 参数,这些参数在不同的 JVM 上会有不同的实现,这些参数不推荐在生产环境中使用,以后很有可能会被取消,需要慎重使用;

JVM 参数类型:

  • 布尔型参数:-XX:+ 表示打开,-XX:- 表示关闭。(比如-XX:+PrintGCDetails);
  • 数字型参数:通过 -XX:= 设定。数字可以是 m/M(兆字节),k/K(千字节),g/G(G 字节)。
  • 字符行参数:通过 -XX:= 设定,通常用来指定一个文件,路径,或者一个命令列表。(比如-XX:HeapDumpPath=./java_pid.hprof)
  1. -server
    服务器模式下运行
  2. -Xms
    用于设置 Java 虚拟机(JVM)启动时的初始堆内存大小
  3. -Xmx
    用于指定 JVM 可以使用的最大堆内存大小
  4. -XX:MetaspaceSize
    这个参数是初始化的 Metaspace 大小,该值越大触发 Metaspace GC 的时机就越晚。默认约 20.8 M。
  5. -XX:MaxMetaspaceSize
    这个参数用于限制 Metaspace 增长的上限,防止因为某些情况导致 Metaspace 无限的使用本地内存,影响到其他程序。默认无上限。
  6. -XX:+UseG1GC
    启用 G1 (Garbage-First) 垃圾回收器。
  7. -XX:MaxGCPauseMillis
    设置一个目标值,指定 G1 GC 努力达到的最大垃圾回收暂停时间。默认 200 毫秒。
  8. -XX:ParallelGCThreads
    设置并行垃圾回收器(Parallel Garbage Collector)使用的线程数。最佳值取决于系统的硬件配置和应用程序的具体需求。如果设置的值过高,可能会导致 CPU 资源过载,从而影响应用程序的性能。通常,线程数可以设置为与可用处理器核心数相等的值。
  9. -XX:+DisableExplicitGC
    用于禁用 System.gc() 方法的显式垃圾回收功能。开发者可能会调用 System.gc() 来尝试管理内存或者优化性能。然而,频繁的垃圾回收可能会导致应用程序的性能下降,因为垃圾回收是一个计算密集型的过程,它会暂停应用程序的执行来回收不再使用的对象。使用该参数避免了可能的性能问题。
  10. -XX:+PrintGCDateStamps
    用于在垃圾回收 (GC) 日志中添加时间戳。当启用此选项时,每次垃圾回收事件都会被记录,并且在记录中包含自 JVM 启动以来的绝对时间(以秒或毫秒为单位,取决于具体实现)
  11. -XX:+PrintGCDetails
    启用此选项时,JVM 会在每次垃圾回收发生时,输出包含有关回收的详细数据的日志信息。
  12. -XX:+PrintTenuringDistribution
    用于在每次垃圾回收事件后输出对象晋升老年代(Tenured Generation)的分布情况。帮助了解对象在年轻代(Young Generation)和老年代之间的年龄分布,从而对垃圾回收器的行为和内存管理策略进行分析和优化。
  13. -Xloggc
    启用此选项时,JVM 会将每次垃圾回收的详细信息输出到指定的文件中。
  14. -XX:+HeapDumpOnOutOfMemoryError
    用于在发生内存溢出错误(OutOfMemoryError)时自动生成堆内存转储文件(heap dump)。这个文件包含了所有活跃对象的详细信息,可以用来分析内存使用情况,查找内存泄漏或识别占用大量内存的对象。
  15. -XX:HeapDumpPath
    指定生成的堆转储文件(heap dump)的存储路径和文件名。
  16. -XX:+PrintConcurrentLocks
    打印 java.util.concurrent 的锁信息,在 SIGTERM 时触发。默认关闭,等价于运行 jstack -l
  17. -Dfile.encoding
    设置文件的字符编码。选项设置的是系统属性 file.encoding 的值。这个属性不仅影响文件的读写操作,还可能影响其他与字符编码相关的操作,如网络通信、数据库连接等。
  18. -Djava.security.egd
    SecureRandom 在 java 各种组件中使用广泛,可以可靠的产生随机数。但在大量产生随机数的场景下,性能会较低。这时可以使用-Djava.security.egd=file:/dev/./urandom 加快随机数产生过程。

建议:

  1. MetaspaceSize 和 MaxMetaspaceSize 设置一样大小,对于大部分项目 256M 即可
  2. 初始堆内存和最大堆内存设置一样大小
  3. PrintGCDateStamps、PrintGCDetails、PrintTenuringDistribution、loggc 一起配合使用
  4. HeapDumpOnOutOfMemoryError、HeapDumpPath 一起配合使用
  5. UseG1GC、MaxGCPauseMillis、ParallelGCThreads 一起配合使用

1.3. 最终参数优化结果

java -server \
-Xms4g -Xmx4g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m \
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:ParallelGCThreads=8 -XX:+DisableExplicitGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Xloggc:logs/gc.log \
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=logs -XX:+PrintConcurrentLocks \
-Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom \
-jar demo.jar

标签:回收,XX,参数,内存,JVM,优化,垃圾
From: https://www.cnblogs.com/jason207010/p/18215711

相关文章

  • Springboot Redis 性能优化(基于 Lettuce)
    1.SpringbootRedis性能优化(基于Lettuce)1.1.为什么是Lettuce1.2.参数优化1.2.0.1.SpringbootRedis所有参数项1.2.1.最终参数配置1.SpringbootRedis性能优化(基于Lettuce)1.1.为什么是LettuceSpringboot2.x.x开始默认使用lettuce作为redis客户......
  • Keras深度学习框架第二十八讲:可视化超参数调优过程
    1、绪论可视化超参数调优过程(Visualizethehyperparametertuningprocess)指的是在机器学习或深度学习的模型训练中,通过图形化或可视化的方式展示和调整模型的超参数(hyperparameters)。这个过程有助于用户直观地理解超参数如何影响模型的性能,从而找到最优的超参数设置。可......
  • windows下mysql修改表名大消息参数lower_case_table_names,需要initialize才生效
    第一步:尝试修改文件my.ini,发现改了重启不管用:C:\ProgramFiles\MySQL\MySQLServer8.0\bin>notepadmy.ini[mysqld]lower_case_table_names=2 第二步:尝试初始化mysql服务,带上参数。注意,会清空数据库,所以务必先备份数据!!!参考:https://blog.csdn.net/cccgo68/article/d......
  • 性能优化陷阱之hash真的比strcmp快吗
    最近网上冲浪的时候看到有人分享了自己最近一次性能优化的经验。我向来对性能是比较敏感的,所以就点进去看了。然而我越看越觉得蹊跷,但本着“性能问题和性能优化要靠性能测试做依据”,我不能凭空怀疑别人吧,所以我做了完整的测试并写下了这篇文章。可疑的优化方案分享者遇到的问题......
  • Java JVM——1.JVM与Java体系结构
    前言作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?✘ 运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM!✘ 想解决线上JVMGC问题,但却无从下手。✘ 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧,然后就JJ了。✘ 每次面......
  • 面试官:Redis 用的多?那你说说他的内存使用和优化吧
    Redis的内存使用和优化一、reids内存分析二、redis内存使用1、对象内存2、缓冲内存三、redis子进程内存消耗1、关于linux系统的写时复制机制:2、关于linux的透明大页机制THP(TransparentHugePage):3、关于linux配置:四、redis内存管理1、内存上限:maxmemory2、内存回......
  • Java 线程池优化
    1.Java线程池优化1.1.核心线程数1.2.任务队列1.2.1.LinkedBlockingQueue1.2.2.ArrayBlockingQueue1.2.3.SynchronousQueue1.2.4.总结1.3.最大线程数1.4.线程存活时间1.5.拒绝策略1.5.1.AbortPolicy(默认策略)1.5.2.CallerRunsPolicy1.5.3.DiscardPo......
  • 基于GWO灰狼优化的CNN-GRU-Attention的时间序列回归预测matlab仿真
    1.算法运行效果图预览优化前     优化后     2.算法运行软件版本matlab2022a 3.算法理论概述      时间序列回归预测是数据分析的重要领域,旨在根据历史数据预测未来时刻的数值。近年来,深度学习模型如卷积神经网络(ConvolutionalNeuralNet......
  • 生产环境中秒杀接口并发量剧增与负载优化策略探讨
    ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ ......
  • 解决前端性能瓶颈:高效处理大量数据渲染与复杂交互的策略与优化方法
    ✨✨祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心!✨✨ ......