← Back
Nginx

OpenResty のインストール — 全プラットフォーム対応セットアップガイド

  • 対応プラットフォーム
  • クイックスタート(Ubuntu / Debian)
  • プラットフォーム別インストールガイド
  • ARM64 / Aarch64
  • Alpine Linux
  • macOS とソースビルド
  • インストールの確認
  • FAQ
  • 対応プラットフォーム
  • クイックスタート(Ubuntu / Debian)
  • プラットフォーム別インストールガイド
  • ARM64 / Aarch64
  • Alpine Linux
  • macOS とソースビルド
  • インストールの確認
  • FAQ

ビルド不要・Nginx ゲートウェイだけで実現する 120 MB/s のリアルタイム JS/CSS/HTML 圧縮

  • 「解決済み」が通用しない 3 つの現場
  • なぜ「正規表現で置換すればいい」では通用しないのか
  • Lua で正規表現を書いた、その先に待っていたもの
  • openresty-minifiers の設計:3 つの制約をどう同時に満たすか
  • 5 分で動かす:最小構成の nginx 設定例
  • 「解決済み」が通用しない 3 つの現場
  • なぜ「正規表現で置換すればいい」では通用しないのか
  • Lua で正規表現を書いた、その先に待っていたもの
  • openresty-minifiers の設計:3 つの制約をどう同時に満たすか
  • 5 分で動かす:最小構成の nginx 設定例

OpenResty XRay 入門:コードを変更せずに、システム深層の「鼓動」を聴く

  • OpenResty XRay が実現する究極の可観測性基盤
  • シグナルからインサイトへ
  • 次世代のクラウドネイティブ・エンジニアリング
  • オープンなエコシステムと堅牢な技術基盤
  • OpenResty XRay が実現する究極の可観測性基盤
  • シグナルからインサイトへ
  • 次世代のクラウドネイティブ・エンジニアリング
  • オープンなエコシステムと堅牢な技術基盤

OpenResty の隠れたメモリリークを無停止で特定する手法(Zero Downtime)

  • 本番環境におけるメモリリークの徹底解剖
  • なぜ、このような問題は解決が極めて困難なのか?
  • 「運任せ」から「予測可能」なシステムへ
  • パフォーマンス問題が「ツール」の域を超える時
  • 本番環境におけるメモリリークの徹底解剖
  • なぜ、このような問題は解決が極めて困難なのか?
  • 「運任せ」から「予測可能」なシステムへ
  • パフォーマンス問題が「ツール」の域を超える時

Nginx リバースプロキシの QPS が 15 分の 1 に低下:upstream keepalive の欠落と -O0 ビルドが原因だった

  • Nginx リバースプロキシが 15 分の 1 に低速化、それでもエラーログはゼロ
  • フレームグラフが暴いた接続ストーム:upstream keepalive の欠落
  • 残り 10% の差:ベースライン比較がコンパイラを指し示す
  • -O0 デバッグビルドが 10% の性能を奪っていた
  • Nginx リバースプロキシが 15 分の 1 に低速化、それでもエラーログはゼロ
  • フレームグラフが暴いた接続ストーム:upstream keepalive の欠落
  • 残り 10% の差:ベースライン比較がコンパイラを指し示す
  • -O0 デバッグビルドが 10% の性能を奪っていた

「Nginx 再起動」という脆弱性:ダウンタイムゼロで実現する TLS 鍵ローテーションの最適解

  • Session Ticket Key 管理が見た目より難しい理由
  • lua-resty-tls-session が再起動なしで Session Ticket Key をローテーションする仕組み
  • 3 つのアプローチの比較
  • レイテンシ削減と稼働率向上の定量化
  • FAQ
  • Session Ticket Key 管理が見た目より難しい理由
  • lua-resty-tls-session が再起動なしで Session Ticket Key をローテーションする仕組み
  • 3 つのアプローチの比較
  • レイテンシ削減と稼働率向上の定量化
  • FAQ

Nginx C++ モジュールのメモリリーク:本番環境で再起動なしに根本原因を特定

  • 本番環境の難題:GDB でデバッグできない C++ モジュールのメモリリーク
  • フレームグラフで ngx_dubbo_module 内のリーク関数を特定する方法
  • 受動的な対応から能動的な支援へ:XRay が実現するトラブルシューティングの新たなサイクル
  • まとめ
Photo by 章亦春
  • 本番環境の難題:GDB でデバッグできない C++ モジュールのメモリリーク
  • フレームグラフで ngx_dubbo_module 内のリーク関数を特定する方法
  • 受動的な対応から能動的な支援へ:XRay が実現するトラブルシューティングの新たなサイクル
  • まとめ

300 RPS で頭打ちの Nginx Worker プロセス:原因は 75 ミリ秒のイベントループ・ブロッキング

  • 負荷は高いのに仕事が進まない:worker_cpu_affinity 欠落による CPU リソース競合
  • ブロッキング Lua I/O 呼び出しが Nginx イベントループを停止させた仕組み
  • ファイル I/O レイテンシーの測定:1 回あたり最大 1.5 ミリ秒
  • Nginx イベントループのブロッキングはどれほど深刻だったか:43,952 サンプル、最大 75 ミリ秒
  • よくある質問
  • 負荷は高いのに仕事が進まない:worker_cpu_affinity 欠落による CPU リソース競合
  • ブロッキング Lua I/O 呼び出しが Nginx イベントループを停止させた仕組み
  • ファイル I/O レイテンシーの測定:1 回あたり最大 1.5 ミリ秒
  • Nginx イベントループのブロッキングはどれほど深刻だったか:43,952 サンプル、最大 75 ミリ秒
  • よくある質問

クラッシュから根本原因まで:OpenResty XRay が Nginx メモリ破壊問題を明確に分析する方法

  • 事例の背景:ログでは説明できない Nginx ワーカープロセスの頻繁なクラッシュ
  • 記録ファイルの分析:クラッシュを「第一現場」まで巻き戻して再生する
  • 根本原因:Nginx 接続ライフサイクルにおける Use-After-Free
  • よくある質問(FAQ)
Photo by 章亦春
  • 事例の背景:ログでは説明できない Nginx ワーカープロセスの頻繁なクラッシュ
  • 記録ファイルの分析:クラッシュを「第一現場」まで巻き戻して再生する
  • 根本原因:Nginx 接続ライフサイクルにおける Use-After-Free
  • よくある質問(FAQ)

Kong プラグインの CPU 高騰:pcall に隠れた Lua 例外をフレームグラフで特定

  • 問題:トラフィックは低いのに Kong プラグインの CPU が高騰
  • OpenResty XRay のフレームグラフによる CPU ボトルネックの特定
  • 結果:Kong の CPU 使用率が 80% から 50% に低下
Photo by 章亦春
  • 問題:トラフィックは低いのに Kong プラグインの CPU が高騰
  • OpenResty XRay のフレームグラフによる CPU ボトルネックの特定
  • 結果:Kong の CPU 使用率が 80% から 50% に低下

Kong プラグインの CPU・メモリ使用量:最も消費するプラグインをオンラインで特定(OpenResty XRay)

  • サーバープロセス内のすべての Kong プラグインの CPU 使用状況
  • サーバープロセス内のすべての Kong プラグインのメモリ使用状況
  • サーバーへの追加負荷
  • 今後の展開
Photo by 章亦春
  • サーバープロセス内のすべての Kong プラグインの CPU 使用状況
  • サーバープロセス内のすべての Kong プラグインのメモリ使用状況
  • サーバーへの追加負荷
  • 今後の展開

遅延した TCP 接続のみのパケットキャプチャ:Nginx リクエストボディ読み取りの 200ms 遅延を追跡

  • 課題
  • 分析プロセス:遅延した TCP 接続のパケットキャプチャ
  • 完全自動化された分析
  • OpenResty XRay とは
Photo by 章亦春
  • 課題
  • 分析プロセス:遅延した TCP 接続のパケットキャプチャ
  • 完全自動化された分析
  • OpenResty XRay とは

YSQL 言語を使用した Nginx プロセスのリアルタイムリクエスト数カウント

  • run-ysql ツールのインストール方法
  • リアルタイムの総リクエスト数の統計
  • 特定のリクエストのフィルタリング
  • Web コンソールでの YSQL の使用
  • 真の非侵襲的トレーシング
Photo by 章亦春
  • run-ysql ツールのインストール方法
  • リアルタイムの総リクエスト数の統計
  • 特定のリクエストのフィルタリング
  • Web コンソールでの YSQL の使用
  • 真の非侵襲的トレーシング

Lua io.popen が Nginx イベントループをブロックする問題:スループット 150 倍改善の実例

  • 問題点:毎秒 130 リクエスト
  • OpenResty XRay によるブロッキング特定
  • io.popen のノンブロッキング代替
  • 結果:7 倍と 150 倍
  • よくある質問
Photo by Yichun Zhang
  • 問題点:毎秒 130 リクエスト
  • OpenResty XRay によるブロッキング特定
  • io.popen のノンブロッキング代替
  • 結果:7 倍と 150 倍
  • よくある質問

