"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go의 `pprof`와 Docker 통계가 다른 메모리 사용량을 보고하는 이유는 무엇입니까?

Go의 `pprof`와 Docker 통계가 다른 메모리 사용량을 보고하는 이유는 무엇입니까?

2024년 12월 22일에 게시됨
검색:617

Why Do Go\'s `pprof` and Docker Stats Report Different Memory Usage?

Go 도구 Pprof와 Docker 통계 간의 메모리 사용량 불일치

Go 1.11을 사용하는 동안 Go에서 보고한 메모리 사용량에 불일치가 발생할 수 있습니다. 도구 pprof(runtime.MemStats.sys) 및 docker 통계. Docker 통계는 cgroup을 사용하여 페이지 캐시 및 RES(Resident Set Size)를 포함한 메모리 사용량 정보를 얻습니다. 반면 pprof는 메모리 사용량에 대한 퍼지 값을 표시하므로 둘을 직접 비교하기가 어렵습니다.

cgroup 메모리 사용량 이해

cgroup은 방법을 제공합니다. 컨테이너 내의 리소스 사용량을 제한하고 추적합니다. cgroups의 Usage_in_bytes 지표에는 프로세스에서 사용하는 메모리와 캐시된 메모리가 모두 포함됩니다. 컨테이너가 호스트 시스템에서 파일을 읽는 경우 커널이 캐시한 메모리도 Usage_in_bytes로 계산됩니다.

Docker에서 메모리 회수

컨테이너가 해당 메모리에 도달하면 메모리 제한이 있는 경우 Docker는 사용되지 않은 메모리를 회수하려고 시도합니다. 이는 모든 메모리가 사용되었을 때 발생하는 OOM 오류와는 다릅니다.

메모리 사용량을 제한하는 방법

Docker 컨테이너의 메모리 사용량을 제어하려면 docker run 명령이나 docker-compose.yml 파일에서 mem_limit를 사용하여 메모리 제한을 지정할 수 있습니다. 매개변수.

결론

pprof와 docker 통계 간의 메모리 사용량 보고 불일치는 메모리 사용량을 측정하는 방식이 다르기 때문에 발생합니다. docker stats에서 사용되는 cgroups는 계산에 파일 캐시 메모리를 포함하는 반면, pprof는 캐시를 고려하지 않고 퍼지 값을 제공합니다. cgroup을 통해 메모리 제한을 관리하면 컨테이너에서 제어할 수 없는 메모리 증가를 방지할 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3