現在、私はgolangで書かれたデータベースで大きなテーブル結合をサポートしています。しかし、GCには時間がかかりすぎます。 go gcを閉じて手動でトリガーしたい。 goビルド引数を構成するにはどうすればよいですか?
runtime
のパッケージドキュメントには、必要なすべての詳細が含まれています。
GOGC変数は、初期のガベージコレクションのターゲットパーセンテージを設定します。前回の収集後に残っているライブデータに対する新しく割り当てられたデータの比率がこのパーセンテージに達すると、収集がトリガーされます。デフォルトはGOGC = 100です。 GOGC = offを設定すると、ガベージコレクターが完全に無効になります。ランタイム/デバッグパッケージのSetGCPercent関数を使用すると、実行時にこのパーセンテージを変更できます。 https://golang.org/pkg/runtime/debug/#SetGCPercent を参照してください。
したがって、環境変数GOGC
を、前回の収集後に残っているライブデータに対する新しく割り当てられたデータの比率であるパーセントに設定できます。
上記のデータ比率がGOGC
の値に達すると、(ガベージ)コレクションが開始されます。初期設定はGOGC
env変数から取得されます。変数が設定されていない場合は_100
_から取得されます。値off
は、ガベージコレクションを無効にします。
実行時に debug.SetGCPercent()
を呼び出してGOGC
比率を変更し、負の値を渡して無効にすることができます。
_debug.SetGCPercent(-1)
_
runtime.GC()
を使用して、ガベージコレクションを「手動で」トリガーできます。
ただし、GCを完全に無効にすることは、あなたが望むものではないかもしれません。 runtime
の完全なパッケージドキュメントを読み、GCを微調整する方法とGC実行をトレースする方法の詳細を確認してください。それらを分析し、それに応じて行動します。
Go 1.7 はガベージコレクターが改善され、本日リリースされたことにも注意してください。
ガベージコレクタの高速化と標準ライブラリの最適化により、プログラムの実行速度が少し速くなるはずです。多くのアイドル状態のgoroutineがあるプログラムでは、Go 1.6よりもはるかに短いガベージコレクションの一時停止が発生します。
まだの場合は、Go 1.7でコンパイルしたアプリケーションをテストしてから、さらにアクションを実行してください。