删除数据后为什么内存占有率还是很高
2021-04-29 16:32:24 2 举报
AI智能生成
删除数据后为什么内存占有率还是很高
作者其他创作
大纲/内容
原因
数据删除后,内存空间由内存分配器管理
不会立即返回给操作系统
操作系统认为Redis保留了大量内存
什么是内存碎片
内存碎片的形成
内因操作系统的内存分配机制
分配策略决定了操作系统无法做到按需分配
一般是按照固定大小来分配内存,而不是应用程序申请多少就给多少
libc,jemalloc(默认使用),tcmalloc分配器分配
jemalloc是按照一系列固定的 大小划分内存空间
Redis每次申请的内存空间大小不一致,就会出现碎片的风险
外因Redis的负载特征
键值对大小不一样
键值会被修改与删除,会导致空间的扩容和释放
如何判断有内存碎片
自身的INFO命令
INFO memory出来的mem_fragmentation_ratio 代表内存碎片率
大于1小于1.5合理
大于1.5代表内存碎片率已经超过50%了
如果小于1代表操作系统分配给Redis的内存不够,说明有部分使用到了Swap数据。
如何清理内存碎片
简单粗暴的重启Redis实例
4.0-RC3版本后,提供了内存碎片自动清理的方法
碎片清理是有代价的
但会影响性能,在清理的时候Redis就不能即使处理请求。
自动内存碎片清理机制设置的参数
设置清理的开始时间
占用的CPU比例
结束时间
开始清理
active-defrag-ignore-bytes 100mb:表示内存碎片的字节数达到 100MB 时,开始清理;
active-defrag-threshold-lower 10:表示内存碎片空间占操作系统分配给 Redis 的总空间比例达到 10% 时,开始清理。
active-defrag-cycle-min 25: 表示自动清理过程所用 CPU 时间的比例不低于 25%,保证清理能正常开展;
active-defrag-cycle-max 75:表示自动清理过程所用 CPU 时间的比例不高于 75%,一旦超过,就停止清理,从而避免在清理时,大量的内存拷贝阻塞 Redis,导致响应延迟升高。
0 条评论
下一页