
GOMAXPROCS 自動調整が Go 1.25 でついに本格化 – 過去の課題と運用メリットを解説
DRANK
Go の並列実行上限を司る GOMAXPROCS。コンテナランタイムが普及するにつれ CPU クォータを無視してホスト全 CPU を使用してしまう 問題が顕在化し、開発・運用の現場では 手動設定 や 外部ライブラリ (uber‑go/automaxprocs など) に頼る状況が続いてきました。Go 1.25 ではランタイムが cgroup の CPU 帯域変更を継続監視 し、GOMAXPROCS を 自動的かつ動的 に調整する仕組みが正式採用されます。本記事では以下の3つのポイントを整理します。これまで発生していた課題と代表的ワークアラウンドGo 1.25 の新実装が内部で何を行うのか自動調整がもたらすメリットとベストプラクティス1. これまでの課題1‑1. CPU クォータと GOMAXPROCS の乖離Docker / Kubernetes などのコンテナ環境では cgroup v1/v2 により CPU 時間の上限が設定されますが、Go ランタイムは長らく ホストのvCPU 数 をそのまま GOMAXPROCS のデフォルト値に採用していました。結果としてクォータ 0.5 CPU しか与えられていない Pod でも 8 スレッド生成 → スケジューラ競合が激増CPU サイクルを奪い合い スループット低下・レイテンシ上昇 などのパフォーマンス低下を引き起こす。といったトラブルが…