重置Redis"used_memory_peak"stat

jle*_*our 5 redis

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

有许多统计数据,包括一些关于使用多少内存的数据.一个是"used_memory_peak",它似乎拥有Redis所拥有的最大内存量.

我删除了一堆密钥,我想重置这个数据,因为它影响了我的Munin图的规模.

有一个CONFIG RESETSTAT命令,但它似乎不会影响这个特定的统计数据.

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

编辑:

根据@antirez本人(GitHub上的第369期),这是一个预期的行为,但是这个功能可以在未来的版本中更有用.

Did*_*zia 4

CONFIG 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);
Run Code Online (Sandbox Code Playgroud)

因此它不会初始化用于存储 Redis 曾经使用的最大内存量的 server.stat_peak_memory 字段。我不知道这是一个错误还是一个功能。

这是一个无需停止 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
Run Code Online (Sandbox Code Playgroud)

这是一个 hack:在生产实例上应用此技巧之前请三思。