【问题标题】:Finding the memory consumption of each redis DB查找每个redis DB的内存消耗
【发布时间】:2017-02-16 16:45:58
【问题描述】:

问题

我的一个 Python Redis 客户端失败,出现以下异常:

redis.exceptions.ResponseError: MISCONF Redis 被配置为保存 RDB 快照,但目前无法持久保存在磁盘上。可能修改数据集的命令被禁用。有关错误的详细信息,请查看 Redis 日志。

我检查了redis机器,好像内存不足:

free

             total       used       free     shared    buffers     cached
Mem:          3952       3656        295          0          1          9
-/+ buffers/cache:       3645        306
Swap:            0          0          0

top

top - 15:35:03 up 14:09,  1 user,  load average: 0.06, 0.17, 0.16
Tasks: 114 total,   2 running, 112 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.2 st
KiB Mem:   4046852 total,  3746772 used,   300080 free,     1668 buffers
KiB Swap:        0 total,        0 used,        0 free.    11364 cached Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 1102 root      20   0 3678836 3.485g    736 S   1.3 90.3  10:12.53 redis-server
 1332 ubuntu    20   0   41196   3096    972 S   0.0  0.1   0:00.12 zsh
  676 root      20   0   10216   2292      0 S   0.0  0.1   0:00.03 dhclient
  850 syslog    20   0  255836   2288    124 S   0.0  0.1   0:00.39 rsyslogd

我在一个 Redis 实例中使用了几十个 Redis 数据库。每个 DB 都由赋予redis-cli 的数字 id 表示,例如:

$ redis-cli -n 80
127.0.0.1:6379[80]>

我如何知道每个 DB 消耗了多少内存,以及每个 DB 中最大的键是多少?

【问题讨论】:

    标签: memory redis


    【解决方案1】:

    我如何知道每个 DB 消耗了多少内存,以及每个 DB 中最大的键是多少?

    您无法获取每个数据库的已用内存。使用INFO 命令,您只能获取 Redis 实例的全部使用内存。 Redis 记录新分配的内存大小,每次动态分配一些内存。但是,它不会为每个数据库做这样的记录。此外,它没有任何最大键的记录。

    通常,您应该使用 maxmemorymaxmemory-policy 配置您的 Redis 实例(即达到最大内存时的驱逐策略)。

    【讨论】:

      【解决方案2】:

      你可以像这样写一些 sh ​​脚本(显示每个 DB 中的元素数):

      #!/bin/bash
      max_db=501
      
      i=0
      
      while  [ $i -lt $max_db ]
      do
      echo "db_nubner: $i"
      redis-cli -n $i dbsize
      i=$((i+1))
      done
      

      示例输出:

      db_nubner: 0
      (integer) 71
      db_nubner: 1
      (integer) 0
      db_nubner: 2
      (integer) 1
      db_nubner: 3
      (integer) 1
      db_nubner: 4
      (integer) 0
      db_nubner: 5
      (integer) 1
      db_nubner: 6
      (integer) 28
      db_nubner: 7
      (integer) 1
      

      我知道我们可以拥有一个具有大键的单一数据库,但无论如何,在某些情况下,此脚本可以提供帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-21
        • 1970-01-01
        • 2013-09-23
        • 2013-01-16
        相关资源
        最近更新 更多