从昨天开始,我们的Redis服务器逐渐(每小时200MB)使用更多的内存,而密钥(330K)及其数据量(132MB redis-rdb-
tools
)则保持不变。
redis-cli info的输出显示6.89G已用内存?
redis_version:2.4.10
html" target="_blank">redis_git_sha1:00000000
redis_git_dirty:0
arch_bits:64
multiplexing_api:epoll
gcc_version:4.4.6
process_id:3437
uptime_in_seconds:296453
uptime_in_days:3
lru_clock:1905188
used_cpu_sys:8605.03
used_cpu_user:1480.46
used_cpu_sys_children:1035.93
used_cpu_user_children:3504.93
connected_clients:404
connected_slaves:0
client_longest_output_list:0
client_biggest_input_buf:0
blocked_clients:0
used_memory:7400076728
used_memory_human:6.89G
used_memory_rss:7186984960
used_memory_peak:7427443856
used_memory_peak_human:6.92G
mem_fragmentation_ratio:0.97
mem_allocator:jemalloc-2.2.5
loading:0
aof_enabled:0
changes_since_last_save:1672
bgsave_in_progress:0
last_save_time:1403172198
bgrewriteaof_in_progress:0
total_connections_received:3616
total_commands_processed:127741023
expired_keys:0
evicted_keys:0
keyspace_hits:18817574
keyspace_misses:8285349
pubsub_channels:0
pubsub_patterns:0
latest_fork_usec:1619791
vm_enabled:0
role:slave
master_host:***BLOCKED***
master_port:6379
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
db0:keys=372995,expires=372995
db6:keys=68399,expires=68399
当我们将(.net)客户端代码从BookSleeve 1.1.0.4更新到ServiceStack v3.9.71以准备升级到Redis
2.8时,问题就开始了。但是许多其他内容已更新为,并且我们的会话状态存储(也有Redis,但带有Harbor客户端)没有显示相同的症状。
Redis的所有内存都在哪里?如何解决其使用问题?
编辑:我刚刚重新启动此实例,内存返回到350M,现在又在爬。前10个最大的对象仍保持相同的大小,对于nr
1,范围从100K到25M。密钥数量已降至270K(之前为330K)。
以下是Redis中“隐藏”内存消耗的一些来源:
Marc已经提到了主机维护供从机使用的缓冲区。如果从属服务器落后于其主服务器(例如,因为它在较慢的机器上运行),则将在主服务器上消耗一些内存。
当检测到长时间运行的命令时,Redis将它们记录在SLOWLOG区域中,这会占用一些内存。您可能要使用SLOWLOG LEN命令来检查此处的记录数。
通信缓冲区也可以占用内存。据我所记得,在Redis的旧版本(2.4已经很旧了-您应该真正升级)中,它是不受限制的,这意味着如果您在某个点上传输一个大对象,则与此客户端连接相关联的通信缓冲区将会增加永不缩水。如果有许多客户偶尔处理大型物体,则可能是一种解释。如果您使用命令从Redis中检索非常大的数据(一次完成),这也可能是一种解释。例如,在Redis服务器上应用简单的KEYS *命令来存储数百万个密钥,将会消耗大量内存。
您提到您有多达25 MB的对象。您有404个客户端连接,如果每个客户端连接都需要在某个时间点访问此类对象,则会消耗10 GB的内存。
问题内容: 我的socket.io版本是socket.io@0.8.7和redis@0.7.1。我在Windows上。 在某些地方,我已经看到问题已解决。我想我正在使用最新的socket.io版本。什么是generator.setMaxListeners(),在哪里可以设置? 我正在使用redis pubsub,当我订阅redis时,它会抛出此警告。 问题答案: 有一个与此相关的已知问题。好像是几
我读了很多关于如何避免Android内存泄漏的文章,但我仍然不太确定我是否做对了。 我的应用程序由一个活动组成 问题1:这够了吗? 让我困惑的是,你可以在网上找到一个经典的“不去”的例子(http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/): 我认为,一旦创建完成, 检索上下文,将其传递给手动创建的查看
在阅读了大量有关MAT的内容后,我使用我的生产堆转储来分析内存泄漏问题。下面是泄漏报告错误: 线程org.apache.tomcat.util.threads.taskthread@0x6d8be0a30 http-bio-8443-exec-115保留总大小为3,695,816,440(89.03%)字节的局部变量。 内存累积在“'<'System class Loader'>”加载的“java
问题内容: 您如何找到Java中的内存泄漏(例如使用JHat)?我试图在JHat中加载堆转储,以进行基本了解。但是,我不明白我应该如何找到根引用(ref)或任何被称为根引用的东西。基本上,我可以说哈希表条目有几百兆字节([java.util.HashMap $ Entry或类似的东西),但是地图到处都是……使用某种方法可以搜索大型地图,还是找到大对象树的一般根? [编辑]好的,到目前为止,我已经阅
我已经在我的机器(ubuntu)中安装了Clang,以便在我的C代码中查找内存泄漏。我写了一个示例代码来检查它的工作情况,如下所示: 我在互联网上找到了一些编译选项 和 但它们都没有出现内存泄漏的迹象。 扫描构建:使用“/usr/bin/clang”进行静态分析 扫描构建:删除目录“/tmp/scan-build-2015-07-02-122717-16928-1”,因为它不包含报告 扫描构建:未
TL;dr:如何在没有随机文本的情况下将无符号32位整数转换为chars/uint8_t 好的,我愿意为此牺牲几个声誉点。我需要快速将一个4字节的无符号整数转换为数组字节,以便读取/写入/操作我自己结构的二进制文件。 这样我就可以读取一个结构,然后将其用作对象,而不是读取它,为每个更改写入它。 但是当我尝试实现一个函数时,我得到了一个泄漏。指针只是不断在函数范围之外添加值。 主要: 和输出: 在我