cari

Rumah  >  Soal Jawab  >  teks badan

linux - Bilangan sambungan hanya 2 apabila kumpulan sambungan redis digunakan di bawah 10,000 concurrency?

Seperti yang ditunjukkan dalam gambar, saya menulis kumpulan sambungan redis menggunakan pustaka redigo golang, dan menggunakan ujian ab untuk mensimulasikan 10,000 operasi baca serentak Walau bagaimanapun, tidak kira bagaimana redis menyegarkan maklumat, bilangan sambungan sentiasa 2, dan hanya 4 dipaparkan paling banyak. Walau bagaimanapun, terdapat lebih daripada 60 sambungan menggunakan operasi tulis, dan netstat-ano menunjukkan bahawa memang terdapat sejumlah besar sambungan TCP dalam status TIME_WAIT pada alat kawalan jauh 127.0.0.1:6379 ? (Bilangan maksimum sambungan dalam konfigurasi redis ialah 10,000)

(Sila abaikan tetingkap netstat di sebelah kanan, cuma saya tidak mengambil tangkapan skrin dengan betul. Malah, saya menjumpai dan menapisnya sendiri dan memang terdapat sejumlah besar sambungan TCP dalam status TIME_WAIT berlaku pada alat kawalan jauh 127.0.0.1:6379)

PS: Soalan lain ialah mengapa parameter maksimum -c program ujian ab hanya boleh 10,000 saya masukkan 100,000 untuk terus memaparkan dokumen bantuan. . .

仅有的幸福仅有的幸福2747 hari yang lalu976

membalas semua(1)saya akan balas

  • phpcn_u1582

    phpcn_u15822017-05-16 13:20:32

    Fikirkan kolam sambungan tidak diduduki?

    Tulis begini

    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)
    }
    

    balas
    0
  • Batalbalas