aliyun / aliyun-oss-cpp-sdk

Aliyun OSS SDK for C++
Other
184 stars 88 forks source link

PutObjectAsync 内存小块的时候,系统被sdk线程占满。疑似有问题. #97

Open ifquant opened 3 years ago

ifquant commented 3 years ago

我 添加了一个perf 目录 测试代码可见 https://github.com/ifquant/aliyun-oss-cpp-sdk/perf

问题描述 发现当用单线程从内存 连续 PutObjectAsync 10000个 4k大小的内存块的时候,sdk 会开启49个线程, 并且占满系统cpu. 导致 put ops 非常低,在2核机器上putobject ops 只能达到130/s . 按照常理来说,因为基本无cpu计算,都是内存操作和io操作,非常不合理。请求协助排查。 看看改哪些参数可以解决这个问题。

image

问题复现: 1.再perf/src/Config.c 设置桶,内网oss地址,key,secert 2.在 perf/src/ObjectPerfTest.cc 替换桶名 lvwjtest 桶名为实际的桶名。 3.在oss同区域找一台阿里云机器。 4.mkdir build; cd build; cmake ../
5 ./perf/cpp-sdk-perf put 1 10000
会输出 put完10000个文件,花费了多长时间. 6.top 观察. top -H -p pid

ifquant commented 3 years ago

关闭crc,对测试结果影响不大。 image

ifquant commented 3 years ago

我初步测试了下同步接口。同步接口下,一个请求的处理时间大概30ms. 那么用户如果要增加并发,就只能增加线程数。所以用户如果要打到1万并发,需要开到300线程。