首頁  >  問答  >  主體

linux - redis連接池應用在一萬並發下時連接數只有2?

#如圖所示,我用golang的redigo函式庫寫了一個redis連線池,用ab測試模擬一萬並發讀操作,但是redis無論怎麼刷新info,連線數一直是2,最多也只顯示了4,但是使用寫入操作有六十多的連線數,同時netstat-ano顯示確實有大量TIME_WAIT狀態的TCP連線發生在遠端127.0.0.1:6379上,請問這是什麼原因? (redis配置裡面最大連線數為10000)

(請無視右邊的netstat窗口,那隻是我截圖的時候沒截好,其實我自己find過濾了一下確實有大量TIME_WAIT狀態的TCP連接發生在遠程127.0.0.1:6379上)

PS:另外還有一個問題就是ab測試程式的-c參數為什麼最大隻能一萬啊,我輸入十萬直接顯示了幫助文件。 。 。

仅有的幸福仅有的幸福2733 天前956

全部回覆(1)我來回復

  • phpcn_u1582

    phpcn_u15822017-05-16 13:20:32

    嫌連線池沒被佔用?

    這樣寫

    package main
    
    import "github.com/garyburd/redigo/redis"
    import (
        "flag"
        "fmt"
        "time"
    )
    
    func newPool(addr string) *redis.Pool {
        return &redis.Pool{
            MaxIdle:     30,
            IdleTimeout: 240 * time.Second,
            Dial:        func() (redis.Conn, error) { return redis.Dial("tcp", addr) },
        }
    }
    
    var (
        pool        *redis.Pool
        redisServer = flag.String("redisServer", ":6379", "")
    )
    
    func main() {
        flag.Parse()
        pool = newPool(*redisServer)
        fmt.Println(pool)
        conn := pool.Get()
        conn2 := pool.Get()
        conn3 := pool.Get()
        conn4 := pool.Get()
        conn.Do("get", "a")
        conn2.Do("get", "a")
        conn3.Do("get", "a")
        conn4.Do("get", "a")
        //这里使劲加connX,就能看到效果了
        //defer conn.Close()
        //defer conn2.Close()
        //defer conn3.Close()
        //defer conn4.Close()
    
        time.Sleep(100 * time.Second)
    }
    

    回覆
    0
  • 取消回覆