nginx-c-module-debug について
nginx C モジュールの問題を診断する開発者向けリファレンススキルです。45の優先度付きルールで、クラッシュ、メモリ障害、リクエストフロー追跡、ログ、動的トレース、デバッグビルドを扱います。
主な機能
- 018カテゴリにわたる45のルール
- 02クラッシュとシグナルの診断
- 03メモリバグの検出
- 04GDB とコアダンプの分析
- 05リクエストフローの追跡
- 06ログ、プローブ、サニタイザーの設定
活用シーン
- 01nginx worker のクラッシュ調査
- 02メモリリークや破損の診断
- 03リクエストフェーズとフィルターチェーンの追跡
- 04GDB またはサニタイザーを使うデバッグ環境の設定
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ pproenca/ dot-skills --skill nginx-c-module-debugインストール後、Claude Code で/nginx-c-module-debugを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
metadata.jsonassets/templates/_template.mdreferences/_sections.mdbuild-asan-configure.mdbuild-debug-flags.mdbuild-debug-palloc.mdbuild-single-process.mdbuild-valgrind-suppressions.mdcrash-double-free-finalize.mdcrash-error-page-redirect.mdcrash-null-deref-pattern.mdcrash-segfault-signature.mdcrash-stack-overflow.mdcrash-worker-exit-log.mddbglog-debug-connection.mddbglog-debug-mask.mddbglog-format-ngx-str.mddbglog-log-action-string.mddbglog-memory-buffer.mdgdb-attach-worker.mdgdb-backtrace-read.mdgdb-coredump-setup.mdgdb-inspect-request.mdgdb-memory-buffer-extract.mdgdb-watchpoint-corruption.mdmemdbg-buffer-overrun.mdmemdbg-cleanup-handler-leak.mdmemdbg-pool-leak-pattern.mdmemdbg-slab-corruption.mdmemdbg-temp-pool-misuse.md詳細
nginx.org C モジュールのデバッグに関するベストプラクティス
公式の nginx 開発ドキュメントと本番環境でのデバッグ経験に基づく、nginx C モジュールの包括的なデバッグガイドです。8 カテゴリーにまたがる 45 のルールを影響度順にまとめ、nginx モジュールのクラッシュ、メモリのバグ、動作上の問題を体系的に診断できるようにします。
関連スキル:このスキルは、nginx-c-modules(正確性)および nginx-c-module-perf-reliability(パフォーマンス)を補完します。このスキルではデバッグと診断を扱います。
適用するタイミング
次の問題を診断する際に、これらのガイドラインを参照してください。
- nginx ワーカーのクラッシュ(セグメンテーションフォルト、SIGABRT、SIGSEGV)の診断
- メモリのバグ(解放後使用、メモリリーク、プールの破損、バッファーオーバーラン)の特定
- nginx の GDB とコアダンプ解析のセットアップ
- フェーズ、サブリクエスト、フィルターチェーンを通じたリクエストフローの追跡
- デバッグログと動的トレーシングツールを使った nginx モジュールの計測
優先度別のルールカテゴリー
| 優先度 | カテゴリー | 影響度 | 接頭辞 |
|---|---|---|---|
| 1 | クラッシュ診断とシグナル | CRITICAL | crash- |
| 2 | メモリのバグの検出 | CRITICAL | memdbg- |
| 3 | GDB とコアダンプ解析 | HIGH | gdb- |
| 4 | リクエストフローの追跡 | HIGH | trace- |
| 5 | デバッグログのパターン | MEDIUM-HIGH | dbglog- |
| 6 | 状態とライフサイクルのデバッグ | MEDIUM | state- |
| 7 | 動的トレーシングツール | MEDIUM | probe- |
| 8 | ビルドとサニタイザーの設定 | LOW-MEDIUM | build- |
クイックリファレンス
1. クラッシュ診断とシグナル(CRITICAL)
crash-segfault-signature- シグナルとアドレスからセグメンテーションフォルトのクラッシュシグネチャを特定するcrash-null-deref-pattern- nginx モジュールにおける NULL ポインター参照のパターンを認識するcrash-double-free-finalize- リクエストの参照カウントから二重 finalize によるクラッシュを診断するcrash-stack-overflow- 再帰的なサブリクエストやフィルターチェーンによるスタックオーバーフローを検出するcrash-worker-exit-log- ワーカーの終了ログメッセージからクラッシュの状況を抽出するcrash-error-page-redirect- error_page の内部リダイレクトによるコンテキスト無効化に起因するクラッシュを回避する
2. メモリのバグの検出(CRITICAL)
memdbg-use-after-free- プールの破棄タイミングから解放後使用を検出するmemdbg-pool-leak-pattern- 増加するワーカー RSS からプールメモリリークのパターンを特定するmemdbg-slab-corruption- 複数ワーカーのクラッシュから共有メモリスラブの破損を診断するmemdbg-cleanup-handler-leak- プールのクリーンアップハンドラーの設定漏れによるリソースリークを検出するmemdbg-buffer-overrun- ngx_pnalloc のサイズ計算ミスによるバッファーオーバーランを特定するmemdbg-temp-pool-misuse- 一時プールに長期間有効なポインターを保存しないmemdbg-valgrind-pool-trace- Valgrind のプールレベルのトレースを使ってリークした割り当てを特定する
3. GDB とコアダンプの分析(HIGH)
gdb-coredump-setup- nginx ワーカーのクラッシュ時にコアダンプが生成されるように設定するgdb-attach-worker- 実行中の nginx ワーカープロセスに GDB をアタッチするgdb-backtrace-read- nginx のバックトレースを読み、クラッシュしたモジュールとフェーズを特定するgdb-inspect-request- GDB で ngx_http_request_t のフィールドを調べ、リクエストの状態を確認するgdb-memory-buffer-extract- GDB スクリプトを使ってメモリバッファからデバッグログを抽出するgdb-watchpoint-corruption- GDB のウォッチポイントを使って、書き込み時にメモリ破損を検出する
4. リクエストフローのトレース(HIGH)
trace-phase-handler-flow- HTTP フェーズハンドラーを通るリクエストの流れをトレースするtrace-subrequest-tree- デバッグ用にサブリクエストの親子関係を図示するtrace-filter-chain-order- フィルターチェーンの実行順序とデータフローをトレースするtrace-upstream-callback-seq- プロキシのデバッグ用にアップストリームのコールバック順序をトレースするtrace-event-handler-chain- 接続のデバッグ用にイベントハンドラーの実行をトレースするtrace-config-inheritance- server ブロックと location ブロックを通じた設定の継承をトレースする
5. デバッグログのパターン(MEDIUM-HIGH)
dbglog-debug-mask- 対象を絞ったログフィルタリングに適したデバッグマスクを使用するdbglog-debug-connection- debug_connection を使って、単一クライアントのデバッグ出力を分離するdbglog-memory-buffer- メモリバッファーロギングを使い、ディスク I/O を行わずにデバッグ出力を取得するdbglog-log-action-string- エラーメッセージにコンテキストを示すログアクション文字列を設定するdbglog-format-ngx-str- デバッグログメッセージで ngx_str_t を正しくフォーマットする
6. 状態とライフサイクルのデバッグ(MEDIUM)
state-connection-lifecycle- ライフサイクルのデバッグ用に接続状態の遷移を追跡するstate-upstream-state-machine- 遷移点をログに記録してアップストリームモジュールの状態をデバッグするstate-timer-leak- プールの破棄前にイベントが削除されずに発生するタイマーリークを検出するstate-event-flag-debug- イベントフラグを調べ、予期しないハンドラーの呼び出しをデバッグするstate-request-count-track- リクエストの参照カウントを追跡し、早期破棄をデバッグする
7. 動的トレースツール(MEDIUM)
probe-strace-syscall- strace を使って nginx ワーカーのシステムコールパターンをトレースするprobe-dtrace-request- DTrace pid プロバイダーを使ってリクエスト処理をトレースするprobe-systemtap-pool- SystemTap を使ってメモリプールの割り当てをトレースするprobe-ebpf-latency- eBPF プローブを使って関数ごとのレイテンシを測定するprobe-strace-fd-leak- strace と /proc を使ってファイルディスクリプターのリークを検出する
8. ビルドとサニタイザーの設定(低〜中)
build-debug-flags- 完全なデバッグシンボルを付け、最適化を無効にして nginx をコンパイルしますbuild-asan-configure- メモリエラーを検出するために、AddressSanitizer を使用して nginx をビルドしますbuild-single-process- デバッグを簡素化するために、シングルプロセスモードを使用しますbuild-valgrind-suppressions- nginx の Valgrind 抑制設定を使用して、誤検知を減らしますbuild-debug-palloc- 細かなプール割り当て追跡のために NGX_DEBUG_PALLOC を有効にします
使用方法
詳しい説明とコード例については、各リファレンスファイルを参照してください。
- セクションの定義 - カテゴリーの構成と影響レベル
- ルールのテンプレート - 新しいルールを追加するためのテンプレート
リファレンスファイル
| ファイル | 説明 |
|---|---|
| references/_sections.md | カテゴリーの定義と順序 |
| assets/templates/_template.md | 新しいルール用のテンプレート |
| metadata.json | バージョンとリファレンス情報 |
コメント
Markdown 対応