抢红包性能测试测试案例

场景描述:抢红包活动,现场700人,每个人必须中奖,中奖活动开始过程中出现宕机;参数(C3P0 100连接数,超时时间30秒;tomcat 连接池4096 ;JVM内存 1024M 1024M 64M 512M)

处理过程:使用loaderrunning进行性能测试,对数据库连接池数量进行,tomcat线程数,JVM内存进行参数调整,加压测试。

发现问题:

1、 程序宕机是因为有数据库连接未关闭的情况,导致数据库连接没有释放,最终所有线程等待,宕机(出现数据库连接异常)。

2、高并发环境下出现数据藏独现象(两个人同事中了同一个CDKEY),采取了hibernate乐观锁。添加方式如下:

数据库表添加version字段

pojo

private Integer version;


映射文件

 <class name="com.hxjr.pojo.Cdkey" table="CDKEY"  <strong>optimistic-lock="version" </strong>>
        <id name="id" type="java.lang.String">
            <column name="ID" length="40" />
            <generator class="uuid.hex" />
        </id>
        
        <!-- version标签用于指定表示版本号的字段信息   -->
        <strong><version name="version" column="version" type="integer"></version> </strong>
        

添加乐观锁之后出现的新问题就是当两条数据对同一个记录进行操作的时候,只有一个会成功,第二个会抛出异常。场景需要每位用户都必须中奖,在这个基础上做了以下优化:

1. 每次更新操作,刷新session;

2. 异常数据接到异常在进行处理。

try{
					zpList = this.activityService.meetingDoQhbRandom(peActivityId, empno, page, rows);
				}catch(Exception e){
					try{
						Thread.sleep(500);
						zpList = this.activityService.meetingDoQhbRandom(peActivityId, empno, page, rows);
					}catch(Exception e1){
						Thread.sleep(500);
						try{
							zpList = this.activityService.meetingDoQhbRandom(peActivityId, empno, page, rows);
						}catch(Exception e2){
							zpList = this.activityService.meetingDoQhbRandom(peActivityId, empno, page, rows);
						}
					}
				}

数据优化了很多,但是还存在不中奖需要重新抽的情况。


后期讨论了两套解决方案:

1 才是缓存或者内存数据库存放cdkey

2 使用代码同步机制,锁住代码块。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值