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) ... }) }
http 문서가 여러 번 언급되었습니다:
클라이언트는 완료되면 응답 본문을 닫아야 합니다.
문서의 예는 다음과 같습니다.
으아악이렇게 하지 않으면 본문이 영원히 메모리에 남아 있기 때문에 누수가 발생합니다.
위 내용은 http 게시 요청으로 인해 이동 중에 메모리 사용량이 높아지는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!