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

PHPz
풀어 주다: 2024-02-14 15:24:08
앞으로
936명이 탐색했습니다.

为什么 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으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