核心内容摘要
17·MOC:颠覆想象,重塑未来,一场关于创造力的思想盛宴
内存使用率在生产环境一般会有三种场景一直都很高 比如95%以上突然飙高一般和瞬时流量有关内存使用率达到100%只是某个节点飙高 内存使用率达到100%场景不一样问题的原因也可能不一样解决方案也会不一样。
具体的问题原因以及解决方案如下。
内存使用率长期处于高水位的解决办法盘点下key的使用情况清理掉无用的key看下key是否设置了合适的TTL策略避免一直存在redis中检查是否有大key大key很多的话就会占用很多内存根据业务需求设置合理的数据逐出策略主要是调整maxmemory-policy参数的值根据业务需求设置合理的过期Key主动删除的执行频率即调整hz参数的值经过上述步骤优化后内存使用率依旧较高可以考虑从硬件配置上入手加大内存。
内存使用率突然上升的解决办法
问题原因内存使用率突然升高一般和瞬时并发流量有关具体表现为短时间内大量写入新数据短时间内大量创建新连接突发访问产生大量流量超过网络带宽导致输入缓冲区和输出缓冲区积压客户端处理速度跟不上Redis的处理速度导致输出缓冲区积压。
具体解决方案Redis性能监控的入流量与写QPS一致的话也就是说流量可以承接可能是写数据太大导致这个需要升级下redis内存配置也可以清理下无效的key腾出更多的空间如果连接数突增的话首先排除链接是否泄漏正常关闭或者设置连接超时时间timeout 参数自动关闭空闲连接执行MEMORY STATS命令看下clients.normal占用的内存是否过多。
如果是的话排查业务流量突发原因或者提升带宽执行MEMORY DOCTOR命令查看big_client_buf的值。
当big_client_buf1时代表至少有一个客户端的输出缓冲区占用内存较大。
执行CLIENT LIST命令查看哪个客户端的输出缓冲区内存占用量omem较大。
排查该客户端应用是否存在性能问题。