日志说明

Motan会打印三种类型的日志,帮助运维人员监控系统状态。

请求类日志

通过motan:service或motan:referer的accessLog属性来配置,基本格式如下:

  1. "accesslog" - date - side - local_application_module - localip - interface - method_name - parameter_name - to_ip - remote_application_module - result - request_id - process_time_mills (分隔符为"|"

异常类日志

请参考 错误码及异常日志说明

统计类日志

所有请求的统计:

  1. [motan-totalAccessStatistic] total_count: 32565 slow_count: 26 biz_excp: 0 other_excp: 2 avg_time: 1.93ms biz_time: 0.94ms avg_tps: 1085
  2. total_count: 30s 内总请求数
  3. slow_count30s 内慢请求数(超过 50ms slow
  4. biz_excp: 30s 内业务处理异常的总数
  5. other_excp: 30s 其他异常的总数
  6. avg_time: 所有接口的平均响应时间(网络传输+序列化+service 端处理)
  7. biz_time: 所有接口的 service 端的业务处理时间(不包含序列化和网络传输)
  8. avg_tps:平均 tps
  9. 注:上面是基于 client 端为维度的统计,service 端也有,其中 avg_time 便是业务处理时间,biz_time 0

单方法的统计:

  1. [motan-accessStatistic] item: injvm://cn.sina.api.data.service.GroupService.getGroupMemberCounters(long,long) total_count: 0 slow_count: 0 biz_excp: 0 other_excp: 0 avg_time: 0.00ms biz_time: 0.00ms avg_tps: 0 max_tps: 0 min_tps: 0
  2. total_count: 30s 该接口的请求数,
  3. slow_count: 30s 内该接口的慢请求数 (超过 50ms 的算 slow
  4. biz_excp: 30s 内该接口业务处理异常的总数,
  5. other_excp: 30s 该接口其他异常的总数,
  6. avg_time: 平均响应时间(网络传输+序列化+service 端处理),
  7. biz_time: service 端的业务处理时间(不包含序列化和网络传输)
  8. avg_tps:平均 tps
  9. max_tps: 最大的 TPS
  10. min_tps: 最小的 TPS

内存统计:

  1. [motan-memoryStatistic] 1954.67MB of 7987.25 MB (24.5%) used

性能测试

Motan源码中提供了性能测试框架,便于使用者进行性能评估,源码请参考https://github.com/weibocom/motan/tree/master/motan-benchmark

以下是我们测试的结果:

测试环境

硬件配置

  1. Server端:
  2. CPUmodel name:Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz,cache size: 15360 KB,processor_count : 24
  3. 内存:16G
  4. 网络:千兆网卡
  5. 硬盘:300GB
  6. Client端:
  7. CPUmodel name: Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz,cache size:15360 KB,processor_count : 24
  8. 内存:16G
  9. 网络:千兆网卡
  10. 硬盘:300GB

软件配置

  1. JDK版本:
  2. java version "1.7.0_75"
  3. OpenJDK Runtime Environment (rhel-2.5.4.2.el7_0-x86_64 u75-b13)
  4. OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)
  5. JVM参数:
  6. java -Djava.net.preferIPv4Stack=true -server -Xms1g -Xmx1g -XX:PermSize=128m

测试脚本

Server测试场景:

  1. 并发多个Client,连接数50,并发数100,测试Server极限性能

Client测试场景:

  1. 单客户端,10连接,在并发数分别为1102050的情况下,分别进行如下场景测试:
  2. - 传入空包,不做任何处理,原样返回
  3. - 传入Pojo嵌套对象,不做任何处理,原样返回
  4. - 传入1kString,不做任何处理,原样返回
  5. - 传入5kString,不做任何处理,原样返回
  6. - 传入10kString,不做任何处理,原样返回
  7. - 传入20kString,不做任何处理,原样返回
  8. - 传入30kString,不做任何处理,原样返回
  9. - 传入50kString,不做任何处理,原样返回。

测试结果

Server测试结果:

  1. 请求空包:单Server极限TPS18W
  2. 请求1KString:单Server极限TPS8.4W
  3. 请求5KString:单Server极限TPS2W

Client测试结果:

对比图:

请求类日志 - 图1

原始数据:

并发数测试场景平均TPS平均响应时间(ms)
1Empty56010.178
1Pojo35560.281
11KString26570.376
15KString11000.908
110KString9491.052
120KString6001.664
130KString5121.95
150KString2533.939
10Empty391810.255
10Pojo273140.365
101KString199680.5
105KString112360.889
1010KString58751.701
1020KString44932.224
1030KString33872.951
1050KString14996.668
20Empty690610.289
20Pojo472260.423
201KString347540.575
205KString188831.058
2010KString90322.214
2020KString54713.654
2030KString37245.368
2050KString197310.133
50Empty694740.719
50Pojo640220.78
501KString589370.848
505KString207032.414
5010KString107614.645
5020KString56148.904
5030KString378213.214
5050KString228521.869