云日志服务 LTS-云日志服务Java SDK:Producer性能基线

时间:2025-05-19 17:35:25

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时:
    1. 建议拆分日志流,使用多个producer上报日志,分摊流量,以保障SDK处于正常上报状态。
    2. 如果maxBlockMs为0时,SDK处于非阻塞状态,会触发保护机制自动降级,可能会对部分日志做丢弃处理。
    3. 如果maxBlockMs大于0时,SDK处于阻塞状态,阻塞时间为maxBlockMs,可能会造成producer.send()发送日志方法处于阻塞状态。
support.huaweicloud.com/usermanual-lts/lts_03_1003.html
提示

您即将访问非华为云网站,请注意账号财产安全