103分布式电商项目 - JVM调优(实战篇)

简介: 103分布式电商项目 - JVM调优(实战篇)

测试目的

测试被测系统使用不同的垃圾回收方案时的性能表现;

了解各种JVM参数在性能调优时的实际效果;

对遴选出的最优方案进行8小时压力测试并记录测试结果;

测试环境准备

被测程序的运行的软硬件环境:

  • D630 4G内存+T7250双核CPU+160G硬盘;
  • 操作系统:windowsXP SP3;
  • IP:11.55.15.51;

被测程序名称:

  • XXX银行采购管理系统V1.1版;

程序部署环境:

  • Tomcat6.0.18 for windows;
  • Sun JDK1.6.13 for windows;
  • Oracle10g for windows(单独运行在另外一台640M笔记本上)

性能测试工具运行的软硬件环境:

  • 操作系统:windowsxp sp3
  • 浏览器版本:IE7
  • IP地址:11.55.15.141
  • 性能测试工具:loadrunner9.10

JVM监控工具:

  • 使用Jconsole进行图形化监控;

确定JVM在被测系统的机器上最大可用内存:

通过在命令行下用 java -XmxXXXXM -version 命令反复测试发现在11.55.15.51机器上JVM能使用的最大内存为1592M。

录制测试脚本

录制前准备:修改checkcode.java文件,将随机生成的校验码改成一个固定的校验码方便脚本的自动运行,然后将编译好的checkcode.class文件替换发布包中的class文件。

选择典型业务操作进行脚本录制,每个系统的典型业务操作都会不同,需要经过分析统计,选择用户操作频率最高的部分。经过分析后确定的脚本内容为:录制系统登录操作并在登录成功后的主界面上选取一段文字作为验证点。

启动VuGen程序按脚本定义内容进行录制并调试脚本,保证脚本能正常运行。

定义测试场景

虚拟用户数:30

持续运行时间:8小时

虚拟用户加载和卸载方式:同时

性能监控指标:响应时间、吞吐量、成功交易数

执行初步性能测试

使用系统默认的参数执行测试,并记录响应时间、吞吐量已经成功交易数等数据,同时监控JVM的使用情况。

选择调优方案

不同垃圾回收方法测试数据:

并发收集模式,运行时间十分钟后的对内存使用情况:

串行收集模式,运行时间十分钟:

并行收集模式,运行时间十分钟:

30-60:30个并发用户连续运行60分钟的jvm内存变化截图:

在11:36和11:56分发生了两次完全GC(Full GC),因为这时PS Old Gen已经满了,JVM自动对Old Gen中的内存进行了回收。

根据反复的测试并结合被测系统业务特点,最终敲定了使用以下最优方案进行8小时压力测试:

JAVA_OPTS=-server
-Xms1024M
-Xmx1024M
-Xmn128M
-XX:NewSize=128M
-XX:MaxNewSize=128M
-XX:SurvivorRatio=20
-XX:MaxTenuringThreshold=10
-XX:GCTimeRatio=19
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:+CMSClassUnloadingEnabled
-XX:+UseCMSCompactAtFullCollection
-XX:CMSFullGCsBeforeCompaction=0
-XX:-CMSParallelRemarkEnabled
-XX:CMSInitiatingOccupancyFraction=70
-XX:SoftRefLRUPolicyMSPerMB=0
–XX:PermSize=256m
-XX:MaxPermSize=256m
-Djava.awt.headless=true

调优后JVM监控图

30Vusers运行8小时截图:

测试结果分析

对于XX银行采购系统的登录操作来说,将jvm的NewRatio 和SurviorRatio设置成4时,性能表现最好!在此基础上在设置-XX:TargetSurvivorRatio=90和-Xmx1024M后性能也有一定程度的提升。

目录
相关文章
|
6天前
|
监控 Java 调度
探秘Java虚拟机(JVM)性能调优:技术要点与实战策略
【6月更文挑战第30天】**探索JVM性能调优:**关注堆内存配置(Xms, Xmx, XX:NewRatio, XX:SurvivorRatio),选择适合的垃圾收集器(如Parallel, CMS, G1),利用jstat, jmap等工具诊断,解决Full GC问题,实战中结合MAT分析内存泄露。调优是平衡内存占用、延迟和吞吐量的艺术,借助VisualVM等工具提升系统在高负载下的稳定性与效率。
24 1
|
8天前
|
消息中间件 NoSQL Java
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
Redis系列学习文章分享---第六篇(Redis实战篇--Redis分布式锁+实现思路+误删问题+原子性+lua脚本+Redisson功能介绍+可重入锁+WatchDog机制+multiLock)
29 0
|
8天前
|
缓存 Java
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
《JVM由浅入深学习九】 2024-01-15》JVM由简入深学习提升分(生产项目内存飙升分析)
12 0
|
8天前
|
监控 Java 测试技术
Java中的JVM调优技巧
Java中的JVM调优技巧
|
2天前
|
监控 算法 Java
JVM调优---堆溢出,栈溢出的出现场景以及解决方案
【7月更文挑战第3天】堆溢出(Heap Overflow)和栈溢出(Stack Overflow)是两种常见的内存溢出问题,通常发生在内存管理不当或设计不合理的情况下
10 3
|
5天前
|
监控 负载均衡 Java
Java虚拟机调优技巧及性能监控
Java虚拟机调优技巧及性能监控
|
2天前
|
负载均衡 Java 开发者
Spring Cloud实战:构建分布式系统解决方案
Spring Cloud实战:构建分布式系统解决方案
|
4天前
|
负载均衡 Java 开发者
Spring Cloud实战:构建分布式系统解决方案
Spring Cloud实战:构建分布式系统解决方案
|
10天前
|
存储 缓存 监控
深入JVM:解析OOM的三大场景,原因及实战解决方案
深入JVM:解析OOM的三大场景,原因及实战解决方案
|
25天前
|
运维 Java Shell
手工触发Full GC:JVM调优实战指南
本文是关于Java应用性能调优的指南,重点介绍了如何使用`jmap`工具手动触发Full GC。Full GC是对堆内存全面清理的过程,通常在资源紧张时进行以缓解内存压力。文章详细阐述了Full GC的概念,并提供了两种使用`jmap`触发Full GC的方法:通过`-histo:live`选项获取存活对象统计信息,或使用`-dump`选项生成堆转储文件以分析内存状态。同时,文中也提醒注意手动Full GC可能带来的性能开销,建议在生产环境中谨慎操作。

热门文章

最新文章