github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/runtime/mstats.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  
     7  package runtime
     8  
     9  // MemStatsはメモリアロケータに関する統計情報を記録します。
    10  type MemStats struct {
    11  
    12  	// Allocは割り当てられたヒープオブジェクトのバイト数です。
    13  	//
    14  	// これはHeapAllocと同じです(以下を参照)。
    15  	Alloc uint64
    16  
    17  	// TotalAllocはヒープオブジェクトのために割り当てられた累積バイト数です。
    18  	//
    19  	// TotalAllocはヒープオブジェクトが割り当てられると増加しますが、
    20  	// AllocとHeapAllocとは異なり、オブジェクトが解放されると減少しません。
    21  	TotalAlloc uint64
    22  
    23  	// SysはOSから取得したメモリの合計バイト数です。
    24  	//
    25  	// Sysは以下のXSysフィールドの合計です。SysはGoランタイムがヒープ、スタック、および他の内部データ構造に予約した仮想アドレススペースを計測します。ある時点では、仮想アドレススペースのすべてが物理メモリでバックアップされているわけではありませんが、一般的にはすべてバックアップされています。
    26  	Sys uint64
    27  
    28  	// Lookupsはランタイムによって実行されるポインターの参照の数です。
    29  	//
    30  	// これは主にランタイム内部のデバッグに役立ちます。
    31  	Lookups uint64
    32  
    33  	// Mallocsはヒープオブジェクトの割り当て数の累積数です。
    34  	// 生存しているオブジェクトの数はMallocs - Freesです。
    35  	Mallocs uint64
    36  
    37  	// Frees はヒープオブジェクトが解放された累積数です。
    38  	Frees uint64
    39  
    40  	// HeapAllocは割り当てられたヒープオブジェクトのバイト数です。
    41  	//
    42  	// "割り当てられた"ヒープオブジェクトには、到達可能なオブジェクト全体と、
    43  	// ガベージコレクタがまだ解放していない到達不能なオブジェクトが含まれます。
    44  	// 具体的には、ヒープオブジェクトが割り当てられるとHeapAllocは増加し、
    45  	// ヒープがスイープされて到達不能なオブジェクトが解放されるとHeapAllocは減少します。
    46  	// スイープはGCサイクル間に段階的に行われるため、
    47  	// これらの2つのプロセスは同時に発生し、その結果HeapAllocは滑らかに変化します
    48  	//(ストップ・ザ・ワールドのガベージコレクタの典型的なギザギザとは対照的です)。
    49  	HeapAlloc uint64
    50  
    51  	// HeapSysはOSから取得されたヒープメモリのバイト数です。
    52  	//
    53  	// HeapSysは、ヒープのために予約された仮想アドレス空間の量を測定します。
    54  	// これには、まだ使用されていないが予約されている仮想アドレス空間が含まれます。
    55  	// これは物理メモリを消費しませんが、通常は小さくなります。
    56  	// また、使用されなくなった後に物理メモリがOSに返された仮想アドレス空間も含まれます(後者の測定にはHeapReleasedを参照してください)。
    57  	//
    58  	// HeapSysは、ヒープが持っていた最大のサイズを推測します。
    59  	HeapSys uint64
    60  
    61  	// HeapIdleはアイドル状態(未使用)のスパンのバイト数です。
    62  	//
    63  	// アイドルスパンにはオブジェクトが含まれていません。これらのスパンは
    64  	// OSに返却されることができます(または既に返却されているかもしれません)し、ヒープの割り当てに再利用されることもあります。
    65  	// また、スタックメモリとして再利用されることもあります。
    66  	//
    67  	// HeapIdleからHeapReleasedを引いた値は、OSに返還できるメモリ量を見積もるものですが、
    68  	// ランタイムによって保持されているため、ヒープの拡張時にOSからの追加メモリ要求なしでヒープを成長させるために利用されています。
    69  	// もし、この差がヒープサイズよりもはるかに大きい場合、最近の一時的なライブヒープサイズの急増を示しています。
    70  	HeapIdle uint64
    71  
    72  	// HeapInuseは使用中スパンのバイト数です。
    73  	//
    74  	// 使用中スパンには少なくとも1つのオブジェクトが含まれています。
    75  	// これらのスパンはおおよそ同じサイズの他のオブジェクトにのみ使用できます。
    76  	//
    77  	// HeapInuseからHeapAllocを引いた値は、特定のサイズクラスに割り当てられたメモリの量を推定しますが、現在は使用されていません。
    78  	// これは断片化の上限であり、一般的にこのメモリは効率的に再利用できます。
    79  	HeapInuse uint64
    80  
    81  	// HeapReleasedはOSに返される物理メモリのバイト数です。
    82  	//
    83  	// これは、ヒープに再取得される前に、アイドルスパンから返された
    84  	// ヒープメモリをカウントしています。
    85  	HeapReleased uint64
    86  
    87  	// HeapObjectsは割り当てられたヒープオブジェクトの数です。
    88  	//
    89  	// HeapAllocと同様に、オブジェクトが割り当てられると増加し、
    90  	// ヒープが掃引され、到達不能なオブジェクトが解放されると減少します。
    91  	HeapObjects uint64
    92  
    93  	// StackInuse はスタックスパンのバイト数です。
    94  	//
    95  	// 使用中のスタックスパンには少なくとも1つのスタックがあります。これらのスパンは同じサイズの他のスタックにしか使用できません。
    96  	//
    97  	// StackIdle は存在しません。未使用のスタックスパンはヒープに戻されるため(そのため HeapIdle にカウントされます)。
    98  	StackInuse uint64
    99  
   100  	// StackSysはOSから取得したスタックメモリのバイト数です。
   101  	//
   102  	// StackSysはStackInuseに加えて、OSスレッドスタック用に直接
   103  	// OSから取得したメモリです。
   104  	//
   105  	// cgoを使用しないプログラムでは、このメトリックは現在StackInuseと同じです
   106  	// (しかし、これに依存するべきではなく、値は将来変わる可能性があります)。
   107  	//
   108  	// cgoを使用するプログラムでは、OSスレッドスタックも含まれます。
   109  	// 現在、c-sharedおよびc-archiveビルドモードでは1つのスタックのみを考慮し、
   110  	// 他のOSからのスタック(特にCコードによって割り当てられたスタック)は現在計測されていません。
   111  	// これも将来変更される可能性があります。
   112  	StackSys uint64
   113  
   114  	// MSpanInuseは割り当てられたmspan構造体のバイト数です。
   115  	MSpanInuse uint64
   116  
   117  	// MSpanSysは、mspan構造体のためにOSから取得したメモリのバイトです。
   118  	MSpanSys uint64
   119  
   120  	// MCacheInuseは割り当てられたmcache構造体のバイト数です。
   121  	MCacheInuse uint64
   122  
   123  	// MCacheSysは、mcache構造体のためにオペレーティングシステムから取得されたバイト数です。
   124  	MCacheSys uint64
   125  
   126  	BuckHashSys uint64
   127  
   128  	// GCSysはゴミ回収メタデータのメモリのバイト数です。
   129  	GCSys uint64
   130  
   131  	// OtherSys は、さまざまなオフヒープランタイム割り当てのメモリのバイト数です。
   132  	OtherSys uint64
   133  
   134  	// NextGCは次のGCサイクルのターゲットヒープサイズです。
   135  	//
   136  	// ガベージコレクタの目標は、HeapAlloc ≤ NextGCを維持することです。
   137  	// 各GCサイクルの終了時に、次のサイクルのターゲットは
   138  	// アクセス可能なデータの量とGOGCの値に基づいて計算されます。
   139  	NextGC uint64
   140  
   141  	// LastGCは、最後のガベージコレクションが終了した時刻で、
   142  	// 1970年以降のUNIXエポックからの経過時間(ナノ秒単位)です。
   143  	LastGC uint64
   144  
   145  	// PauseTotalNsは、プログラムが開始されてからのGCによる累積ナノ秒数です。
   146  	//
   147  	// ストップ・ザ・ワールド・ポーズ中には、すべてのゴルーチンが一時停止され、
   148  	// ガベージコレクタのみが実行されます。
   149  	PauseTotalNs uint64
   150  
   151  	// PauseNsは直近のGCのストップ・ザ・ワールドの一時停止時間(ナノ秒)の循環バッファです。
   152  	//
   153  	// 最も直近の一時停止はPauseNs[(NumGC+255)%256]にあります。一般的に、PauseNs[N%256]は直近のN%256番目のGCサイクルでの一時停止時間を記録しています。1つのGCサイクルに複数の一時停止が存在する可能性があります。これはサイクル中のすべての一時停止の合計です。
   154  	PauseNs [256]uint64
   155  
   156  	// PauseEndは最近のGCの一時停止終了時間の循環バッファで、1970年以降のナノ秒(UNIXエポック)で表されます。
   157  	//
   158  	// このバッファはPauseNsと同じ方法で埋められます。1つのGCサイクルに複数の一時停止がある場合があります。このバッファはサイクル内の最後の一時停止の終了を記録します。
   159  	PauseEnd [256]uint64
   160  
   161  	// NumGCは完了したGCサイクルの数です。
   162  	NumGC uint32
   163  
   164  	// NumForcedGC は、アプリケーションがGC関数を呼び出し、強制的に実行されたGCサイクルの回数です。
   165  	NumForcedGC uint32
   166  
   167  	// GCCPUFractionは、プログラム開始以来のGCによって使用された利用可能なCPU時間の割合です。
   168  	//
   169  	// GCCPUFractionは0から1の数値で表され、0はこのプログラムのCPUの使用が全くないことを意味します。
   170  	// プログラムの利用可能なCPU時間は、プログラム開始時からのGOMAXPROCSの積分と定義されます。
   171  	// つまり、GOMAXPROCSが2で、プログラムが10秒間実行されている場合、その「利用可能なCPU時間」は20秒です。
   172  	// GCCPUFractionには、書き込みバリアのアクティビティに使用されたCPU時間は含まれません。
   173  	//
   174  	// これは、GODEBUG=gctrace=1によって報告されるCPUの割合と同じです。
   175  	GCCPUFraction float64
   176  
   177  	// EnableGCはGCが有効であることを示します。常にtrueですが、
   178  	// GOGC=offの場合でも有効です。
   179  	EnableGC bool
   180  
   181  	// DebugGC は現在使用されていません。
   182  	DebugGC bool
   183  
   184  	// BySizeは、サイズごとの割り当て統計を報告します。
   185  	//
   186  	// BySize[N]は、サイズSの割り当てに関する統計を提供します。ここで、BySize[N-1].Size < S ≤ BySize[N].Sizeです。
   187  	//
   188  	// これは、BySize[60].Sizeより大きい割り当てを報告しません。
   189  	BySize [61]struct {
   190  		Size uint32
   191  
   192  		Mallocs uint64
   193  
   194  		Frees uint64
   195  	}
   196  }
   197  
   198  // ReadMemStatsはメモリアロケータ統計情報をmに書き込みます。
   199  //
   200  // 返されるメモリアロケータ統計情報はReadMemStatsの呼び出し時点で最新のものです。
   201  // これは、ヒーププロファイルとは異なり、最新のガベージコレクションサイクルのスナップショットです。
   202  func ReadMemStats(m *MemStats)