zoukankan      html  css  js  c++  java
  • 转载:Redis在实践中的一些常见问题以及优化思路

    中华石杉的亿级流量电商详情页系统实战(第二版):缓存架构+高可用服务架构+微服务架构的笔记整理

    1、fork耗时导致高并发请求延时

    RDB和AOF的时候,其实会有生成RDB快照,AOF rewrite,耗费磁盘IO的过程,主进程fork子进程

    fork的时候,子进程是需要拷贝父进程的空间内存页表的,也是会耗费一定的时间的

    一般来说,如果父进程内存有1个G的数据,那么fork可能会耗费在20ms左右,如果是10G~30G,那么就会耗费20 * 10,甚至20 * 30,也就是几百毫秒的时间

    info stats中的latest_fork_usec,可以看到最近一次form的时长

    redis单机QPS一般在几万,fork可能一下子就会拖慢几万条操作的请求时长,从几毫秒变成1秒

    优化思路

    fork耗时跟redis主进程的内存有关系,一般控制redis的内存在10GB以内,slave -> master,全量复制

    2、AOF的阻塞问题

    redis将数据写入AOF缓冲区,单独开一个现场做fsync操作,每秒一次

    但是redis主线程会检查两次fsync的时间,如果距离上次fsync时间超过了2秒,那么写请求就会阻塞

    everysec,最多丢失2秒的数据

    一旦fsync超过2秒的延时,整个redis就被拖慢

    优化思路

    优化硬盘写入速度,建议采用SSD,不要用普通的机械硬盘,SSD,大幅度提升磁盘读写的速度

    3、主从复制延迟问题

    主从复制可能会超时严重,这个时候需要良好的监控和报警机制

    在info replication中,可以看到master和slave复制的offset,做一个差值就可以看到对应的延迟量

    如果延迟过多,那么就进行报警

    4、主从复制风暴问题

    如果一下子让多个slave从master去执行全量复制,一份大的rdb同时发送到多个slave,会导致网络带宽被严重占用

    如果一个master真的要挂载多个slave,那尽量用树状结构,不要用星型结构

    5、vm.overcommit_memory

    0: 检查有没有足够内存,没有的话申请内存失败
    1: 允许使用内存直到用完为止
    2: 内存地址空间不能超过swap + 50%
    

    如果是0的话,可能导致类似fork等操作执行失败,申请不到足够的内存空间

    cat /proc/sys/vm/overcommit_memory
    echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
    sysctl vm.overcommit_memory=1
    

    6、swapiness

    cat /proc/version,查看linux内核版本

    如果linux内核版本<3.5,那么swapiness设置为0,这样系统宁愿swap也不会oom killer(杀掉进程)
    如果linux内核版本>=3.5,那么swapiness设置为1,这样系统宁愿swap也不会oom killer

    保证redis不会被杀掉

    echo 0 > /proc/sys/vm/swappiness
    echo vm.swapiness=0 >> /etc/sysctl.conf
    

    7、最大打开文件句柄

    ulimit -n 10032 10032
    

    自己去上网搜一下,不同的操作系统,版本,设置的方式都不太一样

    8、tcp backlog

    cat /proc/sys/net/core/somaxconn
    echo 511 > /proc/sys/net/core/somaxconn
    
  • 相关阅读:
    LaunchScreen.storyboard 换了图片 不能更改过来 解决方案
    iOS Google 地图 集成详解
    Mac下 使用git clone 代码慢解决方案
    iOS 函数式编程
    iOS [self class] 、 [self superclass]、 [super class] 、[super superclass] 几种情况对比
    iOS 链式编程-Block 作为放回值
    iOS block的变量捕获(capture)
    iOS Block本质探究
    iOS 读写操作 处理 pthread_rwlock dispatch_barrier_async
    iOS atomic 和 nonatomic 区别
  • 原文地址:https://www.cnblogs.com/ifme/p/13915391.html
Copyright © 2011-2022 走看看