博客
关于我
【JVM系列】7、JVM调优
阅读量:488 次
发布时间:2019-03-07

本文共 1865 字,大约阅读时间需要 6 分钟。

JVM performans Optimization Guide

JVM的optimization是一个复杂但重要的任务,涉及堆设置、垃圾回收器选择以及性能监控等多个方面。本文将详细探讨JVM性能优化的关键点,帮助开发者和运维人员在搭建高性能Java应用时做出明智的决策。

1. Heap Setting

JVM的堆设置对于系统性能有着直接影响。堆的大小由三个因素决定:操作系统的数据模型(32位或64位)、系统的可用虚拟内存和物理内存。此外,"ksh"对于不同的应用场景有不同的最佳实践。

在Windows Server 2003环境下,物理内存为3.5 GB,搭配JDK5.0,最大堆大小可以设置为1478 MB。经典建议是将堆设置为3550 MB,以确保有足够的内存空间供应用运行。

2. Garbage Collector Selection

在JVM中,垃圾回收器的选择直接影响系统性能。JVM提供了三种垃圾回收器:串行收集器、并行收集器和并发收集器。基于不同的工作负载,选择合适的收集器类型可以显著提升性能。

a. 通过并行收集器优化吞吐量
  • 典型配置
    • java -Xmx3800m -Xms3800m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
    • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20
    • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100
b. 通过并发收集器优化响应时间
  • 推荐配置
    • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=20
    • java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC -XX:CMSFullGCsBeforeCompaction=5 -XX:+UseCMSCompactAtFullCollection

3. Monitoring and Tuning

a. 调用GC日志
  • -XX:+PrintGC:输出GC事件的详细信息。
  • -XX:+PrintGCDetails:打印每次GC的具体数据。
  • -XX:+PrintGCTimeStamps:记录GC事件发生的时间戳。
  • -XX:+PrintGCApplicationConcurrentTime:测量应用在GC期间未中断运行的时间。
  • -XX:+PrintGCApplicationStoppedTime:测量应用在GC期间暂停的总时间。
  • -XX:PrintHeapAtGC:在GC前后打印堆的状态信息。
  • -Xloggc:filename:将GC日志输出到文件,方便后续分析。
b. 开启压缩选项
  • -XX:+UseCMSCompactAtFullCollection:在Full GC时开启对年老代的压缩。
  • -XX:CMSFullGCsBeforeCompaction=0:确保每次Full GC后对内存空间进行压缩。

4. Common Tuning Recommendations

a. Heap Size Selection
  • 响应时间优先的应用:尽可能设大,直到接近最低响应时间限制,减少年轻代和年老代的回收频率。
  • 吞吐量优先的应用:设大,适合8核及以上多核系统,确保并行收集器运行高效。
b. 年老代和年轻代的平衡
  • 响应时间优先的应用:年老代应设置较小,确保并发收集器的效率,避免内存碎片问题。
  • 吞吐量优先的应用:年老代较小,适合大多数短期对象存活于年轻代。
c. 应对内存碎片问题
  • 如何解决内存碎片问题:
  • 开启压缩选项:-XX:+UseCMSCompactAtFullCollection
  • 调整GC频率:-XX:CMSFullGCsBeforeCompaction=5

5. Final Thoughts

JVM的性能优化是一个不断探索和实验的过程。通过合理设置堆大小、选择适合的垃圾回收器,并实时监控GC行为,开发者可以显著提升应用性能。在实践中,建议结合实际应用场景进行调整,并通过GC日志分析来优化配置。

转载地址:http://dngdz.baihongyu.com/

你可能感兴趣的文章
python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
查看>>
python 利用pyttsx3文字转语音
查看>>
python 利用已有Ner模型进行数据清洗合并
查看>>
python 到大数据开发工程师_如何成为一个大数据开发工程师?
查看>>
python 加密解密(base64, AES)
查看>>
Python 包管理器和 Node.js
查看>>
Python 单词字母顺序不变且所有倒排
查看>>
python 启动提示IDLE's subprocess didn't make conne...
查看>>
python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
查看>>
Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
查看>>
Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
查看>>
python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
查看>>
python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
查看>>
Python 和Java 哪个更适合做自动化测试?
查看>>
Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
查看>>
python 图片转ico
查看>>
python 图片转文字、语音转文字、文字转语音保存音频并朗读
查看>>
python 在包含类似字符\x16、\x12、\x某某的数组中将以\x开头的字符找出来的方法
查看>>
Python 在并行进程之间共享字典
查看>>
Python 垃圾收集器文档
查看>>