记⼀次drools5的性能优化过程
业务场景
⽀付平台每⽇早晨会收到账务系统发送的批量扣款指令,这些扣款指令需要通过⽀付路由系统获取到最优的扣款⽀付渠道,进⽽再通过⽀付⽹关系统送往各个⽀付渠道进⾏扣款。为了保证扣款成功率及批扣的回盘速度,这些批量扣款指令需要在1⼩时内全部发出。
系统调⽤链如下:session怎么记忆
账务->⽀付批处理->⽀付路由->⽀付⽹关->⽀付公司
遇到的问题
在对公司PAY2.0的⽀付路由模块(采⽤Drools5实现)改造过程中,跑批压测发现随着并发的增⼤,路由处理的速度会急剧下降,单批路由(1000笔/批)的速度为10s左右,但压测过程中,单批路由的速度下降到120s+,这个速度显然是不可接受的。
运⾏环境
1. drools版本:5.
2.1.Final
2. JDK版本: 1.8.0_131-b11
3. 数据量:20个并发线程,发送500批指令,⼀批1000笔交易,共计50万笔
4. JVM关键参数:
-Xms4096m -Xmx4096m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -
XX:+UseCMSInitiatingOccupancyOnly -XX:+CMSScavengeBeforeRemark
猜想⼀ JVM GC引起的停顿引起性能下降
鉴于⽬前的问题,在单批发送性能正常,压测多批并发发送性能下降。⾸先想到的是内存不⾜导致的FGC频繁引起的性能下降。
验证思路:
1. 在压测过程中,关注GC情况(YGC, FGC的频率)
执⾏命令:jstate -gccause pid 3s (每3秒打印⼀次gc情况)
关注GC情况,发现在处理过程中,FGC次数并没有上涨,YGC频率⼤概为1次/每秒。GC情况并⽆异常,具体GC频率见下⽅:
"****

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。