专门做自由行的网站,邯郸推广网站建设哪个好,wordpress主题框架,辽宁建设工程信息网诚信备案库info memory 查看redis 内存使用情况出现的问题#xff0c;公司在导入大量redis key 的时候#xff0c;想要看一下redis 内存使用情况 #xff0c;发现used_memory_peak_perc 和 used_memory_dataset_perc 马上达到100%#xff0c;这个时候很慌张#xff0c;是不是当前red…info memory 查看redis 内存使用情况出现的问题公司在导入大量redis key 的时候想要看一下redis 内存使用情况 发现used_memory_peak_perc 和 used_memory_dataset_perc 马上达到100%这个时候很慌张是不是当前redis 内存打满了然后查了网上的博客查到used_memory_dataset_perc 在Redis中used_memory_dataset_perc是用来表示“数据占用的内存大小的百分比”。这个指标是“数据空间占用总内存的百分比”计算方式为“100% * (used_memory_dataset / (used_memory - used_memory_startup))”。 意思是如果这个比例如果达到了100%就会导致内存写满这个时候非常慌张但是又有文章说 意思是这个值永远也不会打满这个时候就存在了一个疑惑为什么说used_memory_dataset_perc 满了意味着内存使用已满但是为什么又说是永远打不满这是否存在矛盾然后基于这个问题又进行探索。
发现操作系统的内存大小是在376G 查看了redis 的内存分配机制如果说redis 没有配置maxmemory 那 redis 会在达到峰值的时候像操作系统申请内存假设操作系统内存完全提供给redis 那理念上redis 的内存实际上是操作系统内存数那上述问题就解决了意思是当前内存使用量和redis 已经申请的内存的达到一定值的时候,redis 会向操作系统申请内存来应对内存使用满的情况直到redis 的内存量和操作系统的内存量达到一致。但是情况是操作系统的内存不可能完全提供给redis使用同时如果redis 的内存完全由操作系统内存决定的话会非常的不稳定。 通过
free -h 发现当前操作系统只能提供给117G的内存空闲内存那意味着如果redis 内存使用情况达到操作系统内存可用峰值的时候redis 内存就会实际上满那这个时候redis 就会出现以下问题 1。如果Redis实例的内存资源有限达到峰值可能意味着无法再继续处理新的数据或请求可能导致系统性能下降甚至崩溃。 2。如果达到峰值的内存使用量是由于数据写入造成的那么在数据量大的情况下可能会引发写入失败或写入延迟等问题。
因此当used_memory_peak_perc达到100%时通常被认为是不良情况需要采取措施来降低内存使用量或者增加Redis实例的内存资源。这可能涉及到优化数据结构、删除部分数据、增加Redis实例的内存大小等措施。
然后导致redis 淘汰机制进行淘汰key 性能下降崩溃写入延迟严重影响服务。 当redis 部署和其他进程部署在同一个机器下的时候这种方式就非常危险那怎么解决这个问题呢 通过设置maxmemory,给redis 一个固定的redis 最大内存上限。 maxmemory 设置 redis 可用内存的上限。 如果 Redis 没有设置 maxmemory 参数在 64bit 系统下那么它将使用默认值通常为 0 或无限制。在 32bit 系统下maxmemory 隐式不能超过 3GB。
127.0.0.1:6379 CONFIG GET maxmemory
1) maxmemory
2) 0
127.0.0.1:6379 CONFIG SET maxmemory 100MB
OK
127.0.0.1:6379 CONFIG GET maxmemory
1) maxmemory
2) 104857600另一种方法是修改配置文件 redis.conf
maxmemory 100mb如果可用内存达到上限会发生什么 redis 将试着根据配置的缓存策略去移除部分数据
当数据删不掉时客户端在写数据时服务端会响应错误信息
但是不会影响客户端读取数据
当达到maxmemory 时请设置最合适的淘汰机制去淘汰key以降低对服务的影响。