kernelai
kernelai
> 我看最近的镜像是800M 肯定比2G小了。https://hub.docker.com/r/pikadb/pika/tags 你用的是什么版本 上面显示的应该是压缩过的大小。

有可能内存使用过多,被系统kill掉的。尤其是在容器中使用pika。这些内存是用来作为sst 的index缓存的。可以通过减少打开的文件数来减少缓存的index。
出现这个问题的原因是由于设置的slot数目太多,每个slot都会创建memtable。但由于rocksdb中memtable内存总量的限制导致频繁刷盘。建议减少slot数目。例如8个slot。
codis中1024个slot,是这个变量设置的 [const MaxSlotNum = 1024](https://github.com/CodisLabs/codis/blob/de1ad026e329561c22e2a3035fbfe89dc7fef764/pkg/models/slots.go#L13) 修改下这个参数重新编译。例如你目前使用的是8个group,考虑到未来的扩展,可以把这个值设为16.
> memtable 不是跟写有关系吗?跟读也有关系吗? compaction过程会产生读操作。
主要是codis中的slot总个数,需要pika也要创建这么多总数slot来对应。只能通过减少const MaxSlotNum,减少总的slot数目。进而减少memtable。
一台物理机512个slot是非常多的。实际对应这台物理机上会创建512*5个rocksd实例。
从资源利用的角度来说,尽可能少的slot的数目是合适的。但需要考虑未来扩展,可以double放宽。例如你如果有8台物理机,每台一块物理磁盘。那么8个slot,分配到8个group就可以充分利用物理资源。考虑到未来的扩容,那么可以实际设置为16个slot。
> > > > > > > > > > > > > 是的。感谢解答 。还有个小小的问题,一台物理机设置多少个rocksd实例,也就是分配多少slot 比较合适 ,这个由什么决定? > > > > > > > 集群采用codis+pika 机器配置:内存256GB 磁盘NVME 7T 数据量单副本 2T左右...