博客
关于我
【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/

你可能感兴趣的文章
php中高级基础知识点
查看>>
php中,如何将编译后的代码,反编译回去。
查看>>
php之aop实践
查看>>
PHP之APC缓存详细介绍(转)
查看>>
php之memcache,memcached
查看>>
php之引用
查看>>
PHP之数组和函数的基本教程
查看>>
UVa 10465 - Homer Simpson
查看>>
php九九乘法表加粗,PHP九九乘法表
查看>>
PHP二维数组将重复键值合并重组成三维数组
查看>>
PHP二维数组转换为一维数组
查看>>
PHP二维数组重组
查看>>
PHP交换两个变量值
查看>>
php代码执行完整流程介绍
查看>>
PHP代码格式化工具phpcf常见问题解决方案
查看>>
PHP使用3DES算法加密解密字符串
查看>>
PHP使用curl multi要注意的问题:每次使用curl multi同时并发多少请求合适
查看>>
php使用memcached扩展的一个BUG
查看>>
PHP入门part1
查看>>
PHP兼容性检查,PHP升级语法检查(PHPCompatibility+PHP_CodeSniffer)
查看>>