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 では、この問題に対する明確な解決策はありません。ただし、今後のリリースでは状況が改善されることが期待されます。影響を軽減するには、次の対策を検討してください。
以上が接続が急増した後、1.3 でサーバー メモリがシステムに戻されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。