ホームページ > バックエンド開発 > Golang > 接続が急増した後、1.3 でサーバー メモリがシステムに戻されないのはなぜですか?

接続が急増した後、1.3 でサーバー メモリがシステムに戻されないのはなぜですか?

Susan Sarandon
リリース: 2024-12-30 06:38:09
オリジナル
281 人が閲覧しました

Why Doesn't Go 1.3 Release Server Memory Back to the System After a Connection Spike?

Go 1.3 ガベージ コレクターがサーバー メモリをシステムに解放しない

メモリ フットプリントを調査するために開発されたサーバーは、予想されるメモリ解放にもかかわらず、変動する RES メモリを示します接続が急増した後。この問題は、Go ガベージ コレクターのヒープ メモリの即時解放の制限と、OS が goroutine スタック メモリにアクセスできないために発生します。 Unix のようなシステムで使用可能な未使用のヒープ部分を解放するシステム コールは Windows では使用できないため、仮想メモリの消費量が増加する可能性があります。

最初、サーバーはマイナーなメモリ インプリントで起動します。 10,000 接続の最初のパルス中に、メモリ使用量は約 60MB まで増加します (「top」の RES サイズで示されているように)。パルスが終了すると、メモリ使用量が減少します。ただし、RES サイズは 56 MB に増加したままですが、使用中のメモリは 60 MB を下回ることはありません。

Go ガベージ コレクターはヒープ メモリを解放しますが、すぐにはシステムに返しません。このプロセスには、GC スイープ後最大 7 分かかる場合があります。さらに、Goroutine スタックに割り当てられたメモリが OS に解放されることはありません。これは、サーバーで観察される持続的な大量のメモリ消費の原因となります。

残念ながら、Go バージョン 1.3 では、この問題に対する明確な解決策はありません。ただし、今後のリリースでは状況が改善されることが期待されます。影響を軽減するには、次の対策を検討してください。

  • runtime.GC() を使用してガベージ コレクションを定期的に強制します。
  • サーバーが受け入れられる接続数に制限を設定して、過剰なメモリ使用量。

以上が接続が急増した後、1.3 でサーバー メモリがシステムに戻されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート