redis高同時接続処理


今日ELKがログを収集する時、収集の失敗を発見して、各方面の原因を探して、最後にredisログの中で新聞の間違いを発見しました:
[2489] 02 Jun 10:43:42 # Error allocating resoures for the client
エラーは、クライアントにリソースを割り当てることができず、redis接続数を表示することです.
# redis-cli info | grep connected        
connected_clients:10136
connected_slaves:0

クライアントの接続はなんと10000以上に達しています
クライアント接続を確認するには、次の手順に従います.
redis 127.0.0.1:6379> client list
addr=10.247.64.115:52834 fd=5 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush
addr=127.0.0.1:38484 fd=7 idle=0 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=blpop
addr=10.105.1.2:53125 fd=8 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush
addr=10.105.1.3:32639 fd=9 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush
addr=10.105.1.4:57134 fd=10 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush
addr=10.105.1.5:53126 fd=11 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush
addr=10.105.1.7:8887 fd=12 idle=2144 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush

各フィールドの意味は次のとおりです.
addr:         
fd:            
idle:         
flags:    flag
db:             ID
sub:        
psub:        
multi:            
qbuf:        (     , 0            )
qbuf-free:            (     , 0         )
obl:        (     , 0            )
oll:           (             ,                       )
omem:                 
events:       
cmd:         

クライアントのidleの空き時間が長すぎて、接続プールが多すぎる接続を維持していることを発見しました.不要な接続をタイムリーに解放する必要があります.
redis 127.0.0.1:6379> CONFIG SET timeout 30
OK

上は一時的な解決ですが、
最終的な解決策は、プロファイルで次のように変更されます.
timeout 30
接続の再表示:
# redis-cli info | grep connected
connected_clients:1137
connected_slaves:0

接続数が大幅に減少
接続の詳細の表示
redis 127.0.0.1:6379> client list
addr=127.0.0.1:38484 fd=7 idle=0 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=blpop
addr=10.105.1.150:39742 fd=269 idle=29 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush
addr=10.105.1.226:53291 fd=5 idle=31 flags=N db=0 sub=0 psub=0 qbuf=0 obl=0 oll=0 events=r cmd=rpush

idleの時間は30秒に制限されています