ページの読み込みが遅く、いつまでも完了しないような状況でイライラした経験はありませんか?最近、旅行業界のお客様がまさにそのような状況に直面されました。原因不明のまま、一部の web API リクエストに 200ms もの遅延が発生していたのです。

OpenResty XRay が問題解決に貢献し、長時間遅延の根本原因を迅速に特定することができました。本稿では、OpenResty XRay の「スマートパケットキャプチャ」機能を活用し、本番サーバーのパフォーマンスに影響を与えることなく、遅延の発生している(または他のエラーが発生している)TCP 接続のパケットのみを捕捉する方法をご紹介いたします。

課題

本来であれば迅速に処理されるべき API リクエストに、200ms もの処理時間を要していました。

遅延の原因には様々な要因が考えられます。例えば、ディスク I/O の低速化、カーネルのネットワークスタックや他のネットワーク機器におけるパケットロス、CPU 使用率の上昇によるアプリケーションや web サーバーの応答速度低下、あるいは単にネットワーク接続の品質低下などが挙げられます。このように複数の要因が疑われる状況では、OpenResty XRay のような動的トレーシングツールを使用することで、より効率的に問題解決を図ることが可能です。

分析プロセス

レスポンス遅延の分布

OpenResty XRay は、まずお客様の本番環境における web サーバー(この場合は OpenResty または Nginx web サーバー)で処理されているリクエストのサンプリングを実施しました。OpenResty XRay の大きな利点は、稼働中のユーザープロセスに変更を加えることなく、オンラインのアプリケーションやサーバーを安全に分析できる点にあります。

その後、レスポンス遅延に関する以下の対数分布図が自動的に生成されました。

time-distr

注目すべき点として、131ms から 262ms の範囲で遅延が発生している 5 件のリクエストが確認されました。

最も遅延の大きいリクエスト

OpenResty XRay は、最も遅延の大きいリクエストの URI やその他の情報も自動的に収集しました。

connection

プライバシー保護の観点から、Host 名は変更して表示しております。

上記の表から、すべての遅延リクエストが URI /view/shopcart/ に対するものであることが判明しました。

スマートパケットキャプチャ

OpenResty XRay の特徴的な機能の一つとして、関心のある TCP 接続のみを対象としたネットワークパケットの捕捉・分析が可能です。今回のケースでは、リクエスト遅延が 100ms を超える TCP 接続のみを対象としました。

OpenResty XRay は遅延の発生している TCP 接続を自動的に識別し、そのパケットを捕捉しました。OpenResty XRay の web コンソールに表示されたサンプルの一つが以下の通りです。

connection

このグラフでは、小さな円がサーバーの ingress パケットを、四角が egress パケットを表しています。

グラフ上で、約 200ms の著しい遅延を示すパケットが確認されました。これは「ACK+PUSH」パケットで、小さな円で表示されていることから、クライアントから送信された入力(ingress)パケットであることが分かります。

この点から、アプリケーションサーバーやゲートウェイ web サーバーに起因する問題ではないことが判明しました。この追加の 200ms の遅延は、クライアント側もしくはクライアントとサーバー間のネットワーク接続に起因するものと考えられます。

原因の特定

クライアントとサーバー間のネットワーク接続に問題がないかどうかの確認は容易でした。お客様は Android モバイルアプリケーションのクライアントサイドの調査に着手されました。

その結果、クライアントソフトウェアが意図的にリクエストヘッダーとリクエストボディの送信間に 200ms の遅延を挿入していたことが判明しました。これで謎が解けました!

改善後の結果

お客様がクライアントアプリケーションの追加遅延を修正された後の OpenResty XRay による新しいリクエスト遅延分布図では、200ms の長時間遅延が解消されていることが確認できます。

connection

完全自動化された分析

OpenResty XRay は、対象プロセスのサンプリングに適切なアナライザーを自動選択し、生成されたフレームグラフを自動分析した上で、分析結果を理解しやすい形式で自動分析レポートとして提示します。これにより、お客様はサーバーを常時監視する必要がなく、適切なアナライザーを手動で実行する必要もなく、さらにはアナライザーによるサンプリング結果を理解する必要もありません。

OpenResty XRay 日报

OpenResty XRay について

OpenResty XRay動的トレーシング製品であり、実行中のアプリケーションを自動的に分析して、パフォーマンスの問題、動作の問題、セキュリティの脆弱性を解決し、実行可能な提案を提供いたします。基盤となる実装において、OpenResty XRay は弊社の Y 言語によって駆動され、Stap+、eBPF+、GDB、ODB など、様々な環境下で複数の異なるランタイムをサポートしております。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty XRay(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英語版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!