第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

去,tcp太多打開的文件調(diào)試

去,tcp太多打開的文件調(diào)試

Go
嗶嗶one 2021-11-01 17:16:53
這是一個簡單的 Go http (tcp) 連接測試腳本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()}如果我在 Ubuntu 中運行它,我會得到:panic: Get http://127.0.0.1:33202: dial tcp 127.0.0.1:33202: too many open files其他帖子說要確保Close連接,我在這里做這一切。和其他人說增加最大連接的限制ulimit或嘗試sudo sysctl -w fs.inotify.max_user_watches=100000但仍然不起作用。如何在單個服務(wù)器中運行數(shù)百萬個 tcp 連接 goroutines?它僅在 2,000 個連接時崩潰。
查看完整描述

3 回答

?
婷婷同學(xué)_

TA貢獻1844條經(jīng)驗 獲得超8個贊

Go 的 http 包默認(rèn)不指定請求超時。您應(yīng)該始終在服務(wù)中包含超時。如果客戶不關(guān)閉他們的會話怎么辦?您的進程將保持活躍的舊會話達(dá)到 ulimits。一個壞演員可能會故意打開數(shù)千個會話,對您的服務(wù)器進行 DOS 攻擊。重負(fù)載服務(wù)也應(yīng)該調(diào)整 ulimits,但會調(diào)整 backstop 的超時時間。

確保您指定超時:

http.DefaultClient.Timeout = time.Minute * 10

您可以通過監(jiān)控進程打開的文件前后驗證:

lsof -p [PID_ID]


查看完整回答
反對 回復(fù) 2021-11-01
?
搖曳的薔薇

TA貢獻1793條經(jīng)驗 獲得超6個贊

如果您想運行數(shù)百萬個打開/讀取/關(guān)閉套接字的 go 例程,那么您最好提高 ulimit,或者打開/讀取/關(guān)閉套接字并將讀取的值傳遞給 go-routine,但我會使用緩沖通道來控制您希望能夠打開多少個文件描述符。


const (

    // this is where you can specify how many maxFileDescriptors

    // you want to allow open

    maxFileDescriptors = 100

)


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

    maxChan := make(chan bool, maxFileDescriptors)

    for i := 0; i < 1000; i++ {

        maxChan <- true

        wg.Add(1)

        go func(url string, i int, maxChan chan bool, wg *sync.WaitGroup) {

            defer wg.Done()

            defer func(maxChan chan bool) { <-maxChan }(maxChan)

            resp, err := http.Get(url)

            if err != nil {

                panic(err)

            }

            greeting, err := ioutil.ReadAll(resp.Body)

            if err != nil {

                panic(err)

            }

            err = resp.Body.Close()

            if err != nil {

                panic(err)

            }

            fmt.Printf("%d: %s", i, string(greeting))

        }(ts.URL, i, maxChan, &wg)

    }

    wg.Wait()

}


查看完整回答
反對 回復(fù) 2021-11-01
  • 3 回答
  • 0 關(guān)注
  • 232 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號