UDN
Search public documentation:

MemLeakCheckTrackingJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > メモリシステム > MemLeakCheck によるトラッキング
UE3 ホーム > パフォーマンス、プロファイリング、最適化 > メモリ使用とプロファイリング > MemLeakCheck によるトラッキング

MemLeakCheck (メモリリークチェック) によるトラッキング


概要


MemLeakCheck によって、ゲーム内でメモリがどこで使用されているかが、簡単に、しかもわかりやすく表示されます。これはテキストファイルですから、これまでの変更点を実にたやすく diff することができます。簡単に言えば、MemLeakCheck とは、他の重要なメモリコマンドをすべて呼び出すメタコマンドです。メモリの情報は、これ 1 つあれば得ることができるのです。

MemLeakCheck の実行


MemLeakCheck を実行する方法は 2 つあります。それは、full (フル) と fast (高速) です。

MemLeakCheck (メモリ リーク チェック)

フルの MemLeakCheck を生成するには、単にコンソールで MemLeakCheck を起動させるだけです。これによって、ゲームがかなりの時間 (1 分間ほど) 停滞しますが、大量のファイルを Profiling\MemLeaks ディレクトリに出力します。その際、ファイルは、マップ名とタイプスタンプに基づいてインデックス化されます。これは notepad (メモ帳) でも開くことができます。フルの MemLeakCheck には、ほぼすべての重要なアセットのリストがアルファベット順にソートされて含まれています。さまざまなセクションに分かれています。フルの MemLeakCheck は、 常にロードされるコンテンツ をトラッキングするのに非常に便利です。また、経時的にメモリ使用を比較するのにもたいへん役立ちます。アルファベット順にソートされており、どのようなツールででも簡単にテキストを diff することができます。

MemLeakCheck -fast

コンソール内で MemLeakCheck -fast を実行することによって、要する時間がかなり短くなり (通常 5 秒程度)、詳細度の低いレポートがプリントアウトされます。このレポートには、必須のトラッキングデータがすべて含まれますが、大きなアセットリストと時間がかかる処理は除外されます。これは主に、 ホットスポット レポートの作成 の一部として用いられる DoMemLeakChecking コマンドのために使用されますが、フルの MemLeakCheck による大幅な停滞によって機能 (ネットワークのタイムアウトなど) が損なわれる場合に役立ちます。

Release と Test

覚えておかなければならないのは、MemLeakCheck の出力が、それを実行するのに使用される実行可能コンフィギュレーションによって異なるということです。Release を使用すると、情報が正確になりますが、Release の実行形式は、Test の実行形式よりもメモリを喰うため、その分調整が必要となります。一般に、Test は、 DoMemLeakChecking とともに、Release は、フルの MemLeakCheck ダンプが必要な場合に使用するのが良いでしょう。

使用例


MemLeakCheck コマンドを使用してメモリに関する問題をトラッキングする方法は複数あります。

  • メモリがリークしている場合に、それがオブジェクト メモリのリークであるか否かをすばやく確認するには、マップの起動時に MemLeakCheck を実行します。しばらくの間実行します。しばらく実行したら、MemLeakCheck を再度行います。2 個のファイルを diff して、オブジェクトの数、または関連するプールの数が大幅に増加していないかどうか、相違を調べます。
  • 自動テストでは、5 分ごとに MemLeakCheck が実行されます。これにより、自動テスト実行中にメモリとオブジェクトがどのように変化するかがはっきりとわかります。 ホットスポット レポートの作成 で説明されているように MemLeakCheckDiffer ツールを使用すると、素早く簡単に実行することができます。
  • MemLeakCheck を実行して、メモリがレベルのどこで使用されているかを確認しましょう。動的に作成されるオブジェクトすべてを調べることができ、ロードされている AnimSets の数などが分かるということは実に素晴らしいことです。2 つのマルチプレイヤーマップ上において同様の状況を比較することによって、特定のマップが予想以上にメモリを消費する原因を、うまく突き止めることができます。
  • 古い MemLeakCheck のリポジトリを保存しておき、定期的に新しい MemLeakCheck データに対して diff を取ることによって、プロジェクトのライフ期間を通じてメモリ割り当てにおける変化をトラッキングすることが可能です。「先週よりも突然 5MB 分メモリが少なくなったのはなぜか」といったような疑問を突き止めるには、たいへん便利です。

