CLAUDE.mdルール
Node.jsのメモリリーク調査では、計測ツールを適切に組み合わせることが重要です。本記事ではClaude Codeを活用した調査ワークフローを紹介します。
# CLAUDE.md
## メモリリーク調査ルール
- heapdumpは本番相当の負荷後に取得する
- clinic.jsのflameグラフでCPUホットスポットを特定する
- V8フレームグラフは--prof + node --prof-processで生成する
- 差分heapスナップショットで増加オブジェクトを絞り込む
heapdumpでスナップショットを取得する
まずはheapdumpパッケージを使ってヒープスナップショットを取得します。
import heapdump from "heapdump";
import http from "http";
heapdump.writeSnapshot("/tmp/heap-baseline.heapsnapshot", (err, filename) => {
if (err) console.error(err);
else console.log("Baseline snapshot:", filename);
});
setTimeout(() => {
heapdump.writeSnapshot("/tmp/heap-after-load.heapsnapshot", (err, filename) => {
if (err) console.error(err);
else console.log("After-load snapshot:", filename);
});
}, 60000);
const server = http.createServer((req, res) => {
(global as any).leaked = (global as any).leaked ?? [];
(global as any).leaked.push(Buffer.alloc(1024));
res.end("ok");
});
server.listen(3000);
clinic.jsでフレームグラフを生成する
clinic flameコマンドでCPUプロファイルを可視化します。
npm install -g clinic
clinic flame -- node --max-old-space-size=512 dist/server.js
clinic doctor -- node dist/server.js
V8フレームグラフとClaude Codeの組み合わせ
Node.jsビルトインのプロファイラを使った手法です。
export function memoryMonitor(intervalMs = 5000) {
return setInterval(() => {
const mem = process.memoryUsage();
console.log(JSON.stringify({
timestamp: new Date().toISOString(),
heapUsed: Math.round(mem.heapUsed / 1024 / 1024) + "MB",
heapTotal: Math.round(mem.heapTotal / 1024 / 1024) + "MB",
rss: Math.round(mem.rss / 1024 / 1024) + "MB",
}));
}, intervalMs);
}
app.use((req, res, next) => {
const before = process.memoryUsage().heapUsed;
res.on("finish", () => {
const delta = process.memoryUsage().heapUsed - before;
if (delta > 1024 * 1024) {
console.warn("[MemoryWarn] " + req.method + " " + req.path + " +" + Math.round(delta/1024) + "KB");
}
});
next();
});
まとめ
- heapdumpでベースライン/負荷後のスナップショットを比較し、増加しているオブジェクトタイプを特定できる
- clinic.jsのflameグラフでCPUホットスポットを視覚的に把握し、ボトルネック関数を素早く発見できる
- V8 --profフラグとprocess.memoryUsage()の組み合わせで、リクエスト単位のメモリ増加を定量化できる
- Claude Codeに差分スナップショットやプロファイルテキストを渡すことで、修正コードの自動生成まで一貫して対応できる
コードの品質を上げたい方へ:Code Review Pack(¥980) — Claude Code用コードレビュープロンプト集。バグ検出・パフォーマンス改善・セキュリティチェックを自動化。
Top comments (0)