压测出现的问题

2019-03-11  本文已影响0人  陈阳001

一.3.19大促时的压测:

1.问题:营销接口采用fastjson的方法序列化和反序列化去实现对象间属性的拷贝,因为营销接口里面有大量的循环,造成序列化和反序列化一秒80万的操作,占用大量cpu资源,造成热线程。

解决:去除序列化和反序列化操作,用get set替代。这样不会出现占用大量cpu资源的情况。

2.问题:商品接口用spring的PropertyUtils去操作对象间属性的拷贝。性能太低。

解决:换成Cglib的 BeanCopier,效率提升的10倍。
延伸:
进行了三次测试,最后的结果如下:

10次测验 第一次 第二次 第三次 平均值 每次平均值
BeanUtil.copyProperties 54 57 50 53.66667 5.366666667
PropertyUtils.copyProperties 4 4 4 4 0.4
org.springframework.beans.BeanUtils.copyProperties 12 10 11 11 1.1
BeanCopier.create 0 0 0 0 0
10000次测验 第一次 第二次 第三次 平均值 每次平均值
BeanUtil.copyProperties 241 222 226 229.6667 0.022966667
PropertyUtils.copyProperties 92 90 92 91.33333 0.009133333
org.springframework.beans.BeanUtils.copyProperties 29 30 32 30.33333 0.003033333
BeanCopier.create 1 1 1 1 0.1
10000次反转测验 第一次 第二次 第三次 平均值 每次平均值
BeanUtil.copyProperties 178 174 178 176.6667 0.017666667
PropertyUtils.copyProperties 91 87 89 89 0.0089
org.springframework.beans.BeanUtils.copyProperties 21 21 21 21 0.0021
BeanCopier.create 0 1 1 0.666667 6.66667E-05

3.问题:代码下压测情况下抛出ConcurrentModificationException,经过排查是营销接口的ArrayList.sort()出现并发冲突。

方案:去除ArrayList.sort()用别的方法排序。
ArrayList.sort()这个操作虽然没有set,remove等操作,但是改变了数据的顺序,有指针等操作,也会造成ConcurrentModificationException

上一篇下一篇

猜你喜欢

热点阅读