blade-broker服务中接收一条数据就保存一条数据进入influxdb逻辑,是否有考虑过还可以优化下性能

Blade 未结 2 229
xiaoliu
xiaoliu 剑圣 2024-11-01 09:09

一、该问题的重现步骤是什么?

1. 物联网平台的broker服务中,比如EventPropertyPostFunction里保存数据进入influxdb中,目前看到代码是接收一条数据就保存一条数据进入influxdb。我用jmeter试了下,qps达到1w的时候,会导致连接influxdb连接不上,进而导致broker服务oom。请问这块的接收一条数据就保存一条数据进入influxdb逻辑,是否有考虑过还可以优化下?

deviceDataService.saveDeviceProperty(topicVariables, params);

image.png

image.png

image.png

二、你期待的结果是什么?实际看到的又是什么?

期待的结果:希望能优化下blade-broker服务中接收一条数据就保存一条数据进入influxdb的逻辑性能

实际看到的:目前blade-broker服务中,接收一条数据就直接保存一条数据进入influxdb


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

正在使用的产品:BladeX物联网平台

版本:1.1.0

操作系统:Windows11


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

2条回答
  • 2024-11-01 09:40

    可以配置批量入库,你把数量和时间调大点试试

    CleanShot20241101094038@2x.png

    作者追问:2024-11-01 11:16

      已经调高了:batch-size: 10000,flush-duration: 5s。但是还是报上面的错误,不知还有其他办法优化吗?

    image.png

    回答: 2024-11-01 11:25

    jmeter测试的哪个,调用的什么接口,参数是什么

    作者追问:2024-11-01 11:30

    接口是我自己写的一个简单的controller,如下:

    image.png

    image.png

    image.png

    image.png

    回答: 2024-11-01 11:38

    如果是并发环境下通过调用controller来开启模拟器,你还得做分布式部署或者单boot服务做配置调优。简单些你可以先用这个测试类试试

    CleanShot20241101113536@2x.png

    作者追问:2024-11-01 11:50

    按报错的提示来看,应该是influxdb保存数据有瓶颈。但是目前我只有qps1w的写入请求(按官方influxdb说的写入qps,应该远高于1w),是不是influxdb还可有有更高的什么优化配置?

    回答: 2024-11-01 12:03

    调高broker与influxdb的内存,先不要用jmeter(jmeter本身也很占用内存),用我们提供的测试类测试看看。我们之前压测5w个设备起批量是没问题的。

    回答: 2024-11-01 12:19

    还有批量的时间先改回默认的1s试试,5秒有点多了,数据内存占用多了,容易oom

    作者追问:2024-11-01 12:29

    好,下午我用测试类调下

    0 讨论(0)
  • 2024-11-01 12:00

    broker 服务的 jvm 内存配置的多少,批量之后数据会堆在内存队列里。压测比较耗内存,建议用2台机器 jmeter 移到另外一台。 


    添加 JVM 参数 -Xmn2G -Xms4G -Xmx4G 试试,实际生产可以按需再调大点。

    作者追问:2024-11-01 12:28

    我把broker的内存,分别从8g、16g、32g都试过,最后都出现了oom。下面是当时之前配置的8g的截图(16g和32g的当时没有记截图,效果也是像下面蓝色部分打满,最后oom)

    image.png

    作者追问:2024-11-01 12:32

    这是当时配置的8g内存,并且使用的是zgc

    image.png

    作者追问:2024-11-01 12:34

    device-simulator和broker在用的是docker上的2台服务器,jmeter是在本地windows上压测docker上的 device-simulator接口

    回答: 2024-11-01 12:44

    flush-duration 需要调小,5s 的话相当于平均 1s 只写入 2000条,会导致更多的消息堆积。

    回答: 2024-11-01 12:46

    实际是压测多久后出现 oom ?

    回答: 2024-11-01 12:53

    麻烦看下  heapdump.hprof 有没有生成,麻烦压缩一下发我们分析一下,谢谢!

    回答: 2024-11-01 13:35

    首先是报了很多influxdb连接被重置的异常,是几次压测都出了这个异常么?

    作者追问:2024-11-01 14:06

    jmeter压测大概几千就开始出现连接influxdb失败;出现oom跟broker设置的内存大小有关,比如8g内存,用1w的qps压测,印象里大概在10分钟之后就开始有了。记录过一次hprof,有点大,有邮箱吗,发到你邮箱?

    image.png

    0 讨论(3)
提交回复