seefan / gossdb

ssdb client for go with pool surport
MIT License
131 stars 47 forks source link

请问你有没有分析一下你的Driver 性能呢? #27

Closed songliwei2014 closed 7 years ago

songliwei2014 commented 7 years ago

image

songliwei2014 commented 7 years ago

现在在生产环境中使用你的driver, 发现cpu占用太高,内存占用太大。 cpu耗时的地方基本就在你的driver 里面。 内存占用基本就是 flat flat% sum% cum cum% 273.31MB 67.52% 67.52% 273.31MB 67.52% bytes.makeSlice 58.51MB 14.45% 81.98% 58.51MB 14.45% runtime.rawstringtmp 45.29MB 11.19% 93.16% 103.80MB 25.64% github.com/ssdb/gossdb/ssdb.(*Client).parse

songliwei2014 commented 7 years ago

好像不是你的问题,是ssdb作者写的driver 好像有问。

seefan commented 7 years ago

你好,能不能提供一下并发数量,以及平均每个cmd的kb数,方便我测试一下。

seefan commented 7 years ago

看你发的图,应该是在使用MultiHgetSliceArray时下载的数据量比较大,建议你减小一次请求量,改成多次获取,再合并试一下,也许会好一些。ssdb在一次获取的数据里比较多时,会比较慢。

seefan commented 7 years ago

已解决该问题,ssdb的连接在解析大数组时性能会比较差,已将连接重写并移植到gossdb里。

songliwei2014 commented 7 years ago

我hashmap单个数据项不大,但是整个hashmap比较大,单个数据项不超过200字节,整个hashmap可能有2000-5000项。整个大小应该只有1MB 左右,你修改完之后在线上验证过来吗?

seefan commented 7 years ago

我本机测试的,用pprof也分析过数据,速度比原来提高不是一个数量级。原来是下载量如果太多会导致buf重复加载,所以内存和cpu的压力都比较大。