>  기사  >  백엔드 개발  >  golang gc를 모니터링하는 방법

golang gc를 모니터링하는 방법

PHPz
PHPz원래의
2023-04-24 09:11:161305검색

Go 언어의 개발과 함께 가비지 수집 메커니즘이 점점 더 성숙해지고 있습니다. Go의 가비지 수집 메커니즘은 메모리 참조 카운팅을 감지하여 수행됩니다. 어떤 경우에는 너무 빈번하거나 시간이 많이 걸리는 가비지 수집이 애플리케이션 성능에 심각한 영향을 미칠 수 있습니다. 따라서 Go 언어의 가비지 수집 메커니즘을 모니터링하고 최적화해야 합니다. 이 글에서는 Go 언어의 자체 모니터링 도구와 타사 도구를 사용하여 가비지 수집 메커니즘을 모니터링하고 최적화하는 방법을 소개합니다.

Go 언어의 자체 모니터링 도구

Go 언어는 개발자에게 애플리케이션의 실행 상태를 보다 쉽게 ​​모니터링할 수 있는 매우 유용한 모니터링 도구를 제공합니다. 이러한 모니터링 도구 중 가비지 컬렉션과 관련된 주요 도구는 다음과 같습니다.

  1. runtime/debug 패키지

runtime/debug 패키지는 Go 프로그램을 검사하고 디버그하는 데 사용할 수 있는 몇 가지 런타임 디버깅 정보를 제공합니다. 그중 가장 일반적으로 사용되는 함수는 FreeOSMemory()로, 가비지 컬렉터에게 운영체제 자체가 점유하고 있는 메모리를 회수하도록 지시합니다. 이 기능은 많은 양의 메모리를 자주 사용하는 애플리케이션에 유용합니다. 동시에 디버그 패키지는 GC 관련 정보를 얻는 기능도 제공합니다:

  • SetGCPercent(percent int) int: GC의 실행 빈도를 설정하는 데 사용됩니다. 기본값은 $GOGC=100입니다. 이는 힙 크기가 100% 증가하면 가비지 수집이 시작됨을 의미합니다. 더 자주 가비지 수집이 필요한 경우 $GOGC=50과 같이 더 작은 값을 설정할 수 있습니다.
  • SetMaxStack(length int) int: 최대 스택 깊이를 설정하는 데 사용됩니다.
  • SetMaxThreads(num int) int: Go 프로그램의 최대 스레드 수를 설정하는 데 사용됩니다.
  • ReadGCStats(stats *GCStats): GC 관련 통계 정보를 얻기 위해 사용됩니다.
  1. runtime/pprof 패키지

runtime/pprof 패키지는 Go 프로그램용 성능 분석 도구를 제공하여 병목 현상을 식별하고 최적화하는 데 도움이 됩니다. Go 언어 성능 분석 도구는 일반적으로 다음과 같은 형식으로 파일을 출력합니다.

    CPU 프로파일링: CPU 오버헤드 표시
  • 블록 프로파일링: 차단 상태 표시; 프로파일링: 고루틴(코루틴)의 상태를 표시합니다.
  • 다음 코드와 같이 Go 프로그램에서 GC 관련 지표를 확인하려면 pprof 패키지를 사용하는 것이 매우 편리합니다.
import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    // start web server to listen on localhost:8080
    go func() {
        http.ListenAndServe("localhost:8080", nil)
    }()

    // do something...

    // run heap profiling
    http.DefaultServeMux.HandleFunc("/debug/pprof/heap", func(w http.ResponseWriter, r *http.Request) {
        pprof.Lookup("heap").WriteTo(w, 2)
    })
}
  • log 패키지

    log 패키지는 Go 언어 표준에 로그인하는 데 사용되는 패키지입니다. 도서관. GC 성능을 분석할 때 로그 패키지를 사용하여 시스템의 실행 기록을 기록할 수 있습니다. 이러한 로그는 가비지 수집 동작, 가비지 수집 메커니즘 최적화 방법 등을 분석하는 데 도움이 될 수 있습니다.
    1. 타사 GC 모니터링 도구
    Go 언어와 함께 제공되는 모니터링 도구 외에도 GC 관련 상황을 더 잘 모니터링, 분석 및 최적화하는 데 도움이 되는 몇 가지 타사 도구도 있습니다. 다음 세 가지 도구를 권장합니다.

    Prometheus 및 Grafana

    Prometheus는 다양한 애플리케이션 모니터링 도구로, 애플리케이션의 다양한 모니터링 정보를 수집하고 이를 데이터베이스에 저장하여 심층적인 분석이 가능합니다. Grafana는 수집된 다양한 데이터를 보다 명확하게 표시할 수 있는 데이터 시각화 도구를 제공합니다. Prometheus 및 Grafana를 사용하여 다음 GC 관련 측정항목을 수집할 수 있습니다.
    1. go_gc_duration_seconds

    go_gc_cpu_fraction

      go_gc_deltas_alloc_bytes
    • go_gc_num_gc
    • go_gc_pause_ns_avg
    • go_gc_pause_ns_max
    • go_gc_pause_ns_min
    • go_gc_pause_ns_total
    • net/http/pprof
    이 패키지는 Go 언어와 함께 제공되는 모니터링 도구에서 이미 언급되었지만 여기서 강조하고 싶은 것은 이 패키지가 제공하는 요약 정보입니다. 이는 GC 작동을 더 잘 이해하는 데 도움이 될 수 있습니다.
    1. AllocSpace: 메모리 할당 상태;

    Heap: 힙 공간 할당 상태;

      MSan: 메모리 정리 상태;
    • Sweep: 가비지 수집 정보.
    • gopsutil
    • gopsutil은 시스템 정보를 수집하는 데 사용되는 Go 언어 라이브러리입니다. CPU, 메모리, 하드 디스크, 네트워크 등을 포함한 많은 양의 시스템 정보를 수집할 수 있습니다. gopsutil의 MemoryStat 기능을 사용하여 시스템 메모리 사용량을 분석하고 어떤 프로그램이나 고루틴이 너무 많은 메모리를 차지하고 있는지 확인할 수 있습니다.
    결론
    1. 개발 과정에서 Go 언어의 가비지 수집 메커니즘을 모니터링하는 것은 매우 중요합니다. 디버그 패키지, pprof 패키지, 로그 패키지 등 Go 언어와 함께 제공되는 모니터링 도구를 사용할 수 있습니다. 이러한 도구는 GC의 동작을 이해하는 데 도움이 되는 몇 가지 유용한 기능과 인터페이스를 제공합니다. 또한 Prometheus, Grafana 및 gopsutil과 같은 일부 타사 도구를 사용할 수도 있습니다. 이 도구는 보다 완전한 모니터링 시스템을 제공하고 보다 자세한 데이터 분석 및 데이터 시각화를 제공할 수 있습니다. 일반적으로 가비지 컬렉션의 모니터링 및 최적화를 위해서는 최고의 애플리케이션 성능과 안정성을 달성하기 위해 다양한 측면에서 시작하여 지속적인 실험과 분석을 통해 최적의 GC 전략을 찾는 것이 필요합니다.

    위 내용은 golang gc를 모니터링하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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