xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

起動速度は?メモリ使用量は?Azure App Service における環境ごと (Windows / Linux) の ASP.NET Core 実行時のパフォーマンス差を調べてみた!

業務で (最近では副業でも) ずっと利用している Azure App Service!大変便利で使いやすく、大好きです。ところで最近の風潮的には ASP.NET Core も Docker とか Linux インスタンスでホストするのがポピュラーな感じがします。時代は Linux、ということなんでしょうか。

我らが (?) App Service は Windows インスタンスと Linux インスタンスのどちらも対応しているので、Windows / Linux の両インスタンスの実行時のパフォーマンスの違いをザックリ調べてみたくなりました。というのも、なんか体感的に Linux の起動が Windows よりも遅い気がしたので気になりました。気になったから駆動調査。

あ、「いかがでしたかブログ」的なタイトルはただただ付けてみたかっただけです。深い意味はありません!

メモリ使用量

それぞれの環境にホストしたときのインスタンスのご様子を Application Insights の Live Metrics Stream で確認してみます。結果は以下の通り。だいぶ違いますね。

環境 Committed Memory
Windows 47 MB
Linux 278 MB

f:id:xin9le:20220121150132p:plain

Windows (IIS)、優秀ですね。

起動速度

次に App Service を「停止 -> 再開」としたときに、画面が表示されるまでの時間を計測します。それぞれ 3 回ずつ計測しました。結果は以下の通りで、これまただいぶ違いますね。

環境 1 回目 2 回目 3 回目 平均
Windows 19 秒 18 秒 15 秒 17.3 秒
Linux 78 秒 101 秒 75 秒 84.6 秒

Windows (IIS)、超優秀ですね...!!

まとめ

いかがでしたか?今回は Azure App Service における環境ごと (Windows / Linux) の ASP.NET Core 実行時のパフォーマンス差を調べてみました。調査結果は載せてないですが、レスポンス速度には特段の差はなさそうでした。App Service の内部実装に明るくないのであくまで勘ではあるのですが、

  • Windows は IIS の内部 API をダイレクトに叩いているから速い
  • Linux は Docker ベースで動いている分のフットプリントが大きい

ということなのかなぁなどと思ってみたりしました。実際にそうなのかを教えてくださる方がいらっしゃったら @xin9le まで!

App Service は Linux インスタンスの方がお安いのでコストメリットはありますが、デプロイ時の初速が気になったり、Kudu の使いやすいさなどを重視する場合は (ちょっとコストがかさんでも) Windows を選択するが良さそうかなって思うなどしました。サーバーのホスト環境としては Windows にも Linux にも拘りないですし。