[golang] runtime 패키지로 메모리 사용 추적
서론
Go 언어는 가비지 컬렉션(GC)을 통해 메모리를 자동으로 관리하지만 실제로 얼마나 많은 메모리를 사용하고 있는지 확인하는 것은 여전히 중요하다. runtime 패키지에는 메모리 사용 상태를 실시간으로 확인할 수 있는 간단한 방법을 제공한다. 이를 통해 메모리 소비량을 모니터링하거나 메모리 사용의 변화를 추적하는 데 유용하다. 이번 글에서는 runtime 패키지를 사용하여 메모리 사용량을 확인하는 방법을 다룬다.
1분 간격으로 메모리 모니터링
package main
import (
"fmt"
"runtime"
"time"
)
func main() {
var memStats runtime.MemStats
ticker := time.NewTicker(1 * time.Minute)
defer ticker.Stop()
for range ticker.C {
runtime.ReadMemStats(&memStats)
fmt.Printf("[%s]\n", time.Now().Format(time.DateTime))
fmt.Printf("TotalAlloc: %d bytes\n", memStats.TotalAlloc)
fmt.Printf("Sys: %d bytes\n", memStats.Sys)
fmt.Printf("HeapAlloc: %d bytes\n", memStats.HeapAlloc)
fmt.Printf("HeapInuse: %d bytes\n", memStats.HeapInuse)
fmt.Println("-----")
}
}
이 코드는 1분 간격으로 메모리 사용량을 출력하는 예제이다. runtime.ReadMemStats 메소드는 메모리 사용에 대한 다양한 통계를 제공하여 메모리 사용량을 실시간으로 추적할 수 있다.
필드 설명
| 필드 | 설명 |
| TotalAlloc | 힙에 할당된 메모리의 누적 크기 (객체가 해제되어도 감소하지 않음) |
| Sys | 운영 체제에서 할당된 총 메모리 크기 (물리 메모리와 가상 메모리를 모두 포함) |
| HeapAlloc | 현재 사용 중인 힙 메모리 크기 (할당된 객체와 아직 해제되지 않은 객체 포함) |
| HeapInuse | 실제 사용 중인 힙 메모리 크기 (적어도 하나의 객체가 존재하는 메모리 영역) |
추가적인 필드나 상세한 설명이 필요하다면 Go 공식 문서에서 runtime.MemStats에 대한 내용을 확인할 수 있다.
'Language > Go' 카테고리의 다른 글
| [golang] flag 패키지로 명령줄 옵션 처리하기 (0) | 2024.11.19 |
|---|---|
| [golang] Go 언어 철학에서 switch문이 살아 남은 이유 (3) | 2024.11.18 |
| [golang] 메모리 지역성을 고려한 2차원 슬라이스 순회 (0) | 2024.11.16 |
| [golang] URL 및 쿼리 파라미터 파싱과 수정하기 (0) | 2024.11.15 |
| [golang] 텍스트 이미지 생성 및 JPEG 인코딩 (0) | 2024.11.14 |