Nginx 正規表現のパフォーマンス:動的トレーシングで遅いパターンを特定

  • 前提条件とセットアップ
  • CPU フレームグラフによる遅い正規表現の特定
  • 正規表現最適化後のパフォーマンス
  • lua_regex_match_limit による PCRE バックトラッキングの制限
  • 非バックトラッキングエンジン:RE2 と OpenResty Regex
  • 正規表現の代替としての Lua 組み込みパターン
  • Docker・Kubernetes 内での正規表現パフォーマンスのトレース
  • 動的トレーシングツールの仕組み
  • ツールのオーバーヘッド:非サンプリング時はゼロ
  • FAQ:Nginx 正規表現のパフォーマンス
  • 前提条件とセットアップ
  • CPU フレームグラフによる遅い正規表現の特定
  • 正規表現最適化後のパフォーマンス
  • lua_regex_match_limit による PCRE バックトラッキングの制限
  • 非バックトラッキングエンジン:RE2 と OpenResty Regex
  • 正規表現の代替としての Lua 組み込みパターン
  • Docker・Kubernetes 内での正規表現パフォーマンスのトレース
  • 動的トレーシングツールの仕組み
  • ツールのオーバーヘッド:非サンプリング時はゼロ
  • FAQ:Nginx 正規表現のパフォーマンス

OpenResty または Nginx プロセスにおける読み込み済み Lua モジュールの一覧表示

  • システム環境
  • 読み込み済み Lua モジュールの名前
  • Web コンソールで直接実行
  • コンテナ内のアプリケーションのトレース
  • ツールの実装方法
  • ツールのオーバーヘッド
Photo by Yichun Zhang
  • システム環境
  • 読み込み済み Lua モジュールの名前
  • Web コンソールで直接実行
  • コンテナ内のアプリケーションのトレース
  • ツールの実装方法
  • ツールのオーバーヘッド

Nginx の CPU 使用率が高い:最も CPU を消費するリクエストを特定する

  • 前提条件と環境のセットアップ
  • どのリクエストのホスト名が最も CPU を消費するか特定する
  • どのリクエスト URI が最も CPU を消費するか特定する
  • さらに深く掘り下げる:なぜ一部のホスト名がより多くの CPU を使うのか
  • Web コンソールでツールを実行する
  • コンテナ内で Nginx の CPU 使用率をトレースする
  • CPU プロファイリングツールの仕組み
  • プロファイリングツールのオーバーヘッド
  • よくある質問
Photo by Yichun Zhang
  • 前提条件と環境のセットアップ
  • どのリクエストのホスト名が最も CPU を消費するか特定する
  • どのリクエスト URI が最も CPU を消費するか特定する
  • さらに深く掘り下げる:なぜ一部のホスト名がより多くの CPU を使うのか
  • Web コンソールでツールを実行する
  • コンテナ内で Nginx の CPU 使用率をトレースする
  • CPU プロファイリングツールの仕組み
  • プロファイリングツールのオーバーヘッド
  • よくある質問

Lua CPU フレームグラフ実践:本番環境で LuaJIT のボトルネックを特定

  • Lua CPU フレームグラフとは
  • 簡単な LuaJIT アプリで精度を検証
  • 本番環境での複雑な LuaJIT アプリのプロファイリング
  • サンプリングオーバーヘッド
  • 本番環境の安全性:ターゲットプロセスを 1 ビットも変更しない
  • 互換性
  • よくある質問
Photo by Guido Jansen
  • Lua CPU フレームグラフとは
  • 簡単な LuaJIT アプリで精度を検証
  • 本番環境での複雑な LuaJIT アプリのプロファイリング
  • サンプリングオーバーヘッド
  • 本番環境の安全性:ターゲットプロセスを 1 ビットも変更しない
  • 互換性
  • よくある質問

OpenResty と Nginx の共有メモリ領域におけるメモリフラグメンテーションの問題

  • 空の共有メモリ領域
  • 類似サイズのエントリで埋める
  • 奇数キーの削除
  • 前半部分のキーの削除
  • メモリフラグメンテーションの緩和
Photo by Elena Mozhvilo
  • 空の共有メモリ領域
  • 類似サイズのエントリで埋める
  • 奇数キーの削除
  • 前半部分のキーの削除
  • メモリフラグメンテーションの緩和

OpenResty と Nginx の共有メモリ領域が物理メモリをどのように消費するか

  • Slab とメモリページ
  • 割り当てられたメモリが必ずしも消費されるわけではない
  • 偽のメモリリーク
  • HUP による再読み込み
Photo by Jose G. Ortega Castro
  • Slab とメモリページ
  • 割り当てられたメモリが必ずしも消費されるわけではない
  • 偽のメモリリーク
  • HUP による再読み込み

OpenResty と Nginx のメモリ割り当てと管理方法

  • Nginx のメモリ使用量を確認する方法
  • システムレベル
  • アプリケーションレベル
  • 従来の Nginx サーバー
  • FAQ: Nginx はどれだけのメモリを必要とするか
Photo by Harrison Broadbent
  • Nginx のメモリ使用量を確認する方法
  • システムレベル
  • アプリケーションレベル
  • 従来の Nginx サーバー
  • FAQ: Nginx はどれだけのメモリを必要とするか
お問い合わせ

ご意見・ご感想をお待ちしております 👋

メッセージを送信しました!

専門家チームが24時間以内にご連絡いたします。
x