業務で (最近では副業でも) ずっと利用している 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 |
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 にも拘りないですし。