miau's blog?

Tomcat の再起動が遅い・・・

10 月から Java の案件やってます。仕事で Java 使うのは初めて(=JSP とか Servlet も初めて)なので、わからないことだらけでそれはそれで大変なのですが。

何よりストレス溜まるのが Tomcat の再起動が遅いこと。動的に変更を読み込むように設定してあるんですが、そっちの動作がどうも不安定で Tomcat を頻繁に再起動してます。で、この再起動が遅すぎる。

個人的に、プログラムの品質と開発のテンションを高く保つためには、コーディング→確認のサイクルを短時間で何度も回すのが重要だと思ってます。一気に変更を加えないから「急に動かなくなった」なんてことも少なく、問題解決でなく機能の作り込みに専念できるから開発のペースも上がると。

そんなわけでふつうの人が 1 サイクル回す間に 3 サイクルくらい回すのが好きなんですが・・・Tomcat の再起動で 10 秒とか待たされたらそういうことができないわけで。結構由々しき問題なので、解決策を模索中です。

まだ解決してないんですが、試したことを一通り晒しておきます。




■RAM Disk 使ってみた

再起動中に CPU の利用率を見たところ、利用率が低い状態が結構多いことに気が付きまして。HDD へのアクセスがボトルネックになってるのかな?ということで、RAM ディスクを試してみることに。使ってるのが Windows XP x64 なので、Hi-RAMGavotte Ramdisk を試してみました。

この辺りのソフトの詳細はまた別項で書くとして、JRE やら Tomcat やらをすべて RAM Disk に置いたときの効果はいかほどかというと・・・。

【導入前】
情報: Server startup in 4706 ms

【導入後】
情報: Server startup in 4326 ms

ということで、1 割くらいしか変わらない。ディスク I/O がボトルネックかと思ったけど、どうやら違うみたい。

■APR based Native library 使ってみる

Tomcat の起動時に

情報: The APR based Apache Tomcat Native library which allows optimal performance
in production environments was not found on the java.library.path:
(以下 %PATH% の内容とか)

とか言われてた。パフォーマンスが上がるとか書いてるし、詳細も調べずにとりあえず試してみることに。

Linux だと面倒みたいだけど、Windows だと

Apache Tomcat 6.0 - Apache Portable Runtime (APR) based Native library for Tomcat

からリンク辿って この辺り にある tcnative-1.dll(HTTPS を使うなら openssl.exe も?)を PATH の通ってるところに放り込むだけ。

ということで、

情報: Loaded APR based Apache Tomcat Native library 1.1.14.

と読み込まれるようになったけど、Tomcat の起動時間は変わらず・・・というかかえって遅いくらい?(Initialization processed in 〜 のところが 700 ms 前後→ 1000 ms 前後に増えてる。)

後でちゃんと調べたら、Apache が得意で Tomcat が不得手だった部分(この辺 のいくつか)を補うためのものみたいで。今回は静的ページもないし SSL も使わないし、あまり意味なさそうなので即削除。まあ 1 サーバの構成で今後使えるかもしれないから頭の片隅に置いておこう。

■piccolo の導入

tomcat起動だとか - ヴォッティー?

この辺りに XML Parser を入れ替えると速くなると書いてたので、書いてるとおり piccolo を導入。

Using Piccolo

に従って、tomcat6.0\lib\Piccolo.jar に配置してみた。

どうやらちゃんと piccolo が使われてるみたいだけど、

致命的: StandardWrapper.Throwable
org.seasar.framework.exception.ParserConfigurationRuntimeException: [ESSR0053]
パーサの設定に問題があります。理由はjavax.xml.parsers.ParserConfigurationException:
XML document validation is not supported

とかなんとかエラーが。今回は DB アクセス部分に S2DAO を使ってるんですが、そのあたりの影響で動かないっぽい。validation を委譲する設定も試したけど、こちらはなんかうまく動作しなくて諦めました。


という感じで、やっぱり慣れない分野だと当てずっぽうでパフォーマンス改善するのは難しいみたい。ちゃんと正攻法でボトルネック検出してからやろう。そのためにはもっと根本的な仕組みから勉強しないと。


(2009-02-16 追記)

APR based Native library は、Windows インストーラで Tomcat→Native を選んでいれば普通に入るようですね。Pleiades All in One を使ってたので知りませんでした・・・。


(2010-09-22 追記)

Tomcat にこだわらなければいい気がしますね。まだ試していませんが、メモ。

超軽量サーブレットコンテナを使って開発スピードを上げる:マピオンラボ(Java)
posted at 05:37:29 on 2008-11-17 by miau - Category: Java No Trackbacks - Permalink

TrackBack

このエントリにトラックバックはありません
現在トラックバックは受け付けていません。

Comments

tomo wrote:

Seasar2を使うときには hotdeploy/warmdeployと干渉するので、tomcatの「動的に変更を読み込む」を有効にしてはいけない
2009-03-15 06:13:35

miau wrote:

情報ありがとうございます。動的に変更を読み込む機能、なんだか不安定な気がしていたんですが・・・それが原因だったのかもしれません。
2009-03-15 15:52:28

Add Comments

現在コメントは受け付けていません。
お手数ですが、 こちら のコメント欄にでも記載していただければと思います。