Azure App Service でのアプリのパフォーマンス低下に関する問題のトラブルシューティングTroubleshoot slow app performance issues in Azure App Service

この記事は、Azure App Service でのアプリのパフォーマンス低下に関する問題のトラブルシューティングに役立ちます。This article helps you troubleshoot slow app performance issues in Azure App Service.

この記事についてさらにヘルプが必要な場合は、いつでも MSDN の Azure フォーラムとスタック オーバーフロー フォーラムで Azure エキスパートに問い合わせることができます。If you need more help at any point in this article, you can contact the Azure experts on the MSDN Azure and the Stack Overflow forums. または、Azure サポート インシデントを送信できます。Alternatively, you can also file an Azure support incident. その場合は、 Azure サポートのサイト に移動して、 [サポートの要求] をクリックします。Go to the Azure Support site and click on Get Support.

症状Symptom

ブラウザーでアプリにアクセスしたときのページの読み込みが遅く、タイムアウトすることもある。When you browse the app, the pages load slowly and sometimes timeout.

原因Cause

この症状は多くの場合、アプリケーション レベルの問題が原因で発生します。その例を次に示します。This problem is often caused by application level issues, such as:

  • ネットワーク要求に時間がかかっているnetwork requests taking a long time
  • アプリケーション コードまたはデータベース クエリが効率的でないapplication code or database queries being inefficient
  • アプリケーションのメモリ/CPU 使用率が高いapplication using high memory/CPU
  • 例外が発生してアプリケーションがクラッシュするapplication crashing due to an exception

トラブルシューティングの手順Troubleshooting steps

トラブルシューティングは、大きく次の 3 つのタスクに分けられます。この 3 つのタスクを上から順に行います。Troubleshooting can be divided into three distinct tasks, in sequential order:

  1. アプリケーションの動作を観察、監視するObserve and monitor application behavior
  2. データを収集するCollect data
  3. 問題を緩和するMitigate the issue

App Service ではステップごとにさまざまなオプションを使用できます。App Service gives you various options at each step.

1.アプリケーションの動作を観察、監視する1. Observe and monitor application behavior

サービス正常性を追跡するTrack Service health

Microsoft Azure は、サービスの中断やパフォーマンスの低下があるたびに、毎回公表します。Microsoft Azure publicizes each time there is a service interruption or performance degradation. サービスの正常性は、Azure Portal で追跡できます。You can track the health of the service on the Azure portal. 詳細については、サービスの正常性の追跡に関するページを参照してください。For more information, see Track service health.

アプリを監視するMonitor your app

Web アプリに問題が発生しているかどうかは、アプリを監視することによって確認することができます。This option enables you to find out if your application is having any issues. アプリのブレードで [要求とエラー] タイルをクリックします。In your app’s blade, click the Requests and errors tile. [メトリック] ブレードには、追加できるすべてのメトリックが表示されます。The Metric blade shows you all the metrics you can add.

アプリに関しては、次のメトリックを監視するようお勧めします。Some of the metrics that you might want to monitor for your app are

  • 平均メモリ ワーキング セットAverage memory working set
  • 平均応答時間Average response time
  • CPU 時間CPU time
  • メモリ ワーキング セットMemory working set
  • RequestsRequests

アプリのパフォーマンスを監視する

詳細については、次を参照してください。For more information, see:

Web エンドポイントの状態を監視するMonitor web endpoint status

アプリを Standard 価格レベルで実行している場合、App Service で 3 つの地域から 2 つのエンドポイントを監視することができます。If you are running your app in the Standard pricing tier, App Service lets you monitor two endpoints from three geographic locations.

エンドポイント監視では、地理的に分散した場所から Web URL の応答時間とアップタイムをテストする Web テストを構成します。Endpoint monitoring configures web tests from geo-distributed locations that test response time and uptime of web URLs. このテストでは、Web URL に対して HTTP get 操作を実行し、各場所から応答時間とアップタイムを測定します。The test performs an HTTP GET operation on the web URL to determine the response time and uptime from each location. 構成された各場所では、テストを 5 分ごとに実行します。Each configured location runs a test every five minutes.

