Redis停止接受连接

时间:2018-10-09 20:03:54

标签: redis

我有一个简单的http服务,该服务由简单的Redis数据库/缓存支持。

我有一个处理大约20k req / sec的http服务,并检查传入的IP地址是否在Redis ip缓存中。 http服务正在为每个请求执行一个简单的EXISTS <ip>查询。我正在使用Redis连接池。

当Redis数据库/缓存很小时,这非常适合。当它增长到超过约3000万个ip地址密钥时,它将偶而进入不可用状态,Redis会停止接受新的TCP连接。 Redis仍在运行,Redis不会记录任何错误。我以为我的http应用程序中的连接池重击了Redis,并阻止了它的恢复。如果重新启动http服务,Redis会短暂可用,然后进入不可用状态。

我有什么办法可以诊断出这个问题并确切地了解出了什么问题?

顺便说一句,我将Redis maxconnections从默认的10k增加到了100k。

如果我打开redis-cli会话,请等待它进入此状态,然后运行info并获取:

127.0.0.1:6379> info
# Server
redis_version:4.0.11
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:1f4f378a02f33037
redis_mode:standalone
os:Linux 4.4.0-34-generic x86_64
arch_bits:64
multiplexing_api:epoll
atomicvar_api:atomic-builtin
gcc_version:5.4.0
process_id:16512
run_id:dee0869429244d6fe49d8f780111cc7dd8cd1b2c
tcp_port:6379
uptime_in_seconds:2212
uptime_in_days:0
hz:10
lru_clock:12386501
executable:/usr/share/redis/src/redis-server
config_file:/usr/share/redis-4.0.11/redis.conf

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

# Memory
used_memory:4031188608
used_memory_human:3.75G
used_memory_rss:3725819904
used_memory_rss_human:3.47G
used_memory_peak:4052135896
used_memory_peak_human:3.77G
used_memory_peak_perc:99.48%
used_memory_overhead:3109367460
used_memory_startup:6144192
used_memory_dataset:921821148
used_memory_dataset_perc:22.90%
total_system_memory:31702503424
total_system_memory_human:29.53G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:0.92
mem_allocator:jemalloc-4.0.3
active_defrag_running:0
lazyfree_pending_objects:0

0 个答案:

没有答案