github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/runtime/mprof.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // マロックのプロファイリング。 6 // tcmallocのアルゴリズムに基づいて作られたコードです。短いです。 7 8 package runtime 9 10 // SetBlockProfileRateは、ブロッキングイベントの割合を制御します。 11 // プロファイラは、ブロックされた時間がrateナノ秒ごとに平均1つのブロッキングイベントをサンプリングすることを目指しています。 12 // 13 // プロファイルにすべてのブロッキングイベントを含めるには、rate = 1を渡します。 14 // プロファイリングを完全にオフにするには、rate <= 0を渡します。 15 func SetBlockProfileRate(rate int) 16 17 // SetMutexProfileFractionは、mutexの衝突イベントのうち、 18 // プロファイルに報告される割合を制御します。平均して1/rateのイベントが報告されます。 19 // 以前のrateが返されます。 20 // 21 // プロファイリングを完全に無効にするには、rateに0を渡します。 22 // 現在のrateだけを読み取るには、rateに0より小さい値を渡します。 23 // (n>1の場合、サンプリングの詳細が変更される場合があります。) 24 func SetMutexProfileFraction(rate int) int 25 26 // StackRecordは単一の実行スタックを説明します。 27 type StackRecord struct { 28 Stack0 [32]uintptr 29 } 30 31 // Stackは、レコードに関連付けられたスタックトレースを返します。 32 // これはr.Stack0のプレフィックスです。 33 func (r *StackRecord) Stack() []uintptr 34 35 // MemProfileRateは、メモリプロファイルに記録および報告されるメモリ割り当ての割合を制御します。 36 // プロファイラは、MemProfileRateバイトあたり平均1回の割り当てをサンプリングすることを目指しています。 37 // プロファイルにすべての割り当てブロックを含めるには、MemProfileRateを1に設定します。 38 // プロファイリングを完全にオフにするには、MemProfileRateを0に設定します。 39 // メモリプロファイルを処理するツールは、プロファイルの割合がプログラムの生存期間全体で一定であり、現在の値と等しいと想定しています。 40 // メモリプロファイリングの割合を変更するプログラムは、できるだけ早く(たとえば、mainの開始時などに)1度だけ行う必要があります。 41 var MemProfileRate int = 512 * 1024 42 43 // MemProfileRecordは、特定の呼び出しシーケンス(スタックトレース)によって割り当てられた生きているオブジェクトを記述します。 44 type MemProfileRecord struct { 45 AllocBytes, FreeBytes int64 46 AllocObjects, FreeObjects int64 47 Stack0 [32]uintptr 48 } 49 50 // InUseBytesは使用中のバイト数(AllocBytes - FreeBytes)を返します。 51 func (r *MemProfileRecord) InUseBytes() int64 52 53 // InUseObjectsは使用中のオブジェクトの数を返します(AllocObjects - FreeObjects)。 54 func (r *MemProfileRecord) InUseObjects() int64 55 56 // Stackは、レコードに関連付けられたスタックトレースを返します。 57 // r.Stack0のプレフィックスです。 58 func (r *MemProfileRecord) Stack() []uintptr 59 60 // MemProfileは、割り当てられたメモリと解放されたメモリのプロファイルを、割り当ての場所別に返します。 61 // MemProfileは、現在のメモリプロファイルのレコード数であるnを返します。 62 // もしlen(p) >= nであれば、MemProfileはプロファイルをpにコピーし、nとtrueを返します。 63 // もしlen(p) < nであれば、MemProfileはpを変更せずに、nとfalseを返します。 64 // inuseZeroがtrueの場合、プロファイルにはr.AllocBytes > 0 かつ r.AllocBytes == r.FreeBytesのアロケーションレコードが含まれます。 65 // これは、メモリが割り当てられたがランタイムにすべて解放された場所です。 66 // 返されるプロファイルは、最大で2つのガベージコレクションサイクル前のものです。 67 // これは、プロファイルがアロケーションに偏った結果にならないようにするためです。 68 // アロケーションはリアルタイムで発生しますが、解放はガベージコレクタがスイーピングを実行するまで遅延されるため、 69 // プロファイルはガベージコレクタによって解放されるチャンスを持ったアロケーションのみをカウントします。 70 // 多くのクライアントは、runtime/pprofパッケージまたはtestingパッケージの-test.memprofileフラグを直接呼び出す代わりに使用するべきです。 71 func MemProfile(p []MemProfileRecord, inuseZero bool) (n int, ok bool) 72 73 // BlockProfileRecordは、特定の呼び出しシーケンス(スタックトレース)で発生したブロッキングイベントを記述します。 74 type BlockProfileRecord struct { 75 Count int64 76 Cycles int64 77 StackRecord 78 } 79 80 // BlockProfileは現在のブロッキングプロファイルのレコード数nを返します。 81 // もしlen(p) >= nの場合、BlockProfileはプロファイルをpにコピーし、nとtrueを返します。 82 // もしlen(p) < nの場合、BlockProfileはpを変更せずに、nとfalseを返します。 83 // 84 // ほとんどのクライアントは、 [runtime/pprof] パッケージや 85 // [testing] パッケージの-test.blockprofileフラグを使用して、 86 // BlockProfileを直接呼び出す代わりに使用すべきです。 87 func BlockProfile(p []BlockProfileRecord) (n int, ok bool) 88 89 // MutexProfileは現在のmutexプロファイルのレコード数であるnを返します。 90 // もしlen(p) >= nならば、MutexProfileはプロファイルをpにコピーしてnとtrueを返します。 91 // そうでなければ、MutexProfileはpを変更せずにnとfalseを返します。 92 // 93 // ほとんどのクライアントは、MutexProfileを直接呼び出す代わりに [runtime/pprof] パッケージを使用するべきです。 94 func MutexProfile(p []BlockProfileRecord) (n int, ok bool) 95 96 // ThreadCreateProfileはスレッド作成プロファイル内のレコード数であるnを返します。 97 // もし、len(p) >= nならば、ThreadCreateProfileはプロファイルをpにコピーしてn, trueを返します。 98 // もし、len(p) < nならば、ThreadCreateProfileはpを変更せずにn, falseを返します。 99 // 100 // 大抵のクライアントは直接ThreadCreateProfileを呼び出す代わりに、runtime/pprofパッケージを使用すべきです。 101 func ThreadCreateProfile(p []StackRecord) (n int, ok bool) 102 103 // GoroutineProfileはアクティブなゴルーチンスタックプロファイルのレコード数であるnを返します。 104 // もしlen(p)がn以上であれば、GoroutineProfileはプロファイルをpにコピーしnとtrueを返します。 105 // もしlen(p)がn未満であれば、GoroutineProfileはpを変更せずにnとfalseを返します。 106 // 107 // ほとんどのクライアントは直接GoroutineProfileを呼び出す代わりに [runtime/pprof] パッケージを使用するべきです。 108 func GoroutineProfile(p []StackRecord) (n int, ok bool) 109 110 // Stackは呼び出し元のゴルーチンのスタックトレースをbufに書き込み、 111 // bufに書き込まれたバイト数を返します。 112 // allがtrueの場合、現在のゴルーチンのトレースの後に、 113 // 他のすべてのゴルーチンのスタックトレースをbufに書き込みます。 114 func Stack(buf []byte, all bool) int