modelmapper自定义映射规则遇到的问题

最近辛苦半年的项目在做压测,压测工程师反馈一个诡异的问题,发现两个请求接口在高访问情况下,服务器内存使用持续升高,但CPU使用率不高,停止请求,内存占有率一直降不回来,通过visualvm查看,GC各代回收基本正常,没看出什么问题,用的是JDK8,所以查看元数据区,发现问题所在,伴随持续对同一接口请求,加载到JVM中的类个数越来越多,元数据区内存占有率一直在增加,于是本地调试查看问题,发现问题截图

Total loaded 持续增多,按道理对同一接口进行多次请求,JVM初期加载进来的类应该是固定,如果某个类实例对象过多,也是堆中使用率过高,但是随着请求停止,会回收堆的空间,不会导致元数据区一直存在高的占有率,仔细猜测,只有代理 使用过多的情况下,才会不停的代理出新类,加载进元数据区,于是打印dump文件,查看类信息,结果如猜测同样,如图

 

Car ,Vehicle 代理类伴随请求次数持续增加,问题找到了,然后分析原因,原来在此接口,中,同事用了modelmapper工具类的自定义属性转换工具,于是本地代码测试了一下,直接上代码

 

通过代码BUG调试,关键问题 就在modelMapper.addMappings(propertyMap)这行代码上,一步一步debug进去

下面这个地方用到了反射

 

 

好了,终于找到了代理类产生的地方,原来如此。。。对于一个正常接口来说,在压测过程中,并发量一定情况下,JVM各项指数应该会稳定到一个平衡点,才是正常现象,还是用beanutils.copyproperties吧

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值