我使用Redis (2.4.2),使用INFO命令可以读取有关Redis服务器的统计信息。
有许多统计数据,包括关于使用多少内存的数据。其中一个是"used_memory_peak“,它似乎承载了Redis有史以来最大的内存容量。
我删除了一串键,我想重新设置这个属性,因为它会影响我的Munin图形的规模。
有一个CONFIG RESETSTAT命令,但它似乎不影响这个stat。
知道我如何做到这一点,而不必导出/删除/导入数据集吗?
编辑:
据@antirez本人(关于GitHub的第369期)说,这是一种有意的行为,但这个特性可以改进,以便在将来的发行版中更有用。
发布于 2012-03-02 17:25:38
配置RESETSTAT的实现非常简单:
} 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是用调试符号编译的。
# 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
这是一个黑客:在对生产实例应用此技巧之前要三思。
发布于 2013-07-25 06:57:16
清除peal内存的简单技巧::
步骤1:
/home/logproc/redis/bin/redis-cli BGREWRITEAOF
等到它重写完一个文件。
步骤2:
重新启动redis db
好了。就这样。
https://stackoverflow.com/questions/9535790
复制相似问题