linux - Le nombre de connexions n'est que de 2 lorsque le pool de connexions Redis est appliqué avec une concurrence de 10 000 ?
仅有的幸福
仅有的幸福 2017-05-16 13:18:32
0
1
1016

Comme le montre l'image, j'ai écrit un pool de connexions Redis à l'aide de la bibliothèque Redigo de Golang et utilisé des tests ab pour simuler 10 000 opérations de lecture simultanées. Cependant, quelle que soit la façon dont Redis actualise les informations, le nombre de connexions est toujours de 2 et seulement de 4. s'affiche au maximum. Cependant, il y a plus de 60 connexions utilisant des opérations d'écriture, et netstat-ano montre qu'il y a effectivement un grand nombre de connexions TCP dans l'état TIME_WAIT sur le 127.0.0.1:6379 distant. Quelle en est la raison. ? (Le nombre maximum de connexions dans la configuration Redis est de 10 000)

(Veuillez ignorer la fenêtre netstat à droite, c'est juste que je n'ai pas pris la capture d'écran correctement. En fait, je l'ai trouvée et filtrée moi-même et il y avait effectivement un grand nombre de connexions TCP en statut TIME_WAIT sur la télécommande. 127.0.0.1:6379)

PS : Une autre question est de savoir pourquoi le paramètre -c maximum du programme de test ab ne peut être que de 10 000. J'ai saisi 100 000 pour afficher directement le document d'aide. . .

仅有的幸福
仅有的幸福

répondre à tous(1)
phpcn_u1582

Vous pensez que le pool de connexions n'est pas occupé ?

Écris comme ça

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)
}
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal