zoukankan      html  css  js  c++  java
  • redis-阻塞

    当Redis阻塞时,Jedis客户端会跑出JedisConnectionException异常。
    内在原因:

    1. API或数据结构使用不合理。
    2. CPU饱和。
    3. 持久化相关阻塞。

    1.使用slowlog get {n} 查询慢查询。

    1)修改为为低算法度的命令。如hgetall改为hmget,禁用sort等。
    2)调整大对象。
    使用redis-cli.exe -h {ip} -p {port} --bigkeys 发现大对象

    2.

    使用redis-cli.exe -h {ip} -p {port} --stat 查看cpu占用
    使用info commandstats 分析出命令不合理的开销时间。

    3.

    1)fork阻塞,发生在RDB和AOF重写时。执行info stats 查看latest_fork_usec(表示Redis最近一次fork操作耗时)。
    2)AOF刷盘阻塞,一般每秒执行一次刷盘。硬盘压力过大时,fsync操作需要等待。查看日志或查看info persistence的aof_delayed_fsync。

    外在原因:
    1.CPU竞争。
    2.内存交换。
    3.网络问题。
    1.

    进程竞争。Redis是CPU密集型应用。其他CPU密集型服务过度消耗CPU时影响到Redis。
    绑定CPU。为了充分利用多核CPU,一台机器部署多个实例,将Redis绑定到了CPU。但是在RDB/AOF重写时,子进程重写对CPU使用率在90%以上,影响了性能。 建议开启了持久化或参与复制的主节点不绑定CPU。

    2.

    内存交换。操作系统把Redis使用的部分内存换出到了硬盘。先查Redis进程号,再根据进程号查询交换信息。

    # redis-cli -p 6379 info server |grep process_id
    process_id:4476
    # cat /proc/4476/smap |grep Swap
    Swap: 0 kb
    Swap: 4 kb
    ....
    

    3.

    网络问题。
    网络闪断。Redis连接被拒绝,如超过最大连接数。连接溢出,如进程限制,backlog队列超出。

    D:Program Files
    edisRedis-x64-3.2.100>redis-cli.exe --stat
    ------- data ------ --------------------- load -------------------- - child -
    keys       mem      clients blocked requests            connections
    1          1.72M    3       0       2691 (+0)           6
    1          1.72M    3       0       2693 (+2)           6
    1          1.72M    3       0       2695 (+2)           6
    ^C
    D:Program Files
    edisRedis-x64-3.2.100>redis-cli.exe --bigkeys
    # Scanning the entire keyspace to find biggest keys as well as
    # average sizes per key type.  You can use -i 0.1 to sleep 0.1 sec
    # per 100 SCAN commands (not usually needed).
    [00.00%] Biggest string found so far 'mykey' with 1 bytes
    -------- summary -------
    Sampled 1 keys in the keyspace!
    Total key length in bytes is 5 (avg len 5.00)
    Biggest string found 'mykey' has 1 bytes
    1 strings with 1 bytes (100.00% of keys, avg size 1.00)
    
    
  • 相关阅读:
    前后端分离实践 — 如何解决跨域问题
    bower 和 npm 的区别详细介绍
    yeoman-bower-grunt之间的关系
    软件开发环境-开发环境、测试环境、生产环境的区别
    Tomcat下配置JNDI的三种方式
    SSE
    Java动态代理
    Css之Relative
    多线程之——死锁
    JVM
  • 原文地址:https://www.cnblogs.com/thewindkee/p/12873168.html
Copyright © 2011-2022 走看看