单调增加redis服务器的内存使用量

时间:2012-06-20 08:23:52

标签: memory-leaks redis

我为redis创建了一个简单的基准代码,如下面的伪代码。

for 10~100 redis sessions:
  for n time:
    key = some_random_string(key_size) # about 100 byte
    data = some_random_string(data_size) # about 100k~1m
    session.command("SET %s %s", key, data)
    session.command("GET %s", key)
    session.command("DEL %s", key)

当基准程序启动时,redis-server进程的内存使用量会单调递增,直到达到物理内存绑定(8gb)并在会话结束时释放。由于密钥的并发数量仅限于会话计数,因此数据集的峰值大小不应该那么大。

这是故意的行为吗?还是我误用了它?

1 个答案:

答案 0 :(得分:0)

假设最大值为1 MB,则每个连接最多3 MB:输入缓冲区(SET)为1,Redis中存储的值为1,输出缓冲区(GET)为1。输入和输出缓冲区连接到连接。您可以检查INFO命令返回的client_biggest_input_buf。

注意:Redis并非真正用于存储大型字符串对象。

也就是说,使用简短的C程序,Redis 2.5.11和270个连接,我无法重现您描述的行为。

您确定没有同时运行的MONITOR命令,导致Redis累积所有流量的SLOWLOG配置,或者网络链接无法处理流量的从属实例?