>  기사  >  백엔드 개발  >  http 게시 요청으로 인해 이동 중에 메모리 사용량이 높아지는 이유는 무엇입니까?

http 게시 요청으로 인해 이동 중에 메모리 사용량이 높아지는 이유는 무엇입니까?

PHPz
PHPz앞으로
2024-02-14 15:24:08931검색

为什么 http post 请求在 go 中给我带来很高的内存使用率?

PHP 편집자 Xinyi는 Go 언어를 사용하여 http 게시 요청을 할 때 높은 메모리 사용량 문제를 발견했습니다. 이 질문은 그의 생각을 촉발시켰습니다. 왜 이런 일이 일어나는가? 연구와 분석을 통해 그는 몇 가지 가능한 이유를 찾아내고 몇 가지 해결책을 제안했습니다. 이번 글에서는 이 질문에 대해 자세히 알아보고 답변을 드리겠습니다.

질문 내용

k8s 컨테이너 내에서 실행되는 go 애플리케이션이 있습니다. 이는 나머지 API로 작동하여 요청을 수신하고 이를 Elasticsearch에 기록합니다.

내 코드는:

으아악

경로/logs 并调用 http 将数据保存到 elasticsearch 中。当我使用下面的函数打印内存使用情况时,我可以看到 alloc 不断增加,直到内存耗尽。如果我删除 http.post 호출을 수신하는 위 코드에서 메모리 사용량은 항상 1~3MB입니다. 메모리 사용량이 증가하는 이유는 무엇일까요?

var r = gin.default()
r.post("/logs", func(c *gin.context) {
        fmt.println("receive log event")
        printmemusage()
        jsondata, err := ioutil.readall(c.request.body)
        d := strings.newreader(jsondata)
        http.post(fmt.sprintf("%s/_bulk", geteshost()), "application/json", d)
        ...
    })
}


Solution

http 문서가 여러 번 언급되었습니다:

클라이언트는 완료되면 응답 본문을 닫아야 합니다.

문서의 예는 다음과 같습니다.

으아악

이렇게 하지 않으면 본문이 영원히 메모리에 남아 있기 때문에 누수가 발생합니다.

위 내용은 http 게시 요청으로 인해 이동 중에 메모리 사용량이 높아지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제