Play FrameworkでEhcacheの情報をjconsoleで確認する方法

Play FrameworkではデフォルトのキャッシュとしてEhcacheを使用しています。

ただ、設定の値などを確認するにはいくつかのステップが必要となります。

そのための手順をまとめてみました。

なお、今回はPlay Framework 2.0.x(Java)で確認をしています。

app/Global.java

作成したCacheManagerをManagementService#registerMBeansに登録する必要があります。

Global.javaのonStartあたりに追加しておきます。

参考

  • http://ehcache.org/generated/2.9.0/html/ehc-all/#page/Ehcache_Documentation_Set%2Fco-jmx_jconsole_example.html%23
  • http://d.hatena.ne.jp/Kazuhira/20130811/1376214898
  • http://stackoverflow.com/questions/17682536/how-to-clear-all-cache-in-play-framework-2-1
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.management.ManagementService;
import play.api.cache.EhCachePlugin;


public class Global extends GlobalSettings {

  @Override
  public void onStart(Application app) {
      CacheManager cacheManager =
        Play.application().plugin(EhCachePlugin.class).manager();
      MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
      ManagementService.registerMBeans(
        cacheManager,
        mBeanServer,
        false,
        false,
        true,
        true);

  }

http://d.hatena.ne.jp/Kazuhira/20130811/1376214898

にあるように、registerMBeansのbooleanの4つの引数は

  • CacheManagerをMBeanとして登録する
  • CacheをMBeanとして登録する
  • Cacheの設定情報をMBeanとして登録する
  • Cacheの統計情報をMBeanとして登録する

となります。今回は設定情報と統計情報のみを有効にしました。

PlayのCacheManagerの呼び方は

http://stackoverflow.com/questions/17682536/how-to-clear-all-cache-in-play-framework-2-1

を参考にしています。

Playのアプリケーションを起動しています。

jconsole

以下のコマンドでjconsoleを起動します。クラスパスにehcache-coreのパスを追加しています。

export JAVA_HOME=`/usr/libexec/java_home -v "1.6"`
PATH=${JAVA_HOME}/bin:${PATH}
jconsole -J-Djava.class.path=$JAVA_HOME/lib/jconsole.jar:$JAVA_HOME/lib/tools.jar:/play-2.0.4/repository/local/net.sf.ehcache/ehcache-core/2.5.0/jars/ehcache-core.jar

jconsoleが起動したら、

sbt-launch.jar run

を選択してMBeanのタブを開くとnet.sf.ehcacheが表示されているので、そこからCacheの設定情報及び統計情報が確認できます。

Play FrameworkのCache設定を上書きする方法

さて、設定を上書きする方法ですが、

conf/ehcache.xmlに以下の様なファイルを配置します。(下のパラメータ値はPlay Frameworkのデフォルト設定値です)

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">

    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="false"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
    />

</ehcache>

ちなみに以下の様な設定にするとtimeToIdleSecondsおよびtimeToLiveSecondsがEhcacheのデフォルト値「0」の設定に上書きされるので注意が必要です。

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd" updateCheck="false">

    <defaultCache
            maxElementsInMemory="1000000"
    />

</ehcache>

参考

Play FrameworkにおけるEhcacheの設定

  • http://blog.mwsoft.jp/article/70589384.html
  • http://qiita.com/rabitarochan/items/8db2b343c2c82c4ca892
  • http://treeapps.hatenablog.com/entry/20110908/p1
  • https://gist.github.com/oscarrenalias/5063249
  • http://alvinalexander.com/java/jwarehouse/play-framework-2.3/framework/src/play-cache/src/main/resources/ehcache-default.xml.shtml
  • https://lihaimei.wordpress.com/2014/11/03/ehcache-configuration-in-play-framework/
  • http://qiita.com/opengl-8080/items/f42664769740674176ff
  • http://ehcache.org/documentation/2.6/configuration/cache-size#local-heap
  • http://alvinalexander.com/java/jwarehouse/play-framework-2.3/framework/src/play-cache/src/main/resources/ehcache-default.xml.shtml

各パラメータの内容

  • http://news.mynavi.jp/articles/2010/05/19/ehcache/
  • http://shrkw.hatenablog.com/entry/20091002/1254485293
  • http://takezoe.hatenablog.com/entry/20100516/p1

Ehcacheの統計情報を、JMXで取得する

  • http://d.hatena.ne.jp/Kazuhira/20130811/1376214898
  • http://ehcache.org/generated/2.9.0/html/ehc-all/#page/Ehcache_Documentation_Set%2Fco-jmx_jconsole_example.html%23