アップタイムは HTTP 応答コードを使用して監視され、応答時間はミリ秒単位で測定されます。Uptime is monitored using HTTP response codes, and response time is measured in milliseconds. HTTP 応答コードが 400 以上である場合、または、応答に 30 秒以上かかる場合、監視テストは失敗します。A monitoring test fails if the HTTP response code is greater than or equal to 400 or if the response takes more than 30 seconds. すべての指定した場所から監視テストが成功した場合、エンドポイントは利用可能と見なされます。An endpoint is considered available if its monitoring tests succeed from all the specified locations.

セットアップ方法については、「Azure App Service のアプリの監視」を参照してください。To set it up, see Monitor apps in Azure App Service.

また、「 Keeping Azure Web Sites up plus Endpoint Monitoring with Stefan Schackow (Azure の Web サイトの保持とエンドポイントの監視 - Stefan Schackow 共演) 」で、エンドポイント監視に関するビデオをご覧いただけます。Also, see Keeping Azure Web Sites up plus Endpoint Monitoring - with Stefan Schackow for a video on endpoint monitoring.

拡張機能を使用したアプリケーション パフォーマンスの監視Application performance monitoring using Extensions

"サイト拡張機能" を使用して、アプリケーションのパフォーマンスを監視することもできます。You can also monitor your application performance by using a site extension.

App Service アプリにはそれぞれ拡張可能な管理エンドポイントが用意されており、サイト拡張機能としてデプロイされている強力なツール一式を使用することができます。Each App Service app provides an extensible management end point that allows you to use a powerful set of tools deployed as site extensions. 次のような拡張機能があります。Extensions include:

  • Azure DevOps などのソース コード エディター。Source code editors like Azure DevOps.
  • アプリに接続されている MySQL データベースのような、接続されたリソース用の管理ツール。Management tools for connected resources such as a MySQL database connected to an app.

Azure Application Insights というパフォーマンス監視を目的としたサイト拡張機能も使用できます。Azure Application Insights is a performance monitoring site extension that's also available. Application Insights を使用するには、SDK でコードをリビルドします。To use Application Insights, you rebuild your code with an SDK. 追加データへのアクセスを提供する拡張機能をインストールすることもできます。You can also install an extension that provides access to additional data. SDK では、アプリの使用状況とパフォーマンスをさらに詳細に監視するコードを記述できます。The SDK lets you write code to monitor the usage and performance of your app in more detail. 詳細については、「Web アプリケーションのパフォーマンスを監視する」を参照してください。For more information, see Monitor performance in web applications.

2.データを収集する2. Collect data

App Service は、Web サーバーと Web アプリケーションの両方のログ情報を診断する機能を備えています。App Service provides diagnostic functionality for logging information from both the web server and the web application. 情報は Web サーバー診断とアプリケーション診断に分けられます。The information is separated into web server diagnostics and application diagnostics.

Web サーバー診断を有効にするEnable web server diagnostics

