Dưới đây là một Go http (tcp) kiểm tra kết nối kịch bản đơn giảnGo, tcp quá nhiều tập tin mở gỡ lỗi
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()
}
Và Nếu tôi chạy này trong Ubuntu tôi nhận được:
panic: Get http://127.0.0.1:33202: dial tcp 127.0.0.1:33202: too many open files
bài viết khác nói để đảm bảo kết nối Close
, mà tôi đang làm tất cả ở đây. Và những người khác nói rằng để tăng giới hạn kết nối tối đa với ulimit
hoặc thử sudo sysctl -w fs.inotify.max_user_watches=100000
nhưng vẫn không hoạt động.
Làm cách nào để chạy hàng triệu kết nối goroutin tcp trong một máy chủ? Nó chỉ bị hỏng với 2.000 kết nối.
Cảm ơn,
Điều này không dường như không hoạt động. – shicky
tính năng này không hoạt động! – Ankita