서론
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 |