http 게시 요청으로 인해 이동 중에 메모리 사용량이 높아지는 이유는 무엇입니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











높은 동시성, 효율성 및 크로스 플랫폼 특성을 갖춘 Go 언어는 모바일 사물 인터넷(IoT) 애플리케이션 개발을 위한 이상적인 선택이 되었습니다. Go의 동시성 모델은 동시에 연결된 많은 수의 IoT 장치를 처리하는 데 적합한 고루틴(경량 코루틴)을 통해 높은 수준의 동시성을 달성합니다. Go의 낮은 리소스 소비는 제한된 컴퓨팅 및 저장 공간을 갖춘 모바일 장치에서 애플리케이션을 효율적으로 실행하는 데 도움이 됩니다. 또한 Go의 크로스 플랫폼 지원을 통해 IoT 애플리케이션을 다양한 모바일 장치에 쉽게 배포할 수 있습니다. 실제 사례에서는 Go를 사용하여 BLE 온도 센서 애플리케이션을 구축하고, BLE를 통해 센서와 통신하고, 수신 데이터를 처리하여 온도 판독값을 읽고 표시하는 방법을 보여줍니다.

Golang 프레임워크의 장점 Golang은 마이크로서비스 및 분산 시스템에 특히 적합한 고성능 동시 프로그래밍 언어입니다. Golang 프레임워크는 미리 만들어진 구성 요소 및 도구 세트를 제공하여 이러한 애플리케이션을 더 쉽게 개발할 수 있도록 해줍니다. 다음은 Golang 프레임워크의 주요 장점 중 일부입니다. 1. 고성능 및 동시성: Golang 자체는 고성능 및 동시성으로 유명합니다. 코드 동시 실행을 허용하는 경량 스레딩 메커니즘인 고루틴을 사용하여 애플리케이션 처리량과 응답성을 향상시킵니다. 2. 모듈성 및 재사용성: Golang 프레임워크는 모듈성과 재사용 가능한 코드를 장려합니다. 애플리케이션을 독립된 모듈로 분리하면 코드를 쉽게 유지 관리하고 업데이트할 수 있습니다.

Go 언어는 블록체인 IoT 시나리오에서 널리 사용됩니다. 주요 이점은 스마트 계약 작성, 블록체인의 상품 흐름 규칙 및 운영 관리입니다. 자산 거래를 관리하고 자산 위치 및 상태를 추적하는 애플리케이션을 개발합니다. 효율적인 동시 오픈 소스로 대용량 데이터 처리에 적합하고 확장 및 사용자 정의가 쉽습니다.

Go 언어에서는 import 문을 통해 패키지 종속성을 관리합니다. Go 언어에는 직접 종속성과 간접 종속성의 두 가지 유형의 패키지 종속성이 있습니다. Go 모듈 시스템은 모듈화, 종속성 버전 제어, 종속성 다운로드 및 설치와 같은 작업을 포함하여 gomod 도구를 통해 패키지 종속성을 관리합니다.

생산자-소비자 모델을 사용하면 생산자는 데이터를 캐시에 저장하는 동시에 소비자는 처리를 위해 캐시에서 데이터를 추출할 수 있습니다. Go에서 파이프는 다음 패턴을 구현하는 통신 메커니즘입니다. 파이프 만들기: make(chanT), 여기서 T는 전송 데이터 유형입니다. 생산자 기능: 데이터를 파이프에 넣습니다(ch

파이프는 병렬 작업을 생성하는 데 사용할 수 있는 버퍼링되지 않은 통신 메커니즘입니다. 파이프 생성: ch:=make(chanint) 데이터 보내기: ch

Go 언어 파이프라인은 고루틴 간에 데이터를 전송하는 데 사용되며 다음 단계를 통해 사용할 수 있습니다. 파이프라인 만들기: make(chanint) 데이터 보내기: 채널<-data 데이터 수신: data:=<-channel 버퍼 파이프 만들기: make(chanint,10 ) (버퍼 크기는 10) 실제 사례: 정수 제곱의 합을 동시에 계산하고 파이프를 사용하여 결과를 고루틴으로 전송합니다.

Go 언어는 고성능, 확장성 및 사용 용이성으로 인해 블록체인 개발을 위한 첫 번째 선택이 되었습니다. 이는 주요 Hyperledger Fabric 구성 요소(체인코드, 합의 메커니즘)를 구현하는 데 사용되며 향후 분산형 애플리케이션, IoT 및 상호 운용성 솔루션의 개발을 주도할 것입니다.
