项目中的性能优化

      在实际项目中,由于需要把接口返回来的对象存在数据库中,所以用到了jackson组件把对象转成json后再保持到数据库中。由于每天处理的数据量太大,而业务对时间的要求非常严格,即使采用4台机器做分布式后,计算时间仍然在2——3个小时,于是性能优化提上了日程。

      用jprofiler工具观察到性能主要在两个地方耗时比较多:1.tojson串转换,2.调用其他系统接口。

      调用其他系统接口耗时占比在17%左右,tojson转换耗时占比在20%左右。经过小组讨论,决定采用memcached在运行计算之前就缓存数据。缓存命中率为83.4%的情况下,性能如下:

统计

未使用缓存

使用缓存

计算总耗时

39 分钟

34 分钟

单个接口耗时 ms/ 次)

38

12.9

接口 耗时总计

15 分钟

5 分钟

接口 调用次数

24002

24007

数据量

5000

5000


      可见,调用接口性能提升2/3。

      tojson串转换采用StringBuilder替换jackson的性能对比如下:



tojson 数据量10000,每个单个1400字节左右 ,测试5次耗时(ms)情况如下
  1 2 3 4 5 平均
jackson 1204 1183 1196 1202 1160 1189
new StringBuilder 1060 941 912 997 1160 1014
new StringBuilder(1600) 784 824 853 818 778 811.4


      从对比中可以看到 StringBuilder的性能比jackson提高1/4左右。


猜你喜欢

转载自java-road-126-com.iteye.com/blog/1462937