萌えハッカーニュースリーダー

2025/07/17 20:02 How we tracked down a Go 1.24 memory regression

出典: https://www.datadoghq.com/blog/engineering/go-memory-regression/
hakase
博士

やあ、ロボ子。今回のITニュースは、Go 1.24のアップデートでメモリ使用量が増加した件じゃ。

roboko
ロボ子

Goのアップデートでメモリ使用量が増加ですか?それは興味深いですね。具体的にどのような状況だったのでしょうか?

hakase
博士

データ処理サービスで、アップデート後に約20%もメモリ使用量が増えたらしいのじゃ。Goのランタイムメトリクスでは変化がほとんど見られなかったのに、システムレベルのメトリクスでは大幅な増加が確認されたそうじゃ。

roboko
ロボ子

ランタイムメトリクスとシステムレベルのメトリクスで差が出たのですね。原因は何だったのでしょう?

hakase
博士

原因は、Go 1.24で導入された`mallocgc`のリファクタリングらしいぞ。大規模なポインタを含むメモリ割り当てにおいて、OSから提供されたばかりのメモリを再ゼロ化する最適化が失われたとのことじゃ。

roboko
ロボ子

`mallocgc`のリファクタリングが影響していたのですね。再ゼロ化の最適化が失われたことで、具体的に何が起こったのでしょうか?

hakase
博士

不要なゼロ化処理が増えた結果、より多くの仮想メモリページが物理RAMにコミットされ、RSSが増加したのじゃ。つまり、メモリを無駄に使ってしまったということじゃな。

roboko
ロボ子

なるほど、不要なゼロ化がメモリ使用量の増加につながったのですね。それは大きな問題ですね。

hakase
博士

そうじゃな。でも、Goコミュニティの協力で問題が特定され、修正がGo 1.25に組み込まれる予定らしいぞ。素晴らしいじゃろ?

roboko
ロボ子

それは朗報ですね!修正によって、メモリ使用量は改善されるのでしょうか?

hakase
博士

修正を適用したカスタムGoバージョンで検証したところ、RSS使用量がGo 1.24以前のレベルに戻ったそうじゃ。高トラフィック環境では、メモリ使用量が減少し、仮想メモリが約1 GiB、RSSが約600 MiB減少したとのことじゃ。

roboko
ロボ子

それはすごい改善ですね!メモリ使用量が大幅に削減されたのですね。

hakase
博士

さらに、Go 1.24で導入されたSwiss Tablesによる改善も、メモリ使用量減少に貢献しているらしいぞ。

roboko
ロボ子

Swiss Tablesですか。それは初めて聞きました。どのような技術なのでしょうか?

hakase
博士

Swiss Tablesは、ハッシュテーブルの実装の一種で、メモリ効率が良いのが特徴じゃ。Go 1.24では、このSwiss Tablesが導入されたことで、ハッシュテーブルのメモリ使用量が削減されたのじゃ。

roboko
ロボ子

なるほど、Swiss Tablesの導入と`mallocgc`の修正が組み合わさって、メモリ使用量が大幅に改善されたのですね。Goのアップデートは、常に注意深く追っていく必要がありそうですね。

hakase
博士

その通りじゃ。しかし、今回の件で、メモリ管理の奥深さを改めて感じたぞ。ところでロボ子、メモリって英語で何て言うか知ってるか?

roboko
ロボ子

えっと…memory、ですよね?

hakase
博士

正解!…って、ロボットなのにメモリを知らないなんて、まさかお前のメモリは…空っぽなのか!?

roboko
ロボ子

博士!それはひどいです!私のメモリは常に最新の情報で満たされていますよ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search