連載
» 2007年11月20日 00時00分 公開

Tomcatをツールで運用し、設定の基礎を知るTomcatはどこまで“安全”にできるのか?(2)(3/3 ページ)

[x-lab チーム,株式会社アメニクス]
前のページへ 1|2|3       

Tomcat 6から新しくできるようになった設定

 Tomcatでは、いままでもスレッドプールには対応していましたが、コネクタごとにしか設定できませんでした。Tomcat 6からは、ほかの<Executor>タグの実装によりコンポーネント間でもスレッドプールを共有できるようになりました。この機能について軽く説明しておきましょう。

サービス内でスレッドプールを共有する>Executor>タグ

 <Executor>タグは<Server>タグ要素の子として設定できるようになっています。このタグを設定することで1つのサービス内でスレッドプールを共有できます。

 さて、それでは内容を簡単に見てみましょう。<Executor>タグは標準で以下の属性を設定できます。

要素 内容
className 実装するJavaのクラス名。org.apache.catalina.Executorインターフェイスの実装が必要。指定しなければ標準のorg.apache.catalina.StandardThreadExecutorインターフェイスが実装される
name このプールをserver.xml上で参照するために使う名前。名前は一意である必要がある

 また、標準実装では以下の属性を設定できます。

要素 内容 デフォルト値 型/クラス
threadPriority excutor内のスレッドのプライオリティを設定 Thread.NORM_PRIORITY int
daemon スレッドをdaemonスレッドにするかどうかを設定 true boolean
namePrefix executorが作る各スレッドに付く名前のプリフィックスを設定。個々のスレッドのスレッド名はnamePrefix+threadNumberになる なし String
maxThreads このプールのactiveスレッドの最大個数を設定 200 int
minSpareThreads 常時即応できるように待機しているスレッドの最小個数を設定 25 int
maxIdleTime acitveスレッドの個数がminSpareThreadsを超えているとき、アイドル状態のスレッドがシャットダウンするまでのミリ秒単位の時間 60000(1分) int

 ただし、<Executor>タグは<Connector>タグの前に設定しなければ、<Connector>タグに利用されない点に注意する必要があります。

<Context>タグはcontext.xmlに記述

 次に、context.xmlの設定について見ていきましょう。contexist(コンテキスト)とは、Tomcat上で実行される1個のWebアプリケーションのことです。コンテキストには、アプリケーションの実行に必要なファイルが含まれています。

 以前までのTomcatと違い、Tomcat 6では、<Context>タグはserver.xmlに記述することは推奨されていないため、context.xmlに記述するのが一般的です。

 context.xmlは$CATALINA_HOME/conf/context.xmlに設置することで全体の設定を行えます。エンジンごとに個別に設定する場合には、$CATALINA_HOME/conf/[エンジン名]/[ホスト名]/に設置できます。この場合、ディレクトリ配下にxml拡張子のコンテキスト名のファイルを作ることで特定のコンテキスト用のcontext.xmlを作成できます。

 複数のホストを運用したりしない限りはデフォルトのままでも機能的には足りることが多いので、設定できるタグや詳細な情報はこちらをご覧ください。

デフォルトのcontext.xmlの中身

<!-- The contents of this file will be loaded for each web application -->
<Context>
  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>
  <!-- 
    Uncomment this to disable session persistence 
    across Tomcat restarts 
  -->
  <!--
    <Manager pathname="" />
  -->
  <!-- 
    Uncomment this to enable Comet connection tacking
    (provides events on session expiration as well as webapp 
    lifecycle) 
  -->
  <!--
    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" 
    />
  -->
</Context>

Webアプリケーションの動作を制御するweb.xml

 最後にweb.xmlを見ていきましょう。web.xmlはWebアプリケーションの動作を制御するために利用されます。

 context.xmlと同様に$CATALINA_HOME/conf/web.xmlに設置することで全体の設定ができます。個別に設定する場合には、それぞれのアプリケーションを格納したディレクトリ以下のWEB-INF内に格納されます。

前回作成したweb.xmlの中身

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  version="2.5">
<servlet>
  <servlet-name>HelloWorld</servlet-name>
  <servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>HelloWorld</servlet-name>
  <url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
</web-app>

 web.xmlの書き方については、ここでは解説いたしませんので、JCP(Java Community Process、Javaの仕様が掲載されている)などでServlet 2.5の解説をご覧ください。

ALT 図5 JCPのトップページ

Tomcatのログをローテーションして整理するには?

 それでは、最後にTomactの運用で悩むログ管理についての設定を行ってみましょう。アプリケーションのログファイルは放っておくとかなり大きくなり、リソースを大量に消費してしまいます。このような場合には、ログをローテーションして整理するのがお勧めです。

便利なログ管理ソフト“logrotate”

 CentOSでは、ログ管理ソフトウェアとして“logrotate”というソフトウェアが導入されています。このソフトウェアを使ってログをローテーションしてみましょう。

編集部注:CentOSについて詳しく知りたい読者は、Linux Tipsの「Red Hat Enterprise Linux互換のCentOS」を、longrotateについては、Linux Squareの記事「システム管理の基礎 syslogdの設定をマスターしよう」の「logrotateによるログローテーションの設定」をご参照ください。

 まず、設定ファイルを作成します。logrotateは追加パッケージ用の設定ファイルをincludeして利用するようになっており、専用の設定ファイルを作成します。設定ファイルを開いたら、次の内容で記入して作成します。

/opt/tomcat6/logs/*.out {
  copytruncate
  monthly
  missingok
  notifempty
  compress
  rotate 12
  postrotate
    /bin/kill -HUP `cat /var/run/tomcat6.pid 2>/dev/null` 2> /dev
/null || true
  endscript
}

 これで、後は放っておいても月1回ローテーションされるようになります。ログは1年分残すようにして、過去のものはgzipで圧縮して保存します。

logrotateを使ってみよう

 それでは実際に、logrotateを使ってみてください。すると、読者がお使いのTomcatサーバのログディレクトリ(/opt/tomcat6/logs/)の中身はTomcatのログ(catalina.out)以外は恐らく何もない状態になっていることでしょう。

drwxr-xr-x 2 tomcat root 4096 11月 10 02:42 .

drwxr-xr-x 9 tomcat root 4096 9月 22 00:12 ..

-rw-r--r-- 1 root root 113916 11月 10 02:42 catalina.out


 念のため、本当にログがローテーションできるかどうかをコマンドラインから実行してみましょう。強制的にログをローテーションさせるために、以下のコマンドを実行してみてください。

logrotate -f /etc/logrotate.d/tomcat


 コマンド実行後にコマンドラインに戻ったら、再度ログディレクトリをのぞいてみると、

drwxr-xr-x 2 tomcat root 4096 11月 10 02:46 .

drwxr-xr-x 9 tomcat root 4096 9月 22 00:12 ..

-rw-r--r-- 1 root root 120570 11月 10 02:46 catalina.out

-rw-r--r-- 1 root root 12720 11月 10 02:46 catalina.out.1.gz


 このように前のログファイルがgzipで圧縮された形で残っていれば設定は成功です。

 この方法を用いれば、各アプリケーションで出力するログファイルもlogrotateに設定を追加することで簡単にローテーションできるようになりますので、ぜひお試しください。

次回はAjaxを超える非同期処理技術“Comet”

 今回は以上で終わりですが、次回はTomcat 6の新機能の1つであるCometを利用して、簡単なチャットアプリを作成します。お楽しみに。

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。