2013-08-25 29 views
18

當我嘗試設置密鑰時,出現「OOM command not allowed」, maxmemory設置爲500M,maxmemory-policy「volatile-lru」,我爲發送給redis的每個密鑰設置TTL。如何在Redis中調試錯誤「使用內存時不允許使用OOM命令>'maxmemory'」?

INFO命令返回:used_memory_human:809.22M

  1. 如果maxmemory設置爲500M,我怎麼會達到809M?
  2. INFO命令不顯示任何密鑰空間,它怎麼可能?
  3. KEYS *返回「(空列表或設置)」,我試圖改變分貝數,仍然沒有找到鑰匙。

這裏是信息命令輸出:

redis-cli -p 6380 
redis 127.0.0.1:6380> info 
# Server 
redis_version:2.6.4 
redis_git_sha1:00000000 
redis_git_dirty:0 
redis_mode:standalone 
os:Linux 2.6.32-358.14.1.el6.x86_64 x86_64 
arch_bits:64 
multiplexing_api:epoll 
gcc_version:4.4.7 
process_id:28291 
run_id:229a2ee688bdbf677eaed24620102e7060725350 
tcp_port:6380 
uptime_in_seconds:1492488 
uptime_in_days:17 
lru_clock:1429357 

# Clients 
connected_clients:1 
client_longest_output_list:0 
client_biggest_input_buf:0 
blocked_clients:0 

# Memory 
used_memory:848529904 
used_memory_human:809.22M 
used_memory_rss:863551488 
used_memory_peak:848529192 
used_memory_peak_human:809.22M 
used_memory_lua:31744 
mem_fragmentation_ratio:1.02 
mem_allocator:jemalloc-3.0.0 

# Persistence 
loading:0 
rdb_changes_since_last_save:0 
rdb_bgsave_in_progress:0 
rdb_last_save_time:1375949883 
rdb_last_bgsave_status:ok 
rdb_last_bgsave_time_sec:-1 
rdb_current_bgsave_time_sec:-1 
aof_enabled:0 
aof_rewrite_in_progress:0 
aof_rewrite_scheduled:0 
aof_last_rewrite_time_sec:-1 
aof_current_rewrite_time_sec:-1 
aof_last_bgrewrite_status:ok 

# Stats 
total_connections_received:3 
total_commands_processed:8 
instantaneous_ops_per_sec:0 
rejected_connections:0 
expired_keys:0 
evicted_keys:0 
keyspace_hits:0 
keyspace_misses:0 
pubsub_channels:0 
pubsub_patterns:0 
latest_fork_usec:0 

# Replication 
role:master 
connected_slaves:0 

# CPU 
used_cpu_sys:18577.25 
used_cpu_user:1376055.38 
used_cpu_sys_children:0.00 
used_cpu_user_children:0.00 

# Keyspace 
redis 127.0.0.1:6380> 
+0

這個答案對我非常有用:http://stackoverflow.com/a/22511091/1972282 –

回答

8

有沒有機會改變數據庫的數量?如果使用非常大的數字,那麼初始內存使用率可能很高

+0

是的,數據庫的數量被設置爲一個很高的數字,在返回到默認數據庫值後,內存被釋放,錯誤消失,我回到了正軌,非常感謝! – Ranch

+0

你是什麼意思'數據庫數量'? Redis只有1個數據庫。除非你在談論另一個實例,否則你不能擁有更多的東西。 – Chloe

+0

@chloe:查看'SELECT'命令 - https://redis.io/commands/SELECT –

0

內存在的配置控制。因此,你的實例有限,就像它說的那樣。您可以查看您的redis.conf或CLI工具問題「config get maxmemory」以獲取限制。

如果你管理這個Redis實例,你需要諮詢和調整配置文件。通常在/etc/redis.conf或/etc/redis/redis.conf中查找。

如果您使用的是Redis提供程序,則需要與他們一起討論提高限制。

+0

謝謝,但這並沒有回答我的任何問題。 – Ranch

9

如果maxmemory限制已被非易失性密鑰使用,則Redis的maxmemory volatile-lru策略可能無法釋放足夠的內存。

0

在我們的案例中,maxmemory被設置爲一個很高的數額,然後在數據已經存儲之後,團隊中有人將其更改爲更低的數量。

0

對於這樣的問題,考慮在redis.conf文件中增加maxmemory。 它幫助了我。

像maxmemory爲21000000對我來說,然後我把它改爲31000000.希望它有幫助。

相關問題