0Pricing
Lua Academy · レッスン

LuaProfilerによるプロファイリング

LuaProfilerでコードを計測し、CPUのホットスポットと呼び出し回数を特定します。

「LuaProfilerによるプロファイリング」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

LuaProfiler とは

LuaProfiler は Lua 用のフックベースのプロファイラーです。関数の呼び出し回数と各関数の累積実行時間を記録し、最適化分析用のレポートを生成します。

LuaProfiler のインストール

LuaRocks から利用できます:luarocks install luaprofiler。または、ソースをプロジェクトに直接含めます。

プロファイラーの起動

プロファイラーの開始呼び出しと停止呼び出しでコードを囲みます。

local profiler = require("profiler")
profiler.start("profile.txt")  -- output to file
-- ... your code ...
profiler.stop()

レポートの読み方

レポートには、関数名、呼び出し回数、1 回あたりの時間、合計時間が表示されます。合計時間が長い関数に注目してください。

-- Example report:
-- function          calls  total_time  avg_time
-- hotLoop          1000   0.850 s     0.850 ms
-- table.sort        200   0.120 s     0.600 ms
-- string.format    5000   0.090 s     0.018 ms

特定のコードパスのプロファイリング

オーバーヘッドを減らし、レポートの対象を絞るために、コードの一部だけをプロファイリングします。

profiler.start()
doExpensiveOperation()
profiler.stop()
profiler.report("expensive_op.txt")

代替案:debug.sethook によるカスタムプロファイラー

外部ライブラリを使わず、debug.sethook を使用して呼び出し回数を収集する最小限のプロファイラーを構築します。

local counts = {}
debug.sethook(function(event)
  if event == "call" then
    local info = debug.getinfo(2, "n")
    local name = info.name or "?"
    counts[name] = (counts[name] or 0) + 1
  end
end, "c")
-- ... run code ...
debug.sethook()
for name, count in pairs(counts) do
  print(count, name)
end

関数の計測に使う os.clock

個々の関数の実行時間を手動で計測し、対象を絞った簡単なベンチマークを行います。

local function time(fn, ...)
  local t = os.clock()
  fn(...)
  return os.clock() - t
end
print("myFunc took:", time(myFunc, arg1, arg2))

LuaJIT のプロファイリングに使う jit.p

LuaJIT では、jit.p は本番環境でフックベースのプロファイラーより優れています。オーバーヘッドが小さく、JIT を考慮したサンプリングが可能です。

フレームグラフ

スタックサンプルを収集してフレームグラフを生成します。ツールには、PUC Lua 用の lua-flameprof と LuaJIT 用の jit.p + FlameGraph があります。フレームグラフは、CPU 使用量の呼び出し階層全体を示します。

テストスイートでのプロファイリング

ユニットテスト内でプロファイラーを実行し、パフォーマンスの低下を自動的に検出します。ホットスポット関数が時間のしきい値を超えないことをアサートします。

よくあるホットスポット

  • ループ内での .. による文字列連結(table.concat を使用します)。
  • 大きなテーブルに対する table.sort(より高速なアルゴリズムを検討します)。
  • クロージャの頻繁な生成。
  • 深いメタテーブル __index チェーン。

プロファイリングの確認

LuaProfiler のレポートには何が表示されますか?

まとめ:LuaProfiler によるプロファイリング

LuaProfiler またはカスタムの debug.sethook プロファイラーを使用して、呼び出し回数と実行時間を収集します。合計時間が長い関数に注目してください。LuaJIT では jit.p を優先します。呼び出し階層を可視化するにはフレームグラフを使用します。

よくある質問

「LuaProfilerによるプロファイリング」レッスンは無料ですか?

はい。「LuaProfilerによるプロファイリング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「LuaProfilerによるプロファイリング」で何を学びますか?

LuaProfilerでコードを計測し、CPUのホットスポットと呼び出し回数を特定します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「LuaProfilerによるプロファイリング」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. debugライブラリ詳説
  2. MobDebugによるリモートデバッグ
  3. LuaProfilerによるプロファイリング
  4. コードカバレッジとテスト計測
← Lua Academyに戻る