监控数据出现实例已使用内存略大于实例可使用内存是什么原因?
DCS单机和主备实例已使用内存为redis-server进程统计的已使用内存。集群是基于分片机制实现的,集群的已使用内存为各个分片redis-server的已使用内存的总和。
由于开源redis-server内部机制的原因,有时会出现DCS缓存实例已使用内存略大于可使用内存的情况,此为正常现象。
Redis通过zmalloc来分配内存,不会在每一次分配内存时都检查是否会超过max_memory,而是在周期任务以及命令处理的开头处等地方,判断一次当前的used_memory是否超过max_memory,如果超过就触发逐出操作。所以,对于max_memory策略的限制实施并不是实时、刚性的,会出现某个时间used_memory大于max_memory的情形。