utsurigi.net

dvorak練習中: e-typing Good! 284pt 300kpm 3日休んだら大分落ちた

憂鬱気分

著者近影

あわせて読みたい

カレンダー

2010 年 9 月
« 8 月    
 1234
567891011
12131415161718
19202122232425
2627282930  

カテゴリー

アニメ公式

ボードゲーム

Tomcatが重い

2009/4/15 水曜日
カテゴリー: Linux, ウェブアプリケーション — utsurigi @ 3:07:10

先日入れた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のみ。

動画専用ディスプレイ快適です