2017-08-19 14 views
0

私のアプリケーションにgithub.com/garyburd/redigoを使用して、Redisの読み書きを並行して実行します。私はSingleton Patternでredigo NewRedisClient()を使用し、MAXACTIVE = 100、MAXIDLE = 100、IDLETIMEOUT = 60に設定しました。redigoプールを使用すると同時にTIME_WAITが多すぎます

アプリケーションが起動しました。私は、Redis Serverの成長にTIME_WAITが数多くあることがわかりました。以下のような:

[email protected]:/# netstat -anltp | grep TIME_WAIT | wc -l 
10466 
[email protected]:/# netstat -anltp | grep TIME_WAIT | wc -l 
11776 
[email protected]:/# netstat -anltp | grep TIME_WAIT | wc -l 
12554 
[email protected]:/# netstat -anltp | grep TIME_WAIT | wc -l 
16017 

そして私はまた、私は()をpool.Getたびにアクティブ数とアイドルのカウントを印刷する、それが示した:

ActiveCount: 1, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc420220000, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc42064e0a0, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc4202960a0, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc4206765a0, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc420296140, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc42034c0a0, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc42034c320, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc42064e280, IdleSize: 0 
ActiveCount: 3, MaxActive: 100, MaxIdle: 100, Pool: 0xc420288580, Conn: 0xc42034c3c0, IdleSize: 0 

を非常に多くのTIME_WAITがあったのはなぜ?私はいくつかの接続を漏らしましたか?

+1

Redigoには「NewRedisClient」という名前の関数はありません。コードを表示する。アプリケーションの使用が終了したら、アプリケーションは接続を閉じますか? –

答えて

1

接続が完了したら接続を返しますか?per the documentation

要求ハンドラは、ハンドラが実行され、接続をプールから接続を取得し、閉じます

func serveHome(w http.ResponseWriter, r *http.Request) { 
    conn := pool.Get() 
    defer conn.Close() 
    ... 
} 

あなたを漏らす接続につながる上記のように、プールへの接続を返しません見ている。

関連する問題