PHpullh

GO · 성능

GC 튜닝

GOGCGOMEMLIMIT 환경 변수로 가비지 컬렉터 동작을 조정합니다.

성능고급gcgogcgomemlimittuning

핵심 설명

GOGCGOMEMLIMIT 환경 변수로 가비지 컬렉터 동작을 조정합니다.

Go code

package main

import (
	"fmt"
	"runtime"
	"runtime/debug"
)

func main() {
	// 현재 GC 설정 확인
	fmt.Println("GOGC:", debug.SetGCPercent(-1))
	debug.SetGCPercent(100) // 기본값 복원

	// GC 통계
	var stats debug.GCStats
	debug.ReadGCStats(&stats)
	fmt.Printf("GC 횟수: %d\n", stats.NumGC)
	if len(stats.Pause) > 0 {
		fmt.Printf("마지막 GC 일시정지: %v\n", stats.Pause[0])
	}

	// GOMEMLIMIT 설정 (Go 1.19+)
	// 컨테이너 환경에서 메모리 제한
	debug.SetMemoryLimit(512 * 1024 * 1024) // 512MB

	// 메모리 통계
	var m runtime.MemStats
	runtime.ReadMemStats(&m)
	fmt.Printf("힙 사용: %d MB\n", m.HeapAlloc/1024/1024)
	fmt.Printf("힙 시스템: %d MB\n", m.HeapSys/1024/1024)
	fmt.Printf("GC CPU 비율: %.2f%%\n", m.GCCPUFraction*100)

	fmt.Println("\n환경 변수:")
	fmt.Println("  GOGC=200       # GC 빈도 감소 (메모리 ↑, CPU ↓)")
	fmt.Println("  GOGC=50        # GC 빈도 증가 (메모리 ↓, CPU ↑)")
	fmt.Println("  GOMEMLIMIT=512MiB  # 메모리 제한 (Go 1.19+)")
	fmt.Println("  GOGC=off GOMEMLIMIT=1GiB  # 소프트 메모리 제한만 사용")
}

학습 팁

GOMEMLIMITGOGC=off를 함께 사용하면 메모리 한도 내에서 GC를 최소화하여 처리량을 극대화합니다.

주의할 점

GOGC=off만 설정하면 메모리가 무한히 증가합니다. 반드시 GOMEMLIMIT과 함께 사용하세요.

자주 묻는 질문

GC 튜닝란 무엇인가요?

GOGC 와 GOMEMLIMIT 환경 변수로 가비지 컬렉터 동작을 조정합니다.

GC 튜닝 학습 시 주의할 점은 무엇인가요?

GOGC=off 만 설정하면 메모리가 무한히 증가합니다. 반드시 GOMEMLIMIT 과 함께 사용하세요.

Continue Learning

Go 학습을 이어가세요

총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.