2014-10-08 4 views
4

현재 8 기가 바이트 RAM 서버는 Redis에 5.33GB를 사용하고 있습니다 (서버의 다른 부분은 약 1.6GB를 차지하므로 서버를 재부팅 한 직후에도, 저는 이미 7GB RAM (88 %)입니다. Redis의 메모리 사용량은 Ubuntu의 OOM에 의해 결국 죽을 때까지 계속 증가하여 노드 응용 프로그램에 오류가 발생합니다.Redis는 지속적으로 많은 양의 메모리를 필요로하며 OOM에 의해 죽을 때까지 계속됩니다.

나는이 게시물의 하단에 Redis INFO 출력을 첨부했습니다. 원래는 너무 많은 키가있을 것이라고 생각했지만 Redis (http://redis.io/topics/faq)에서 1 백만 개의 키가 ~ 100MB라고 읽었습니다. 우리는 약 2 백만 (~ 200MB - 아무데도 5 기가 바이트), 그래서 이것은 아마도 문제가 될 수 없습니다.

내 질문은 : -이 메모리를 모두 소모하는 곳은 어디입니까? 키 공간은별로 중요하지 않습니다. - 지속적으로 더 많은 메모리를 사용하지 못하게하려면 어떻게해야합니까?

감사합니다.

# Server 
redis_version:2.8.6 
redis_git_sha1:00000000 
redis_git_dirty:0 
redis_build_id:f73a208b84b18824 
redis_mode:standalone 
os:Linux 3.2.0-55-virtual x86_64 
arch_bits:64 
multiplexing_api:epoll 
gcc_version:4.6.3 
process_id:1286 
run_id:6d3daee5341a549dfaca63706c40c44086198317 
tcp_port:6379 
uptime_in_seconds:1390 
uptime_in_days:0 
hz:10 
lru_clock:771223 
config_file:/etc/redis/redis.conf 

# Clients 
connected_clients:198 
client_longest_output_list:0 
client_biggest_input_buf:0 
blocked_clients:72 

# Memory 
used_memory:5720230408 
used_memory_human:5.33G 
used_memory_rss:5826732032 
used_memory_peak:5732485800 
used_memory_peak_human:5.34G 
used_memory_lua:33792 
mem_fragmentation_ratio:1.02 
mem_allocator:jemalloc-3.5.0 

# Persistence 
loading:0 
rdb_changes_since_last_save:94 
rdb_bgsave_in_progress:0 
rdb_last_save_time:1412804004 
rdb_last_bgsave_status:ok 
rdb_last_bgsave_time_sec:40 
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 
aof_last_write_status:ok 

# Stats 
total_connections_received:382 
total_commands_processed:36936 
instantaneous_ops_per_sec:0 
rejected_connections:0 
sync_full:0 
sync_partial_ok:0 
sync_partial_err:0 
expired_keys:0 
evicted_keys:0 
keyspace_hits:2421 
keyspace_misses:1 
pubsub_channels:1 
pubsub_patterns:9 
latest_fork_usec:1361869 

# Replication 
role:master 
connected_slaves:0 
master_repl_offset:0 
repl_backlog_active:0 
repl_backlog_size:1048576 
repl_backlog_first_byte_offset:0 
repl_backlog_histlen:0 

# CPU 
used_cpu_sys:15.95 
used_cpu_user:101.34 
used_cpu_sys_children:12.55 
used_cpu_user_children:146.17 

# Keyspace 
db0:keys=2082234,expires=1162351,avg_ttl=306635722644 
+4

maxmemory를 설정하여 oom killer를 피하십시오. 열쇠에 뭐가 들어 있니? 키의 수는 확실히 하나의 요소 일뿐만 아니라 값의 크기 (및 이름의 길이) / –

답변

1

응답 주셔서 감사합니다. 나는 키와 값이 모두 대략 같은 크기가 될 것이라는 잘못된 인상을 받았다. kue에서 각각 10KB 이상 저장된 일부 해시가 있었으며 수십만 개의 해시가있었습니다. 그 놈들을 제거하면 효과가있었습니다.

다시 한번 감사드립니다.