linux - Wenn der Redis-Verbindungspool mit weniger als 10.000 Parallelität angewendet wird, beträgt die Anzahl der Verbindungen nur 2?
仅有的幸福
仅有的幸福 2017-05-16 13:18:32
0
1
1007

Wie im Bild gezeigt, habe ich mit der Redigo-Bibliothek von Golang einen Redis-Verbindungspool geschrieben und mithilfe von AB-Tests 10.000 gleichzeitige Lesevorgänge simuliert. Unabhängig davon, wie Redis die Informationen aktualisiert, beträgt die Anzahl der Verbindungen jedoch immer 2 und nur 4 Es werden jedoch höchstens mehr als 60 Verbindungen angezeigt, die Schreibvorgänge verwenden, und netstat-ano zeigt, dass es tatsächlich eine große Anzahl von TCP-Verbindungen im TIME_WAIT-Status auf der Fernbedienung 127.0.0.1:6379 gibt ? (Die maximale Anzahl von Verbindungen in der Redis-Konfiguration beträgt 10.000)

(Bitte ignorieren Sie das Netstat-Fenster auf der rechten Seite, es lag nur daran, dass ich den Screenshot nicht richtig gemacht habe. Tatsächlich habe ich ihn selbst gefunden und gefiltert und es gab tatsächlich eine große Anzahl von TCP-Verbindungen im Status TIME_WAIT auf der Fernbedienung 127.0.0.1:6379)

PS: Eine andere Frage ist, warum der maximale -c-Parameter des ab-Testprogramms nur 10.000 sein kann, um das Hilfedokument direkt anzuzeigen. . .

仅有的幸福
仅有的幸福

Antworte allen(1)
phpcn_u1582

嫌连接池没被占用?

这样写

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)
}
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage