云日志服务 LTS-云日志服务Java SDK:Producer性能基线
Producer性能基线
上报日志时,请参考如下参数的测试性能基线,若超出基线值,可能会导致日志上报异常。
E CS 虚拟机配置参考如下:
- 实例规格:通用计算增强型c7.xlarge.2
- CPU:4 vCPU
- 内存:8 GB
- 基准带宽:100 Mbit/s
- OS:Huawei Cloud EulerOS release 2.0
- JVM:OpenJDK 64-Bit Server VM (build 17.0.7+7, mixed mode)
测试程序说明(单个producer):
- totalSizeInBytes: 104857600
- maxBlockMs:0
- batchSizeThresholdInBytes: 1048576
- batchCountThreshold:40960
- lingerMs:2000
- ioThreadCount:具体用例中调整
- JVM初始堆/最大堆大小:1GB
- 发送日志总条数:100,000,000
- 发送日志总大小:约50GB
按照参数基线值设置后,使用华为云ECS机器作为日志上报环境,通过华为云内网LB网络服务入口进行上报。
标准日志SDK上报性能基线测试结果参考:
- 上报日志格式:测试上报一批日志,包含4条日志,总大小约为2.2KB。为了模拟数据的随机性,测试使用的日志数据为随机字符串,单条日志大小约为510字节。
[ { "contents" : [{ "log" : "随机字符串510字节", "log_time_ns" : 1637527157333902200 }, { "log" : "随机字符串510字节", "log_time_ns" : 1637527157333902200 } ] }, { "contents" : [{ "log" : "随机字符串510字节", "log_time_ns" : 1637527157333902200 }, { "log" : "随机字符串510字节", "log_time_ns" : 1737527157333987400 } ] } ]
- 性能基线参考如下:
表2 标准日志SDK上报性能基线 IO 线程数量
数据吞吐量
数据吞吐速率
CPU 使用率
2
7.8 MB/S
1.5W 条/S
9 %
4
15.4 MB/S
3.1W 条/S
19 %
6
19.7 MB/S
3.9W 条/S
27 %
结构化日志SDK上报性能基线测试结果参考:
- 上报日志格式:测试上报一批日志,包含4条日志,总大小约为2.2KB。 单条日志包含10个键值对以及content、time字段。 为了模拟数据的随机性,测试使用的数据为随机字符串,单条日志大小约为550字节。
{ "logs" : [ { "contents" : [ { "content": "sdk-log-new-struct-1", "content_key_1": "XmGFubcemwrceBWbZYRBTgohfxfFih", "..." : "...", "content_key_10": "amchrqwPdigHopmAkNLvJtNxgiPUzh" },{ "content": "sdk-log-new-struct-2", "content_key_1": "zOPDFRCNYsVznSgtnFejWFbaxklkMQ", "..." : "...", "content_key_10": "mLzpbYcumXsIgYtQIbzizoACLtUgwS" } ], "time": 1645374890235 },{ "contents" : [ { "content": "sdk-log-new-struct-3", "content_key_1": "SaGsfDrQskJaHlciNAUXFyxiqCAqXe", "..." : "...", "content_key_10": "wMQNuoVWonxVSsRsocQoDkEjcjiPio" },{ "content": "sdk-log-new-struct-4", "content_key_1": "bHDjNmAvdiLAvWdxoETANqCYxhVMMk", "..." : "...", "content_key_10": "scsxtrXrPUFYVARzOvbCxSofYZBsFV" } ], "time": 1645374890235 } ] }
- 性能基线参考如下:
表3 结构化日志SDK上报性能基线 IO 线程数量
数据吞吐量
数据吞吐速率
CPU 使用率
2
18.7 MB/S
3.5W 条/S
13 %
4
34.6 MB/S
6.4W 条/S
25 %
6
42.7 MB/S
7.8W 条/S
32 %
新版本结构化日志SDK上报性能基线测试结果参考:
- 上报日志格式:测试中使用的日志包含10个键值对以及content、logTime 字段。为了模拟数据的随机性,测试使用的数据为随机字符串。 单条日志大小约为540字节。
content: sdk-log-new-struct-1 content_key_1: sshyaqKCfrAPCMpdlxroPuCedeuJ content_key_2: RVFtqFBjBtTAHVvdHBYQsDsoogJc ... content_key_9: zLKeuxDnzGtupeZrQKKIlkQemXvX content_key_10: fYxmtYxKNfBhRfqMbZEOfimlsAIo logTime: 1645390242169
- 性能基线参考如下:
表4 新版本结构化日志SDK上报性能基线 IO 线程数量
数据吞吐量
数据吞吐速率
CPU 使用率
2
23.7 MB/S
4.5W 条/S
11 %
4
45.6 MB/S
8.7W 条/S
23 %
6
54.7 MB/S
10.3W 条/S
30 %
总结如下:
- CPU时间主要花费在对象的序列化和压缩上,在吞吐量较高的情况下CPU使用率比较高。但在日常环境中,单机数据流量均值为100KB/S,因此造成的CPU消耗几乎可以忽略不计。
- 增加IO线程数量可以显著提高吞吐量,尤其是当IO线程数量少于可用处理器个数时。
- 调整totalSizeInBytes对吞吐量影响不够显著,增加totalSizeInBytes会造成更多的CPU消耗,建议使用默认值。
- 当日志上报量超过单个producer时:
- 建议拆分日志流,使用多个producer上报日志,分摊流量,以保障SDK处于正常上报状态。
- 如果maxBlockMs为0时,SDK处于非阻塞状态,会触发保护机制自动降级,可能会对部分日志做丢弃处理。
- 如果maxBlockMs大于0时,SDK处于阻塞状态,阻塞时间为maxBlockMs,可能会造成producer.send()发送日志方法处于阻塞状态。