ホームページ  >  記事  >  バックエンド開発  >  golang GCを監視する方法

golang GCを監視する方法

PHPz
PHPzオリジナル
2023-04-24 09:11:161300ブラウズ

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( Depth int) int: 最大スタック深さを設定するために使用されます。
  • SetMaxThreads(num int) int: Go プログラムの最大スレッド数を設定するために使用されます。
  • ReadGCStats(stats *GCStats): GC 関連の統計情報を取得するために使用されます。
  1. runtime/pprof パッケージ

runtime/pprof パッケージは、ボトルネックを特定して最適化するのに役立つ、Go プログラムのパフォーマンス分析ツールを提供します。 Go 言語のパフォーマンス分析ツールはさまざまな形式でファイルを出力できます。一般的に使用されるものは次のとおりです:

  • CPU プロファイリング: CPU オーバーヘッドを表示;
  • ヒープ プロファイリング: ヒープ領域の割り当てステータスを表示;
  • Block Profiling: ブロック状況を表示します;
  • Goroutine Profiling: Goroutine (コルーチン) のステータスを表示します。

次のコードのように、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)
    })
}
  1. log package

ログパッケージは、Go言語の標準ライブラリにログインするためのパッケージです。 GC パフォーマンスを分析する場合、ログ パッケージを使用してシステムの実行履歴を記録できます。これらのログは、ガベージ コレクションの動作やガベージ コレクション メカニズムの最適化方法などを分析するのに役立ちます。

サードパーティの GC 監視ツール

Go 言語に付属の監視ツールに加えて、GC のより適切な監視、分析、最適化に役立つサードパーティのツールもいくつかあります。 -関連の状況。次の 3 つのツールが推奨されます。

  1. Prometheus と Grafana

Prometheus は、さまざまなアプリケーションを監視するためのツールであり、さまざまな監視情報を収集して保存するのに役立ちます。データベースにより、より深い分析が可能になります。 Grafana は、収集されたさまざまなデータをより明確に表示するデータ視覚化ツールを提供します。次の GC 関連のメトリクスは、Prometheus と Grafana を使用して収集できます:

    ##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
  1. Go 言語ですがこのパッケージについては組み込み監視ツールで説明されていますが、ここで強調したいのは、このパッケージが提供する概要情報です。これは、GC の動作をより深く理解するのに役立ちます。例:

AllocSpace: メモリ割り当てステータス;
  • Heap: ヒープ領域割り当てステータス;
  • MSpan: オフヒープ メモリ割り当てステータス;
  • Scavenge: メモリ クリーニング ステータス;
  • スイープ: ガベージ コレクション情報。
gopsutil
  1. gopsutil は、システム情報を収集するために使用される Go 言語ライブラリです。 CPU、メモリ、ハードディスク、ネットワークなどの大量のシステム情報を収集できます。 gopsutil の MemoryStat 関数を使用すると、システム メモリの使用状況を分析し、どのプログラムまたは Goroutine がメモリを過剰に消費しているかを確認できます。

結論

開発プロセス中、Go 言語のガベージ コレクション メカニズムを監視することは非常に重要です。 Go 言語に付属する監視ツール (デバッグ パッケージ、pprof パッケージ、ログ パッケージなど) を使用でき、GC の動作を理解しやすくするための便利な関数とインターフェイスが提供されます。さらに、Prometheus、Grafana、gopsutil などのサードパーティ ツールを使用することもできます。これらにより、より完全な監視システムが提供され、より詳細なデータ分析とデータの視覚化が可能になります。一般に、ガベージ コレクションの監視と最適化では、アプリケーションの最高のパフォーマンスと安定性を達成するために、複数の側面から開始し、継続的な実験と分析を通じて最適な GC 戦略を見つける必要があります。

以上がgolang GCを監視する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。