出力セクション


MemLeakCheck ファイルの出力は、大雑把にセクションに分割することができます。ただし、MemLeakCheck の個々のセクションは、プラットフォームおよびそれぞれのゲームによって異なります。

ヘッダ

ファイルの先頭に置かれているのは、タイムスタンプ、コマンドライン (特定の実行のために使用される reducepoolsize [プールサイズの縮小] を調べるのに有益です)、BugItGo の位置、メモリ概要の情報です。ファイル内のデータがおかしい場合は、常に、このヘッダ部を調べて、おかしなものが引き渡されていないか、あるいは、古いファイルを調べていないかを確認するようにしてください。また、たいていのセクションでは、そのセクションを作成するために使用された特定のコマンドがリスト表示されています。

Class List (クラスリスト)

Class List は、ファイルにおける最初の大きなセクションです。ゲーム内のあらゆるクラスが、アルファベット順にソートされてリスト化されています。Count (数) はそのままの意味です。NumBytes (バイト数) は、そのクラスのすべてのオブジェクトによって現在使用されている正確なメモリ量です。MaxBytes (最大バイト) は、あるクラスに関連して割り当てられたメモリの量です。したがって、TArray スラックなどのようなメモリが含まれます。ResBytes (リソースバイト) は、そのクラスのオブジェクトに関連する Resource (リソース) メモリの総計です。クラスによってその意味は異なります。TrueResBytes (真のリソースバイト) は、そのオブジェクト自体によって使用されるあらゆるメモリの他に必要とされている Resource (リソース) メモリの量です。たとえば、 ParticleSytemComponent (パーティクルシステムコンポーネント) の TrueResBytes (真のリソースバイト) は、現在アクティブな PSC に必要とされているレンダリングスレッドのメモリ量です。一般的に、あるクラスが実際に使用しているメモリ量を出すには、MaxBytes (最大バイト) と TrueResBytes (真のリソースバイト) を足し合わせる必要があります。

Specific Object Lists (特定のオブジェクトのリスト)

フルの MemLeakCheck では、ここにオブジェクトの詳細なリストがいくつか置かれています。さらに下には他のリストが続きます。 Class List と類似していますが、個々のアセットをリスト化しています。

Platform Memory (プラットフォームメモリ)

次のセクションは、プラットフォーム固有のメモリです。これはプラットフォームによって大きく異なります。たいていの場合、Release モードの方が、有益なプラットフォームメモリ情報をもたらすとともに、あらゆる STAT MEMORY の変数の値も出力します。

Game Specific Memory (ゲーム固有のメモリ)

このセクションは、ゲーム固有のメモリ割り当てに関するものです。

Rendering Memory (レンダリングメモリ)

ここでは、Render Target (レンダリングターゲット)、GPU Resource (GPU リソース)、Shader Cache (シェーダーキャッシュ)、Octree (オクツリー) サイズがプリントアウトされます。Testモードでは、これらのデータが得られないため、欠けているか不正確なものになります。

Config/Package Memory (コンフィグ / パッケージ メモリ)

ロードされているすべてのコンフィグ / ローカリゼーション ファイルのサイズ、および、フルのパッケージリストが、ここでプリントアウトされます。パッケージリストは、特定の時点でロードされているデータの種類を判定するのに特に役立ちます。フルの出力および -fast による出力の両方で出されます。

Asset Lists (アセットリスト)

フルのダンプでは、現在、テクスチャおよびサウンド、パーティクルの完全なリストがプリントアウトされます。さらに下に他のリストが続きますが、これらの大部分は -fast モードで省略されます。

Actor List (アクタリスト)

次に、フルのアクタリストならびに作成時間、オーナーがプリントアウトされます。長期間のプレイセッションを通じてアクタのリークを見つけ出すのに、きわめて有効です。

Level List (レベルリスト)

STAT LEVELS コマンドの出力がここでプリントアウトされます。メモリ使用量を現在ロードされているレベルに関連づける場合に非常に役立ちます。この関連づけは、メモリ使用の急増部分をトラッキングするのに有用です。