次の種類のログを有効または無効にできます。You can enable or disable the following kinds of logs:

  • 詳細なエラー ログ - 障害 (状態コード 400 以上) を示す HTTP 状態コードの詳細なエラー情報。Detailed Error Logging - Detailed error information for HTTP status codes that indicate a failure (status code 400 or greater). このログには、サーバーがエラー コードを返した理由を特定するために役立つ情報が記録されている場合があります。This may contain information that can help determine why the server returned the error code.
  • 失敗した要求トレース - 要求の処理に使用された IIS コンポーネントのトレースや各コンポーネントにかかった時間など、失敗した要求の詳細情報。Failed Request Tracing - Detailed information on failed requests, including a trace of the IIS components used to process the request and the time taken in each component. これは、アプリのパフォーマンスを向上したり、特定の HTTP エラーの原因を分離しようとする場合に役立ちます。This can be useful if you are attempting to improve app performance or isolate what is causing a specific HTTP error.
  • Web サーバーのログ記録 - W3C 拡張ログ ファイル形式を使用した、HTTP トランザクションに関する情報。Web Server Logging - Information about HTTP transactions using the W3C extended log file format. これは、サイトで処理された要求の数や特定の IP アドレスからの要求の数などのアプリの全体的なメトリックを特定するときに役立ちます。This is useful when determining overall app metrics, such as the number of requests handled or how many requests are from a specific IP address.

アプリケーション診断を有効にするEnable application diagnostics

App Service からアプリケーションのパフォーマンス データを収集するためのオプションは、いくつかあります。Visual Studio からライブでアプリケーションをプロファイルしたり、より多くの情報とトレースをログ記録するようにアプリケーション コードを変更したりできます。There are several options to collect application performance data from App Service, profile your application live from Visual Studio, or modify your application code to log more information and traces. アプリケーションへのアクセスの量と、監視ツールでの観察結果に基づいて、オプションを選択できます。You can choose the options based on how much access you have to the application and what you observed from the monitoring tools.

Application Insights Profiler を使用するUse Application Insights Profiler

Application Insights Profiler を有効にすると、詳細なパフォーマンス トレースのキャプチャを開始することができます。You can enable the Application Insights Profiler to start capturing detailed performance traces. 過去に生じた問題を調査する必要がある場合は、最大で 5 日前までのキャプチャされたトレースにアクセスすることができます。You can access traces captured up to five days ago when you need to investigate problems happened in the past. Azure portal でアプリの Application Insights リソースにアクセスできる場合は、このオプションを選択することができます。You can choose this option as long as you have access to the app's Application Insights resource on Azure portal.

Application Insights Profiler は、各 Web 呼び出しの応答時間に関する統計と、応答が遅くなる原因となったコード行を示すトレースを提供します。Application Insights Profiler provides statistics on response time for each web call and traces that indicates which line of code caused the slow responses. 一部のコードがパフォーマンスの高い方法で書かれていないために、App Service アプリが低速になることがあります。Sometimes the App Service app is slow because certain code is not written in a performant way. 例としては、並列で実行できる順次コードや、予期しないデータベースのロック競合などがあります。Examples include sequential code that can be run in parallel and undesired database lock contentions. このようなコード内のボトルネックは、除去するとアプリのパフォーマンスが向上しますが、綿密なトレースとログを設定せずに検出することは困難です。Removing these bottlenecks in the code increases the app's performance, but they are hard to detect without setting up elaborate traces and logs. Application Insights Profiler によって収集されたトレースは、アプリケーションの速度低下に繋がったコード行を特定し、App Service アプリのこの問題を解決するために役立ちます。The traces collected by Application Insights Profiler helps identifying the lines of code that slows down the application and overcome this challenge for App Service apps.

詳しくは、「Profiling live apps in Azure App Service with Application Insights (Application Insights を使用して実行中の Azure App Service アプリのプロファイリングを行う)」をご覧ください。For more information, see Profiling live apps in Azure App Service with Application Insights.

リモート プロファイリングの使用Use Remote Profiling

Azure App Service では、Web アプリ、API アプリ、モバイル バック エンドおよび WebJobs をリモートからプロファイリングすることができます。In Azure App Service, web apps, API apps, mobile back ends, and WebJobs can be remotely profiled. アプリ リソースにアクセスでき、問題の再現方法を把握しているか、パフォーマンスの問題が発生する正確な時間間隔がわかっている場合に、このオプションを選択します。Choose this option if you have access to the app resource and you know how to reproduce the issue, or if you know the exact time interval the performance issue happens.

