美文网首页我爱编程
第7章 Redis的噩梦:阻塞

第7章 Redis的噩梦:阻塞

作者: leon4ever | 来源:发表于2018-05-25 17:28 被阅读42次

    Redis的单线程架构决定了其不能允许阻塞。

    1. 发现阻塞

    线上应用最先感知到阻塞,客户端会抛出异常,应用方应当收集异常。并保存异常的信息(哪个Redis节点,ip, port等)
    借助Redis监控系统,如CacheCloud

    2. 内在原因

    2.1 API或数据结构使用不合理

    避免在大对象上执行算法复杂度超过O(n)的命令。

    1. 发现慢查询:慢查询统计功能, slowlog get {n}
    2. 发现大对象: bigkeys,统计历史扫描过的最大对象

    2.2 CPU饱和

    Redis把单核CPU使用率跑到接近100%
    比如过度使用ziplist压缩编码

    2.3 持久化阻塞

    持久化引起的阻塞操作主要有:fork阻塞,AOF刷盘阻塞,HugePage写操作阻塞

    3. 外在原因

    3.1 CPU竞争

    1. 进程竞争
    2. 绑定CPU(不适合开启持久化或参与复制的主节点,因为子进程会与父进程共享一个CPU)

    3.2 内存交换

    1. 保证机器有充足的可用内存
    2. 确保所有Redis实例设置最大可用内存
    3. 降低系统使用swap优先级

    3.3 网络问题

    1. 连接拒绝:网络闪断,超过最大连接,连接溢出(进程限制打开文件数,backlog队列溢出)
    2. 网络延迟:与容灾性相反
    3. 网卡软中断

    相关文章

      网友评论

        本文标题:第7章 Redis的噩梦:阻塞

        本文链接:https://www.haomeiwen.com/subject/jxyujftx.html