Tomcatが重い
先日入れたJSPのミュージックストリーミングサーバSubsonic、ちょっと手を加えたかったので、スタンドアロンではなくTomcatで動かしてみることにしました。(このアプローチが良いのかわからないけど)
Javaは何となく重い感じがして好きでなく、TomcatもJavaとWebに関連した何かくらいにしか知らなかったのでインストールも一苦労。
ディレクトリ構造も、/etc/, /usr/share/tomcat5.5, /var/lib/tomcat5.5, /usr/share/tomcat5.5-webapps と分散してて(しかもあちこちシンボリックリンクしてて)ややこしい。
結局、設定しないといけないのは公式のインストールガイドにあるのとだいたい同じで、
# /var/subsonic でスタンドアロンで動かしていた場合 $ sudo cp /var/subsonic/standalone/subsonic.war /var/lib/tomcat5.5/webapps/ $ sudo chown tomcat55:nogruop -R /var/subsonic $ sudo /etc/init.d/tomcat5.5 restart
とするだけでした。(Debian etch, tomcat5.5, java1.5)
なんとか動かすことに成功しましたが、無茶苦茶メモリを食う。192MB搭載したメモリが、ログインページで既に167MB+swap116MB消費。
ログインするとメモリ不足で殺される。
スタンドアロンでは32MBにメモリを抑えてもなんとか動いていたのに、Tomcatは随分贅沢に使ってくれる。
VMのメモリ割り当てを512MBにして試してみると、どうやら再生中にピーク330MBくらい使うらしい。最初にビューにアクセスすると待たされるが、二回目以降は軽くなるので中でキャッシュしてるんだろうか…
ついでに、Tomcatでなら簡単にHTTPSを使うように設定できるようだったので、試してみた。
まあ基本はSetting Up SSL on Tomcat In 3 Easy Steps | Techtracerの通り。
$ cd /var/lib/tomcat5.5/webapps $ sudo keytool -genkey -alias subsonic -keystore subsonic-keystore -keyalg RSA
ここで、aliasは別になんでもいい。keystoreは生成される鍵のファイル名。なんでもいい。
$ sudo vim /var/lib/tomcat5.5/conf/server.xml
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />元々コメントアウトされている上のような行を探し、コメントアウト。更にここから下二行を追加する。 keystoreFileは先ほど生成した鍵ファイルの絶対/相対(どこからだろう?)パス。 keystorePassはkeytoolで聞かれたパスワード。
keystoreFile="/var/lib/tomcat5.5/webapps/subsonic-keystore"
keystorePass="mysubsonicpass"最終的に
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="/var/lib/tomcat5.5/webapps/subsonic-keystore"
keystorePass="mysubsonicpass" />となる。サーバを再起動し、
$ sudo /etc/init.d/tomcat5.5 restart
HTTPSアクセスできるか https://localhost:8443/subsonic 試す。
$ sudo lsof -i:8443 COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME java 5372 tomcat55 12u IPv6 21948 TCP *:8443 (LISTEN)
で確かめてもOK.
ここまで確認したら、次はSSL以外のアクセスを禁止する。
$ sudo vim /var/lib/tomcat5.5/conf/web.xml <security-constraint> <web-resource-collection> <web-resource-name>securedapp</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint>
をの前に挿入する。
そしてサーバを再起動し、https://locahost:8443/subsonic はアクセスできるが、 http://localhost:8180/subsonic ではアクセスできない(SSLに転送される)ことを確認する。
最終的に、再生しながら以下のようになっていたらOKだと思います。
$ sudo lsof | grep tomcat | grep TCP java 5743 tomcat55 (略) TCP *:8180 (LISTEN) java 5743 tomcat55 (略) TCP *:8443 (LISTEN) java 5743 tomcat55 (略) TCP サーバ:8443->クライアント:2675 (ESTABLISHED) java 5743 tomcat55 (略) TCP *:8009 (LISTEN) java 5743 tomcat55 (略) TCP サーバ:8443->クライアント:2676 (ESTABLISHED) java 5743 tomcat55 (略) TCP localhost:8005 (LISTEN) java 5743 tomcat55 (略) TCP サーバ:8443->クライアント:2660 (ESTABLISHED) java 5743 tomcat55 (略) TCP サーバ:8443->クライアント:2661 (ESTABLISHED) java 5743 tomcat55 (略) TCP サーバ:8443->クライアント:2662 (ESTABLISHED) java 5743 tomcat55 (略) TCP サーバ:8443->クライアント:2668 (ESTABLISHED)
8443でのLISTENと、サーバクライアント間の通信が8443のみ。
