2013-08-25 75 views
18

Tôi nhận được "lệnh OOM không được phép" khi cố gắng đặt khóa, maxmemory được đặt thành 500M với maxmemory-policy "volatile-lru", tôi đang đặt TTL cho mỗi khóa được gửi đến redis.Làm thế nào để gỡ lỗi lỗi "Lệnh OOM không được phép khi bộ nhớ được sử dụng> 'maxmemory'" trong Redis?

INFO lệnh lợi nhuận: used_memory_human:809.22M

  1. Nếu maxmemory được thiết lập để 500M, làm thế nào tôi đạt 809M?
  2. INFO lệnh không hiển thị bất kỳ Không gian chính nào, làm cách nào có thể?
  3. KEYS * trả về "(danh sách hoặc bộ trống)", tôi đã cố gắng thay đổi số db, vẫn không tìm thấy khóa nào.

Dưới đây là thông tin đầu ra lệnh:

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

Câu trả lời này rất hữu ích đối với tôi: http://stackoverflow.com/a/22511091/1972282 –

Trả lời

8

Bất kỳ cơ hội nào bạn đã thay đổi số lượng cơ sở dữ liệu? Nếu bạn sử dụng một số rất lớn thì mức sử dụng bộ nhớ ban đầu có thể cao

+0

có, số lượng cơ sở dữ liệu được đặt thành số cao, sau khi trở về giá trị cơ sở dữ liệu mặc định, bộ nhớ đã được giải phóng và lỗi biến mất, tôi quay lại theo dõi, cảm ơn rất nhiều! – Ranch

+0

Ý của bạn là 'số lượng cơ sở dữ liệu'? Redis chỉ có 1 cơ sở dữ liệu. Bạn không thể có nhiều hơn, trừ khi bạn đang nói về một trường hợp khác. – Chloe

+0

@chloe: kiểm tra lệnh 'SELECT' - https://redis.io/commands/SELECT –

0

Memory được điều khiển trong cấu hình. Vì vậy, trường hợp của bạn bị giới hạn như nó nói. Bạn có thể tìm trong tệp redis.conf của bạn hoặc từ vấn đề CLI Tool "config get maxmemory" để nhận giới hạn.

Nếu bạn quản lý phiên bản Redis này, bạn sẽ cần tham khảo và điều chỉnh tệp cấu hình. Thường tìm trong /etc/redis.conf hoặc /etc/redis/redis.conf.

Nếu bạn đang sử dụng nhà cung cấp Redis, bạn sẽ cần phải nhận được với họ về việc tăng giới hạn của bạn.

+0

cảm ơn, nhưng điều này không trả lời bất kỳ câu hỏi nào của tôi. – Ranch

9

Chính sách tối đa của redis 'maxmemory volatile-lru có thể không giải phóng đủ bộ nhớ nếu giới hạn maxmemory đã được sử dụng bởi các phím không bay hơi.

0

Trong trường hợp của chúng tôi, maxmemory được đặt thành số tiền cao, sau đó một người nào đó trong nhóm thay đổi số tiền đó thành số tiền thấp hơn sau khi dữ liệu đã được lưu trữ.

0

Đối với vấn đề như vậy, hãy xem xét tăng maxmemory của bạn trong tệp redis.conf. Nó đã giúp tôi.

như maxmemory là 21000000 cho tôi sau đó tôi đã đổi thành 31000000. Hy vọng điều đó sẽ hữu ích.