背景
公司业务部署在阿里云,有用到influxdb,领导要求压测一下阿里云influxdb的写性能,以便确认线上配置是否需要升配
使用压测工具jmeter
准备脚本试运行
准备好了脚本,运行一下,没报错,数据已成功写入influxdb
>select*from cpu name: cpu time free host os use ---- ---- ---- -- ---160691622037617621680 node1 ubuntu 10160691632029177604380 node1 ubuntu 10160691637693707216680 node1 ubuntu 10
更改请求运行报错
报错了,我就增加了一行数据,报错了,难道不支持发送多行数据吗
使用POSTMAN验证
可以看到,使用postman是支持发送多行数据的
>select*from mem name: mem time free host os use ---- ---- ---- -- ---160691660383996570490 node1 ubuntu 11160691702479650735490 node1 ubuntu 11160691709844724217490 node1 ubuntu 11>select*from cpu name: cpu time free host os use ---- ---- ---- -- ---160691622037617621680 node1 ubuntu 10160691632029177604380 node1 ubuntu 10160691637693707216680 node1 ubuntu 10160691702479650735480 node1 ubuntu 10160691709844724217480 node1 ubuntu 10
调试
那为什么使用jmeter发送多行数据不行,使用postman就可以呢?
使用wireshark抓包
postman发送数据时,抓包,发现第一行数据尾部多了个\n
jmeter发送数据时抓包,发现数据尾部多了个\r\n
通过抓包发现它们换行符不一样
注意,如果通过wireshark的HTTP追踪流是不好发现问题的
这个是jmeter的
这个是postman的
你会发现请求内容都是一样,分辨不出问题,这都是因为换行符被转义了,我开始排查的时候就是使用http的追踪流,没发现不一样的地方,所有这里要注意点
那么如何解决呢,我也是第一次碰到这个问题,所以Google了一下,找到以下办法
在数据尾部声明换行
${__unescape(\n)}
运行发现还是报错,抓包看下,发现尾部换行确实变成了\n,但是中间还是多出一个\r\n,怎么解决?
那就把数据写成一行试试 (注意,数据尾部不要按回车切换到下一行),果然成功了
问题解决
>select*from cpu,disk,mem limit2name: cpu time free host os use ---- ---- ---- -- ---160691622037617621680 node1 ubuntu 10160691632029177604380 node1 ubuntu 10name: disk time free host os use ---- ---- ---- -- ---160694377805817689090 node1 ubuntu 11160694379485306324990 node1 ubuntu 11name: mem time free host os use ---- ---- ---- -- ---160691660383996570490 node1 ubuntu 11160691702479650735490 node1 ubuntu 11