首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重置Redis "used_memory_peak“stat

重置Redis "used_memory_peak“stat
EN

Stack Overflow用户
提问于 2012-03-02 15:23:28
回答 2查看 4K关注 0票数 6

我使用Redis (2.4.2),使用INFO命令可以读取有关Redis服务器的统计信息。

有许多统计数据,包括关于使用多少内存的数据。其中一个是"used_memory_peak“,它似乎承载了Redis有史以来最大的内存容量。

我删除了一串键,我想重新设置这个属性,因为它会影响我的Munin图形的规模。

有一个CONFIG RESETSTAT命令,但它似乎不影响这个stat。

知道我如何做到这一点,而不必导出/删除/导入数据集吗?

编辑

据@antirez本人(关于GitHub的第369期)说,这是一种有意的行为,但这个特性可以改进,以便在将来的发行版中更有用。

EN

回答 2

Stack Overflow用户

发布于 2012-03-02 17:25:38

配置RESETSTAT的实现非常简单:

代码语言:javascript
运行
复制
} else if (!strcasecmp(c->argv[1]->ptr,"resetstat")) {
    if (c->argc != 2) goto badarity;
    server.stat_keyspace_hits = 0;
    server.stat_keyspace_misses = 0;
    server.stat_numcommands = 0;
    server.stat_numconnections = 0;
    server.stat_expiredkeys = 0;
    addReply(c,shared.ok);

因此,它不会初始化用于存储Redis使用的最大内存量的server.stat_peak_memory字段。我不知道它是一个bug还是一个特性。

这里有一个不需要停止Redis就可以重置值的黑客。其思想是在批处理模式下使用gdb只更改变量的值(这是静态结构的一部分)。通常,Redis是用调试符号编译的。

代码语言:javascript
运行
复制
# Here we have plenty of things in this instance
> ./redis-cli info  | grep peak
used_memory_peak:1363052184
used_memory_peak_human:1.27G

# Let's do some cleaning: everything is wiped out
# don't do this in production !!!
> ./redis-cli flushdb
OK

# Again the same values, while some memory has been freed
> ./redis-cli info  | grep peak
used_memory_peak:1363052184
used_memory_peak_human:1.27G

# Here is the magic command: reset the parameter with gdb (output and warnings to be ignored)
> gdb -batch -n -ex 'set variable server.stat_peak_memory = 0' ./redis-server `pidof redis-server`
Missing separate debuginfo for /lib64/libm.so.6
Missing separate debuginfo for /lib64/libdl.so.2
Missing separate debuginfo for /lib64/libpthread.so.0
[Thread debugging using libthread_db enabled]
[New Thread 0x41001940 (LWP 22837)]
[New Thread 0x40800940 (LWP 22836)]
Missing separate debuginfo for /lib64/libc.so.6
Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2

warning: no loadable sections found in added symbol-file system-supplied DSO at 0x7ffff51ff000
0x00002af0b5eef218 in epoll_wait () from /lib64/libc.so.6

# And now, result is different: great !
> ./redis-cli info  | grep peak
used_memory_peak:718768
used_memory_peak_human:701.92K

这是一个黑客:在对生产实例应用此技巧之前要三思。

票数 4
EN

Stack Overflow用户

发布于 2013-07-25 06:57:16

清除peal内存的简单技巧::

步骤1:

/home/logproc/redis/bin/redis-cli BGREWRITEAOF

等到它重写完一个文件。

步骤2:

重新启动redis db

好了。就这样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9535790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档