Remote Profiling は、プロセスの CPU 使用率が高く、プロセスの実行が予想より遅いか、HTTP 要求の待ち時間が通常よりも長い場合に、プロセスをリモートでプロファイルし、CPU サンプリング呼び出し履歴を取得して、プロセスのアクティビティとコードのホット パスを分析することができて便利です。Remote Profiling is useful if the CPU usage of the process is high and your process is running slower than expected, or the latency of HTTP requests are higher than normal, you can remotely profile your process and get the CPU sampling call stacks to analyze the process activity and code hot paths.

詳細については、「Remote Profiling support in Azure App Service (Azure App Service におけるリモート プロファイリングのサポート)」を参照してください。For more information, see Remote Profiling support in Azure App Service.

診断トレースを手動でセットアップするSet up diagnostic traces manually

Web アプリケーションのソース コードにアクセスできる場合は、アプリケーション診断を使用すると、Web アプリケーションによって生成された情報をキャプチャすることができます。If you have access to the web application source code, Application diagnostics enables you to capture information produced by a web application. ASP.NET アプリケーションは、 System.Diagnostics.Trace クラスを使用してアプリケーション診断ログに情報を記録できます。ASP.NET applications can use the System.Diagnostics.Trace class to log information to the application diagnostics log. ただし、コードを変更し、アプリケーションを再デプロイする必要があります。However, you need to change the code and redeploy your application. この方法は、アプリをテスト環境で実行している場合にお勧めします。This method is recommended if your app is running on a testing environment.

アプリケーションのログを構成する詳細な手順については、「Enable diagnostics logging for apps in Azure App Service (Azure App Service のアプリの診断ログの有効化)」をご覧ください。For detailed instructions on how to configure your application for logging, see Enable diagnostics logging for apps in Azure App Service.

診断ツールの使用Use the diagnostics tool

App Service には、アプリのトラブルシューティングに役立つ構成不要のインテリジェントな対話型のエクスペリエンスが用意されています。App Service provides an intelligent and interactive experience to help you troubleshoot your app with no configuration required. アプリに問題が発生した場合、診断ツールは問題点を指摘し、その問題のトラブルシューティングをすばやく簡単に行って解決するための適切な情報へとユーザーをガイドします。When you do run into issues with your app, the diagnostics tool will point out what’s wrong to guide you to the right information to more easily and quickly troubleshoot and resolve the issue.

App Service 診断にアクセスするには、Azure Portal の App Service アプリまたは App Service 環境に移動します。To access App Service diagnostics, navigate to your App Service app or App Service Environment in the Azure portal. 左側のナビゲーションで、 [問題の診断と解決] をクリックします。In the left navigation, click on Diagnose and solve problems.

Kudu デバッグ コンソールを使用するUse the Kudu Debug Console

App Service には、ファイルのデバッグ、調査、アップロード用のデバッグ コンソールのほか、ご利用の環境についての情報を入手するための JSON エンドポイントが用意されています。App Service comes with a debug console that you can use for debugging, exploring, uploading files, as well as JSON endpoints for getting information about your environment. このコンソールは、アプリの "Kudu コンソール" または "SCM ダッシュボード" と呼ばれます。This console is called the Kudu Console or the SCM Dashboard for your app.

ダッシュボードには、https://<アプリ名>.scm.azurewebsites.net/ リンクからアクセスできます。You can access this dashboard by going to the link https://<Your app name>.scm.azurewebsites.net/.

Kudu には次のような機能があります。Some of the things that Kudu provides are:

  • アプリケーションの環境設定environment settings for your application
  • ログ ストリームlog stream
  • 診断ダンプdiagnostic dump
  • デバッグ コンソール (Powershell のコマンドレットや基本的な DOS コマンドを実行可能)debug console in which you can run Powershell cmdlets and basic DOS commands.

