golang http 内存泄漏的问题

2021-03-06 22:13:20 +08:00
 chenqh

代码

package main

import (
	"crypto/tls"
	"io/ioutil"
	"log"
	"net/http"
	"os"
	"path"
	"strings"
	"time"
)

func panicIfNotNil(e error) {
	if e != nil {
		panic(e)
	}
}

func loop() {
	ex, err := os.Executable()
	panicIfNotNil(err)

	ex = path.Dir(ex)
	for {
		now := time.Now()
		tr := &http.Transport{
			TLSClientConfig:   &tls.Config{InsecureSkipVerify: true},
			DisableKeepAlives: true, // 可以关闭链接
		}
		req, err := http.NewRequest("GET", "https://httpbin.org/ip", nil)
		panicIfNotNil(err)
		client := &http.Client{
			Timeout:   time.Second * 8,
			Transport: tr,
		}

		resp, err := client.Do(req)

		if resp != nil {
			bodyByteArr, err := ioutil.ReadAll(resp.Body)
			panicIfNotNil(err)

			log.Printf("status_code:%d, body:%s, cost:%v", resp.StatusCode, string(bodyByteArr), time.Since(now))
			defer resp.Body.Close()
		}
		if err != nil && strings.Index(err.Error(), "Client.Timeout exceeded while awaiting headers") > -1 {
			continue
		}
		panicIfNotNil(err)

		time.Sleep(time.Second * 3)

	}
}

func main() {
	loop()
}

一开始只有 4-m 的样子,过了两分钟就到 10M 左右了,这是为什么呀,我可能确保链接时关闭了的 求大佬指点下

3508 次点击
所在节点    Go 编程语言
21 条回复
xx6412223
2021-03-08 16:25:27 +08:00
开一夜试试。我感觉问题不大

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/759153

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX