Azure App Service の Tomcat で Javaのヒープサイズを変更する

Azure App Service の Tomcat で Javaのヒープサイズを変更する

Azure App Service Webapps では、説明するにも今さらなのですが。Tomcat や Jetty などの、Web コンテナが普通に動作します。
しかし、ある程度の規模のアプリケーションになってくると、よく出てくるのは以下のお話しです。

ヒープサイズを変更したい

このチューニングは、Java周りではよく見かける定番のチューニングでもありますし、ヒープが足りなくて・・・

Out of memory で Exception 吐き出すのですとか、そういう話は良くあることです。
null ツッコんででも、GC 走らせろとか開発時なら遠慮なくスパルタな事を言うのですが、そんな事いうとみんな逃げ出してしまうので、今回はヒープサイズを調整する事にしました。

WebApp の設定を変更

サイトを作成したら、とりあえずTomcat8でも動かすことにします。
アプリケーションの設定から、以下のように設定をするとよいでしょう。

1

サイトの確認

設定できたら、検証のために一度サイトをみてください。参照をクリックすれば、サイトの確認ができます。

2

Kuduへ移動

メモリや追加設定の為にKuduに移動します。
サイトからツールをクリックして、Kuduをクリックすれば、Kuduに移動する為のリンクが出てきます。
Go をクリックして、Kuduへ移動してください。

3

現在の稼働メモリの状況を確認

ざっくりではありますが、Kudu の Process Explorer より現在のJavaプロセスの稼働メモリの量を確認しておきましょう。プロセスを右クリックして、プロパティを見れば、起動時の詳細なオプションなども確認する事ができます。

4

web.configを設定

今回は、わざわざ独自のJavaや独自にTomcatなどを配置せず、Javaのオプションを変更する最小限のオプションを指定しています。
以下のパスに web.config を設置します。

5

なお、Javaのヒープサイズオプションは以下の通りです。

  • -Xms 初期ヒープサイズ(全体)
  • -Xmx 最大ヒープサイズ(全体)

web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <handlers>
        <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
    </handlers>
    <httpPlatform processPath="%AZURE_TOMCAT8_HOME%\bin\startup.bat" arguments="">
      <environmentVariables>
        <environmentVariable name="JAVA_OPTS" value="-Xmx2048m -Xms2048m -Djava.net.preferIPv4Stack=true" />
      </environmentVariables>
    </httpPlatform>
  </system.webServer>
</configuration>

ヒープサイズオプション サイズ
-Xms 初期ヒープサイズ(全体)
-Xmx 最大ヒープサイズ(全体)

設定の確認

6

ポータルからサイトの再起動を行った後に、再度KuduのProcess ExplorerからメモリやJavaの起動オプションを確認してみてください。設定が反映されています。