목차
질문 내용
Solution
백엔드 개발 Golang http 게시 요청으로 인해 이동 중에 메모리 사용량이 높아지는 이유는 무엇입니까?

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

Feb 14, 2024 pm 03:24 PM
언어로 가다

为什么 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

모바일 IoT 개발에서 Golang 기술의 역할 모바일 IoT 개발에서 Golang 기술의 역할 May 09, 2024 pm 03:51 PM

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

golang 프레임워크의 장점은 무엇인가요? golang 프레임워크의 장점은 무엇인가요? Jun 06, 2024 am 10:26 AM

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

블록체인 IoT 시나리오에서 Golang 언어 적용 탐색 블록체인 IoT 시나리오에서 Golang 언어 적용 탐색 May 09, 2024 pm 02:48 PM

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

Go에서 패키지 종속성은 어떻게 작동하나요? Go에서 패키지 종속성은 어떻게 작동하나요? Jun 01, 2024 pm 10:40 PM

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

Go 언어의 파이프라인을 사용하여 생산자-소비자 패턴을 구현하는 방법은 무엇입니까? Go 언어의 파이프라인을 사용하여 생산자-소비자 패턴을 구현하는 방법은 무엇입니까? Jun 02, 2024 pm 03:28 PM

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

Go 언어로 파이프라인을 사용하여 병렬 작업을 만드는 방법은 무엇입니까? Go 언어로 파이프라인을 사용하여 병렬 작업을 만드는 방법은 무엇입니까? Jun 04, 2024 pm 02:46 PM

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

Go 언어에서 파이프를 사용하여 데이터를 전달하는 방법은 무엇입니까? Go 언어에서 파이프를 사용하여 데이터를 전달하는 방법은 무엇입니까? Jun 01, 2024 pm 04:15 PM

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

Go 언어와 블록체인 기술의 통합과 향후 발전 전망 Go 언어와 블록체인 기술의 통합과 향후 발전 전망 May 09, 2024 pm 01:09 PM

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

See all articles