线上系统JVM调优小记

本文介绍了如何通过调整JVM参数来解决ToB Web应用在高并发场景下的系统延迟问题,重点关注了减少Full GC的方法,包括增大年轻代空间、优化GC算法组合,并分享了实际的调优参数设置及其效果。

我们的系统是单台tomcat部署的To B 的web应用。默认使用JDK8,再生产活动中并发量高的时候出现系统反应延迟现象。需要对系统进行优化,在jvm调优过程中发现了一些问题:
通过jstat -gc 发现系统在平凡的发生full gc。导致jvm系统大幅下降
在这里插入图片描述

jinfo -flags 查看系统参数配置
在这里插入图片描述
如果想减少Full GC的发生,我们就需要让对象垃圾基本在Minor GC的时候回收掉。这样就需要增加年轻代的空间,将老年代的空间给的小一些。同时parNew和CMS垃圾收集器组合使用,让垃圾回收效率最大化。
经过尝试,选择出了适合系统的调优参数设置
-Xms1536M -Xmx1536M -Xmn512M -Xss256K -XX:SurvivorRatio=6 -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=95 -XX:+UseCMSInitiatingOccupancyOnly

设置完后,再看下系统的垃圾收集情况,FullGC基本不再发生
在这里插入图片描述
小结:该参数设置不一定会适合其它系统,需要根据服务器情况和使用JDK版本进行调优测试,找出适合自己系统的JVM参数设置

### 在线 JVM 性能方法与最佳实践 #### 设置合理的堆内存大小和新生代配置 为了提高 Java 应用程序的性能和稳定性,JVM 参数至关重要。这包括设置合适的堆内存大小以及化新生代的比例。通过合理分配这些资源,能够有效减少垃圾收集频率并加快处理速度[^1]。 ```bash java -Xms512m -Xmx2048m -XX:NewRatio=3 MyApp ``` 上述命令设置了初始堆大小为 512MB (`-Xms`) 和最大堆容量为 2GB (`-Xmx`), 同时设定了老年代与年轻代之间的比例为 3:1(`-XX:NewRatio`). #### 选择适合的应用场景下的垃圾回收器 不同类型的垃圾回收算法适用于不同的应用场景。对于低延迟需求较高的服务端应用程序来说, G1 或 ZGC 是较为理想的选择;而对于批处理作业,则可以选择 CMS 收集器来平衡吞吐量和响应时间的要求. #### 实时监控 JVM 的运行状态 利用 `jstat` 工具可以帮助开发者实时了解 JVM 内部的工作情况,特别是有关于垃圾回收的信息。定期查看此类统计数据有助于及时发现潜在问题,并据此做出相应整[^2]: ```bash jstat -gc <pid> ``` 此命令会显示指定进程 ID 下面的对象创建率、垃圾收集次数及持续时间等重要指标. #### 使用 HPROF 快照进行深入分析 当遇到 OutOfMemoryError (OOM) 错误或其他严重异常时,可以通过生成 heap dump 文件来进行更详细的诊断工作。借助 JVisualVM 加载 .hprof 格式的转储数据后,不仅可以直观地观察到导致 OOM 发生的具体位置,还能统计各类对象占用的空间分布状况,从而辅助定位根本原因所在[^3]. ```bash jmap -dump:live,format=b,file=dump.hprof <pid> ``` 该指令用于导出当前正在运行中的 Java 进程的活动对象快照至本地磁盘上名为 "dump.hprof" 的文件中.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值