メインコンテンツまでスキップ

Go Extend アプリでのメモリ不足(OOM)エラーのトラブルシューティング

Last updated on February 4, 2026

注釈:本資料はAI技術を用いて翻訳されています。

概要

この記事では、効率的なメモリ管理のベストプラクティスと、[pprof](https://pkg.go.dev/net/http/pprof) を使用してメモリおよび CPU プロファイリングプロセスを効率化する手順を説明します。

メモリ管理のベストプラクティス

Go におけるメモリリークは、メモリの不適切な使用によって発生する可能性があります。効率的なメモリ管理と適切なリソースクリーンアップのために、以下のベストプラクティスを推奨します。

  1. グローバル変数を避ける。
  2. defer ステートメントを使用する。
  3. チャネルを適切にクローズする。
  4. Goroutines を正しく処理する。
  5. メモリ使用量を監視する。
  6. コンテキストを使用して Goroutines を管理する。

メモリおよび CPU プロファイリングに pprof を使用する

Go では、最も一般的に使用されるプロファイリングは pprof と runtime パッケージです。Go アプリケーションでメモリおよび CPU プロファイリングに pprof を使用することは、特に Kubernetes 環境内で作業する際に、メモリ不足 (OOM) 問題の特定と解決に大きく役立ちます。

pprof のインストール

この pprof パッケージは、Extend の Go アプリケーションの main.go ファイルにデフォルトで実装されています。

import (
_ "net/http/pprof"
"runtime"
...
)

func main() {
go func () {
runtime.SetBlockProfileRate(1)
runtime.SetMutexProfileFraction(10)
}()

logrus.Infof("starting app server..")

// The rest of the program's logic
}

その後、Web ブラウザで http://localhost:8080/debug/pprof/ の UI を確認できます。

メモリプロファイリング

メモリプロファイリングは、Go プログラムのメモリ消費を理解し、最適化するのに役立ちます。

以下のコマンドを使用してメモリプロファイルを生成します。

go tool pprof "http://localhost:8080/debug/pprof/heap?seconds=30"

または

go tool pprof -png http://localhost:8080/debug/pprof/heap > heap.png

heap.png ファイルには、アプリケーションの inuse_space プロファイリングのノードグラフが表示されます。

CPU プロファイリング

CPU プロファイリングは主に実行時間の観点からパフォーマンスのボトルネックを特定することに焦点を当てており、コードを最適化することでメモリ使用量の管理に間接的に役立ちます。

以下のコマンドを使用して CPU プロファイルを生成します。

go tool pprof "http://localhost:8080/debug/pprof/profile?seconds=30"

または

   go tool pprof -png http://localhost:8080/debug/pprof/profile > profile.png

profile.png ファイルには、アプリケーションの CPU プロファイリングのノードグラフが表示されます。