normalian blog

Let's talk about Microsoft Azure, ASP.NET and Java!

Azure Websites で Tomcat や Jetty を運用する場合の注意点

Websites は Java にも対応しており、工夫次第では Java EE アプリも稼働させることのできることができることは本ブログで紹介済みだ。今回は Websites で Java アプリケーションを運用する際の注意を記載する(というよりは httpPlatformHandler を使ってるアプリは全部な気もするが)。

まず、Websites には 無料, 共有, 基本, 標準 と呼ばれる動作モードがあるが、この際に無料を使う場合にいくつか制限が存在している。Windows Azure Web サイトのスケール アップとスケール アウト に記載があるが、特に注意すべきは以下の記載だ。

無料モードは、他の無料モードや共有モードのサイトと同じコンピューティング リソース
で実行されます。また、一定のクォータ期間のサイト (およびサブスクリプション内の他
の無料サイト) の CPU 使用時間が制限されています。使用時間が制限に達した場合、その
サイトおよびサブスクリプション内にある他の無料モードのサイトで、次のクォータ期間
までコンテンツおよびデータのサービスが停止されます。また、無料モードではサイトが
クライアントへサービスを提供する際のデータ量 (データ送信) の制限があります

上記の記載は「無料で使ってしばらく運用してる場合、ほっとくと Tomcat や Jetty のプロセス落とすから気を付けて」といっている。
実際、数時間放置して TomcatEE 等をデプロイした無料の Azure Websites にアクセスすると、以下の様にレスポンスが帰ってこずにエラーとなる(2回目、3回目のアクセスは再度プロセスが起動しなおされているので瞬時にレスポンスが来る)。
f:id:waritohutsu:20150122212936p:plain:w500

こちらを回避する方法はいたってシンプルで、Websites の「常時接続」機能を利用すればよい。Azure Websites でバックグラウンド タスクを実行して Web ジョブを使用する方法 に以下の記載がある。

[WACOM.NOTE] 連続的に実行するタスクについては、Web サイトの [構成] ページで 
[常時接続] を有効にすることをお勧めします。[常時接続] は [基本] と [標準] の
モードで使用できる機能であり、この機能を有効にすると、アイドル状態がしばらく
続いても Web サイトがアンロードされなくなります。Web サイトが常に読み込まれ
ていれば、連続的に実行するタスクをより高い信頼性で実行できます。

残念ながら「無料」モードでは利用できないが、「スケール」タブから[基本]か[標準]を選択して保存した後、「構成」タブから以下を参考に 常時接続 を選択する。
f:id:waritohutsu:20150122213049p:plain

実際に「無料」モードと「標準&常時接続」モードの運用結果を比べてみた。
f:id:waritohutsu:20150122213147p:plain

上記で分かる通り、無料側では catalina.xxxxxxxx.log が大量に作成されている(もちろん標準&常時接続側にも日次リクエストは投げている)。中身は Tomcat の起動ログであり、CPU 使用時間の制限でサービスが停止された後、リクエストが来た際に Tomcat が再起動したものが出力されている。