Documentation
¶
Overview ¶
debug パッケージには、プログラムが実行中に自己デバッグするための機能が含まれています。
Index ¶
- func FreeOSMemory()
- func PrintStack()
- func ReadGCStats(stats *GCStats)
- func SetGCPercent(percent int) int
- func SetMaxStack(bytes int) int
- func SetMaxThreads(threads int) int
- func SetMemoryLimit(limit int64) int64
- func SetPanicOnFault(enabled bool) bool
- func SetTraceback(level string)
- func Stack() []byte
- func WriteHeapDump(fd uintptr)
- type BuildInfo
- type BuildSetting
- type GCStats
- type Module
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FreeOSMemory ¶ added in v1.1.0
func FreeOSMemory()
FreeOSMemoryはガベージコレクションを強制的に行い、可能なだけ多くのメモリをオペレーティングシステムに返す試みをします。 (これが呼ばれなくても、ランタイムはバックグラウンドで徐々にメモリをオペレーティングシステムに返します。)
func ReadGCStats ¶ added in v1.1.0
func ReadGCStats(stats *GCStats)
ReadGCStatsはゴミ収集に関する統計情報をstatsに読み込みます。 一時停止履歴のエントリ数はシステムに依存します。 stats.Pauseスライスは十分に大きければ再利用され、そうでなければ再割り当てされます。 ReadGCStatsはstats.Pauseスライスの容量をフルに使用する可能性があります。 もしstats.PauseQuantilesが空でない場合、ReadGCStatsは一時停止時間の分布を要約した 分位数をstats.PauseQuantilesに埋め込みます。 例えば、len(stats.PauseQuantiles)が5の場合、最小値、25%、50%、75%、最大値の一時停止時間が埋め込まれます。
func SetGCPercent ¶ added in v1.1.0
SetGCPercentはガベージコレクションの目標パーセンテージを設定します: 前回のコレクション後に残ったデータの生存データに対する最新割り当てデータの比率が このパーセンテージに達した時にコレクションがトリガーされます。 SetGCPercentは以前の設定を返します。 初期設定は起動時のGOGC環境変数の値、または変数が設定されていない場合は100です。 この設定はメモリ制限を維持するために効果的に減少させることができます。 マイナスのパーセンテージは、メモリ制限が達成されない限り、ガベージコレクションを 実質的に無効にします。 詳細については、SetMemoryLimitを参照してください。
func SetMaxStack ¶ added in v1.2.0
SetMaxStackは、個々のゴルーチンスタックが使用可能なメモリの最大量を設定します。 スタックを成長させながらこの制限を超える場合、プログラムはクラッシュします。 SetMaxStackは、前の設定を返します。 初期設定は、64ビットシステムでは1GB、32ビットシステムでは250MBです。 SetMaxStackに提供される値に関係なく、システムによって設定された最大スタック制限がある場合があります。
SetMaxStackは、無限再帰に入るゴルーチンによって引き起こされるダメージを制限するために主に役立ちます。 これは将来のスタックの成長のみを制限します。
func SetMaxThreads ¶ added in v1.2.0
SetMaxThreadsはGoプログラムが使用できるオペレーティングシステムの最大スレッド数を設定します。これ以上のスレッドを使用しようとすると、プログラムはクラッシュします。 SetMaxThreadsは前の設定を返します。 初期設定は10,000スレッドです。
制限はオペレーティングシステムのスレッド数を制御しますが、ゴルーチンの数を制御しません。Goプログラムは、既存のすべてのスレッドがシステムコール、CGOコールにブロックされているか、runtime.LockOSThreadの使用により他のゴルーチンにロックされている場合にのみ新しいスレッドを作成します。
SetMaxThreadsは、無制限の数のスレッドを作成するプログラムによる被害を制限するために主に役立ちます。アイデアは、プログラムがオペレーティングシステムをダウンさせる前にプログラム自体をダウンさせることです。
func SetMemoryLimit ¶ added in v1.19.0
SetMemoryLimitはランタイムにソフトメモリ制限を提供します。
ランタイムは、ガベージコレクションの頻度の調整やメモリをより積極的に 下位システムに返却するなど、このメモリ制限を尊重するためにいくつかの プロセスを実行します。この制限は、GOGC=off (または、SetGCPercent(-1)が実行された場合も)であっても尊重されます。
入力制限はバイト単位で提供され、Goランタイムによってマップされた、管理された、リリースされていないすべてのメモリを含みます。特に、 Goバイナリによって使用されるスペースや、Go以外のメモリ(プロセスの 代わりに下位システムによって管理されるメモリや、同じプロセス内の 非Goコードによって管理されるメモリなど)は考慮されません。除外される メモリソースの例には、プロセスのために保持されたOSカーネルメモリ、 Cコードによって割り当てられたメモリ、syscall.Mmapによってマップされた メモリ(それはGoランタイムによって管理されていないため)が含まれます。
より具体的には、次の式が制限としてランタイムが維持しようとする値を 正確に反映しています:
runtime.MemStats.Sys - runtime.MemStats.HeapReleased
またはruntime/metricsパッケージを使用して:
/memory/classes/total:bytes - /memory/classes/heap/released:bytes
ゼロの制限やGoランタイムによって使用されるメモリ量よりも低い制限は、 ガベージコレクタがほぼ連続的に実行される原因となるかもしれません。 ただし、アプリケーションは引き続き進行する可能性があります。
メモリ制限は常にGoランタイムによって尊重されるため、この動作を無効にするには制限を非常に高い値に設定します。 math.MaxInt64は制限を無効にするための規定値ですが、下位システムの利用可能なメモリよりもはるかに大きな値でも同様に機能します。
詳細なガイドと共に、ソフトメモリ制限について詳しく説明したガイドおよび さまざまな一般的な使用例とシナリオについては、 https://go.dev/doc/gc-guideを参照してください。
初期設定はmath.MaxInt64ですが、GOMEMLIMIT環境変数が設定されている場合は、初期設定を提供します。GOMEMLIMITは、バイト単位の数値で、 オプションの単位接尾辞を持ちます。サポートされる接尾辞には、B、KiB、 MiB、GiB、TiBがあります。これらの接尾辞は、IEC 80000-13規格で定義されるバイトの数量を表します。つまり、KiBは2^10バイトを、 MiBは2^20バイトを意味し、それ以降も同様です。
SetMemoryLimitは以前に設定されたメモリ制限を返します。 負の入力は制限を調整せず、現在設定されたメモリ制限を取得することができます。
func SetPanicOnFault ¶ added in v1.3.0
SetPanicOnFaultは、プログラムが予期しない(非nil)アドレスでの障害が発生した場合、ランタイムの動作を制御します。 このような障害は通常、ランタイムのメモリ破損などのバグによって引き起こされるため、デフォルトの応答はプログラムをクラッシュさせることです。 メモリマップドファイルやメモリの安全でない操作を行うプログラムは、非nilアドレスでの障害を劇的な状況で引き起こすかもしれません。 SetPanicOnFaultは、そのようなプログラムがクラッシュではなくパニックのみを要求できるようにします。 ランタイムがパニックするときにランタイムがパニックするruntime.Errorには、追加のメソッドが存在する場合があります: Addr() uintptr もしAddrメソッドが存在する場合、それは障害を引き起こしたメモリアドレスを返します。 Addrの結果はベストエフォートであり、結果の信頼性はプラットフォームに依存する可能性があります。 SetPanicOnFaultは現在のゴルーチンにのみ適用されます。 それは前の設定を返します。
func SetTraceback ¶ added in v1.6.0
func SetTraceback(level string)
SetTracebackは、ランタイムがパニックや内部ランタイムエラーによる終了前に出力するトレースバックの詳細度を設定します。 level引数は、GOTRACEBACK環境変数と同じ値を受け取ります。例えば、SetTraceback("all")は、プログラムがクラッシュしたときにすべてのゴルーチンを出力することを保証します。 詳細については、パッケージランタイムのドキュメントを参照してください。 SetTracebackが環境変数よりも低いレベルで呼び出された場合、呼び出しは無視されます。
func Stack ¶
func Stack() []byte
Stackはそれを呼び出すgoroutineのフォーマットされたスタックトレースを返します。 runtime.Stackを呼び出して、トレース全体をキャプチャする十分に大きなバッファを使用します。
func WriteHeapDump ¶ added in v1.3.0
func WriteHeapDump(fd uintptr)
WriteHeapDumpはヒープとその中のオブジェクトの説明を指定されたファイルディスクリプタに書き込みます。
WriteHeapDumpはヒープダンプが完全に書き込まれるまですべてのゴルーチンの実行を一時停止します。したがって、ファイルディスクリプタは、同じGoプロセスのもう一方のエンドがあるパイプやソケットに接続してはいけません。代わりに、一時ファイルまたはネットワークソケットを使用してください。
ヒープダンプの形式はhttps://golang.org/s/go15heapdumpで定義されています。
Types ¶
type BuildInfo ¶ added in v1.12.0
type BuildInfo struct { // GoVersionはバイナリをビルドしたGoツールチェーンのバージョンです // (例: "go1.19.2"). GoVersion string // Pathはバイナリのメインパッケージのパッケージパスです // (例:「golang.org/x/tools/cmd/stringer」)。 Path string // Mainはバイナリのmainパッケージを含むモジュールを説明します。 Main Module // Depsは、このバイナリのビルドに寄与したパッケージの直接および間接の依存モジュールをすべて説明します。 Deps []*Module // Settingsはバイナリのビルドに使用されるビルド設定を記述しています。 Settings []BuildSetting }
BuildInfoはGoバイナリから読み取られるビルド情報を表します。
func ParseBuildInfo ¶ added in v1.18.0
func ReadBuildInfo ¶ added in v1.12.0
ReadBuildInfoは実行中のバイナリに埋め込まれたビルド情報を返します。 この情報はモジュールサポートでビルドされたバイナリでのみ利用可能です。
type BuildSetting ¶ added in v1.18.0
type BuildSetting struct {
// KeyとValueはビルド設定を説明します。
// Keyには等号、スペース、タブ、改行を含めることはできません。
// Valueには改行('\n')を含めることはできません。
Key, Value string
}
BuildSettingはビルドに影響を与える1つの設定を表すキーと値のペアです。
定義されたキーには以下のものがあります:
- -buildmode: 使用されたビルドモードフラグ(通常は "exe")
- -compiler: 使用されたコンパイラツールチェインフラグ(通常は "gc")
- CGO_ENABLED: 有効なCGO_ENABLED環境変数
- CGO_CFLAGS: 有効なCGO_CFLAGS環境変数
- CGO_CPPFLAGS: 有効なCGO_CPPFLAGS環境変数
- CGO_CXXFLAGS: 有効なCGO_CPPFLAGS環境変数
- CGO_LDFLAGS: 有効なCGO_CPPFLAGS環境変数
- GOARCH: アーキテクチャのターゲット
- GOAMD64/GOARM/GO386/など: GOARCHのアーキテクチャ機能レベル
- GOOS: オペレーティングシステムのターゲット
- vcs: ビルドが実行されたソースツリーのバージョン管理システム
- vcs.revision: 現在のコミットまたはチェックアウトのためのリビジョン識別子
- vcs.time: vcs.revisionに関連付けられた変更時刻(RFC3339形式)
- vcs.modified: ソースツリーにローカルの変更があるかどうかを示すtrueまたはfalseです