Kudu にはもう 1 つ便利な機能があり、アプリケーションからファーストチャンス例外がスローされた場合に、Kudu と SysInternals ツール Procdump を使用してメモリ ダンプを作成することができます。Another useful feature of Kudu is that, in case your application is throwing first-chance exceptions, you can use Kudu and the SysInternals tool Procdump to create memory dumps. このメモリ ダンプはプロセスのスナップショットです。アプリに関して、通常より複雑な問題をトラブルシューティングできる場合も少なくありません。These memory dumps are snapshots of the process and can often help you troubleshoot more complicated issues with your app.

Kudu で利用できる機能の詳細については、知っておくべき Azure DevOps ツールに関するページを参照してください。For more information on features available in Kudu, see Azure DevOps tools you should know about.

3.問題を緩和する3. Mitigate the issue

アプリをスケーリングするScale the app

Azure App Service では、アプリケーションが実行されるスケールを調整することによって、パフォーマンスとスループットを高めることができます。In Azure App Service, for increased performance and throughput, you can adjust the scale at which you are running your application. アプリのスケール アップには、2 つの関連する措置が伴います。1 つは、App Service プランの価格レベルを引き上げること、もう 1 つは、価格レベルを引き上げた後に特定の設定を構成することです。Scaling up an app involves two related actions: changing your App Service plan to a higher pricing tier, and configuring certain settings after you have switched to the higher pricing tier.

スケーリングの詳細については、Azure App Service でのアプリのスケーリングに関する記事を参照してください。For more information on scaling, see Scale an app in Azure App Service.

さらに、アプリケーションを複数のインスタンスで実行することもできます。Additionally, you can choose to run your application on more than one instance. スケールアウトすると、処理能力が向上するだけでなく、ある程度のフォールト トレランスを確保することができます。Scaling out not only provides you with more processing capability, but also gives you some amount of fault tolerance. 1 つのインスタンスでプロセスがダウンしても、他のインスタンスが要求の処理を続行します。If the process goes down on one instance, the other instances continue to serve requests.

スケーリングは、[手動] または [自動] に設定することができます。You can set the scaling to be Manual or Automatic.

AutoHeal を使用するUse AutoHeal

AutoHeal は、選択された設定 (構成の変更、要求、メモリに基づく制限、要求の実行に必要な時間など) に従って、アプリのワーカー プロセスをリサイクルします。AutoHeal recycles the worker process for your app based on settings you choose (like configuration changes, requests, memory-based limits, or the time needed to execute a request). ほとんどの場合、問題を回復するための一番の近道は、プロセスをリサイクルすることです。Most of the time, recycle the process is the fastest way to recover from a problem. アプリはいつでも、Azure portal 内から直接再起動できますが、AutoHeal はユーザーの介入なしでアプリの再起動を自動的に実行します。Though you can always restart the app from directly within the Azure portal, AutoHeal does it automatically for you. 必要な作業は、アプリのルート web.config にいくつかのトリガーを追加することだけです。All you need to do is add some triggers in the root web.config for your app. アプリケーションが .NET アプリ以外でも、これらの設定は同じように作用します。These settings would work in the same way even if your application is not a .NET app.

詳細については、 Azure Web Sites の自動復旧に関するページを参照してください。For more information, see Auto-Healing Azure Web Sites.

アプリを再起動するRestart the app

1 回限りの問題であれば、通常は再起動が最も簡単な復旧方法です。Restarting is often the simplest way to recover from one-time issues. アプリを停止または再起動するためのオプションは、Azure portal のアプリ ブレードにあります。On the Azure portal, on your app’s blade, you have the options to stop or restart your app.

パフォーマンスの問題を解決するためにアプリを再起動する

アプリの管理には、Azure PowerShell を使用することもできます。You can also manage your app using Azure Powershell. 詳細については、 リソース マネージャーでの Azure PowerShell の使用をご覧ください。For more information, see Using Azure PowerShell with Azure Resource Manager.