当前位置: 首页 > 知识库问答 >
问题:

查找每个redis DB的内存消耗

司空俊雅
2023-03-14
             total       used       free     shared    buffers     cached
Mem:          3952       3656        295          0          1          9
-/+ buffers/cache:       3645        306
Swap:            0          0          0
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 DBs。每个DB由赋予redis-cli的数字ID表示,例如:

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

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

共有1个答案

符俊材
2023-03-14

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

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

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

 类似资料:
  • 基于redis和mysql的数据持久化方案 redis运行时连接数据库 cache失效时同步读mysql, 数据修改时候通过消息队列通知DB线程写mysql reids.conf增加几个配置选项 mysql_host mysql_port mysql_user mysql_pwd mysql_dbname persistence_mmap_file: 消息列队指定的mmap映射文件 write_t

  • 问题内容: 每个TCP / IP网络连接Linux内核平均消耗多少内存(在内核地址空间中)? 问题答案: 对于TCP连接,消耗的内存取决于 sk_buff的大小(Linux内核使用的内部网络结构) 连接的读写缓冲区 缓冲区的大小可以根据需要进行调整 检查这些变量 这些指定内核中所有网络连接的最大默认内存缓冲区使用量 这些指定了特定于TCP连接的缓冲存储器使用情况 指定的三个值是“最小默认最大”缓冲

  • 找到给定RDD的每个分区大小的最佳方法是什么。我正在尝试调试一个扭曲的分区问题,我尝试了以下方法: 它适用于小型RDD,但对于大型RDD,它会产生OOM错误。我的想法是,导致了这种情况的发生。但不管怎样,我只是想知道有没有更好的方法?

  • 问题内容: 我需要监视应用程序产生的线程消耗的内存量。如果贪婪的线程消耗太多内存,则想法是采取纠正措施。我已提到Java线程占用多少内存?。关于该链接的建议之一是在我尝试以下工作时使用。 我在四个线程上运行了很长时间。尽管作业不会连续地累积内存,但是所返回的值会不断增加,甚至不会下降。这意味着不会返回线程使用的堆上的实际内存量。它返回自线程启动以来在堆上为线程分配的内存总量。我的平台详细信息如下:

  • 我需要监控应用程序生成的线程所消耗的内存量。如果贪婪的线程占用了太多内存,那么我们可以采取纠正措施。我提到了我的java线程需要多少内存?。关于该链接的建议之一是在ThreadMXBean中使用getThreadAllocatedBytes 我用以下作业试验了getThreadAllocatedBytes。 我在四个线程上运行了相当长的时间。虽然作业不会连续累积内存,但getThreadAlloc

  • 我的应用程序需要大约10GB的RAM用于特定输入,而对于常规输入,大约1GB就足够了。通过对JProfiler进行更仔细的分析,可以发现(在GC之后)java的标准类使用了相当多的内存。util* :