オプションで指定します。オプションを覚えておきましょう。指定することで、2つのプロファイル結果の差分を調査することができます。合計8種類の組み合わせがありますが、一般的な調査目的で利用するのはごく一部です。これから実際に使い方を解説していきます。1つ注意点があります。メモリープロファイルはデフォルトで有効になっていますが、パフォーマンスへの影響を抑えるために精度が犠牲になっています。関数など、なるべくアロケートが発生する前に設定するべきです。この変数を1に設定すれば、理論上完全にメモリ利用を調査することができるはずです。この変数の値がどう利用されているかなどについては次回の記事で紹介します。単純なのは、メモリー使用量を削減したいとか、予想以上にメモリーを消費しているからなぜなのか知りたいなどの理由で、メモリー使用量の内訳を調査するケースです。絶対値で調査するだけで十分です。CPUプロファイルを調査するときと同じようにすれば、使用中のメモリーを大量に確保しているのがどこかを突き止めることができます。GCがsleep中にmを消さないためのおまじない。37:}メモリーリークの調査メモリープロファイラを使うもうひとつのよくある目的は、メモリーリークの調査です。メモリーリークしているプログラムでどこがメモリーリークしているのかを調査したり、本番投入前のプログラムにメモリーリークがないことを確認したい事が多いでしょう。差分を調査することでメモリー使用量が増えている箇所を発見することができます。両方を観察することで小さいメモリオブジェクトのリークも見逃さないようにできます。マイナスになっていたりします。これはGCが実行されるタイミングの問題かなにかだと諦めていますが、対策として2回だけでなく何度かプロファイルを取得して傾向を見ることにしています。型を利用してポインタを正確に把握しています。遅いのであればプログラム中の生存しているポインタの数を減らす、アロケートが多くて頻繁にGCが発生しているならアロケートを減らすチューニングが有効です。減らす場合は、通常のメモリ使用量の調査を行い、メモリを大量に使っているところからポインタをたくさん持っている箇所を探します。見てアロケートが多い箇所を探すことができます。ランタイムが提供している他のプロファイルについて簡単に触れておきます。動かすのに利用しているOSレベルのスレッドを生成することになった箇所のプロファイルです。並列に動かそうとOSスレッドを用意しますが、CGOの呼び出しやシステムコールがすぐに戻ってこなかった場合にはさらにOSスレッドを立ち上げます。利用することで、プログラムの中でシステムコールがブロックしている部分を見つけることができるかもしれません。プログラムが大量のOSスレッドを利用しているけれども、大量のスレッドが必要になるのが一瞬なので普通にスタックダンプをとってもその瞬間が捉えられない場合などに使うと良いでしょう。待ちなどでブロックする時間をプロファイルできます。プログラムのレイテンシが時々異常に悪化するけれども、CPU使用率が高いわけではなく、またその瞬間のスタックダンプを取得することも難しいという場合に利用すると良いかもしれません。設定しておく必要があります。仕組みと、独自のプロファイルの作り方を解説します。