Hier ist eine einfache Go http (TCP) -Verbindung TestskriptGo, tcp zu viele offene Dateien debuggen
func main() {
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, client")
}))
defer ts.Close()
var wg sync.WaitGroup
for i := 0; i < 2000; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
resp, err := http.Get(ts.URL)
if err != nil {
panic(err)
}
greeting, err := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if err != nil {
panic(err)
}
fmt.Printf("%s", i, greeting)
}(i)
}
wg.Wait()
}
Und Wenn ich das ich in Ubuntu laufen bekommen:
panic: Get http://127.0.0.1:33202: dial tcp 127.0.0.1:33202: too many open files
Weitere Beiträge sagen Sie, um sicherzustellen, Close
die Verbindung, die ich hier alles mache. Und andere sagen, die Grenze der maximalen Verbindung mit ulimit
zu erhöhen oder sudo sysctl -w fs.inotify.max_user_watches=100000
versuchen, aber immer noch nicht funktioniert.
Wie kann ich Millionen von TCP-Verbindungs-Goroutines auf einem einzigen Server ausführen? Es stürzt nur mit 2.000 Verbindungen ab.
Danke,
Dies doesn Es scheint nicht zu funktionieren. – shicky
das funktioniert nicht! – Ankita