云日志服务 LTS-云日志服务Log4j2 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上报性能基线测试结果参考:
- 上报日志:测试中使用的单条日志大小约为550字节。为了模拟数据的随机性,测试使用的数据为随机字符串。
- 性能基线参考如下:
表1 性能基线 IO 线程数量
数据吞吐量
数据吞吐速率
CPU 使用率
2
8 MB/S
1.6W 条/S
15 %
4
15.2 MB/S
3W 条/S
29 %
6
20.7 MB/S
4.1W 条/S
36 %
总结如下:
- CPU时间主要花费在对象的序列化和压缩上,在吞吐量较高的情况下CPU使用率比较高。但在日常环境中,单机数据流量均值为100KB/S,因此造成的CPU消耗几乎可以忽略不计。
- 增加IO线程数量可以显著提高吞吐量,尤其是当IO线程数量少于可用处理器个数时。
- 调整totalSizeInBytes对吞吐量影响不够显著,增加totalSizeInBytes会造成更多的CPU消耗,建议使用默认值。
- 当日志上报量超过单个producer时:
- 建议拆分日志流,使用多个producer上报日志,分摊流量,以保障SDK处于正常上报状态。
- 如果maxBlockMs为0时,SDK处于非阻塞状态,会触发保护机制自动降级,可能会对部分日志做丢弃处理。
- 如果maxBlockMs大于0时,SDK处于阻塞状态,阻塞时间为maxBlockMs,可能会造成SDK发送日志处于阻塞状态。