最近、CPUのチップ内に処理ユニット(コア)を複数搭載したタイプも普及してきました。これにより、コア数の数以内であれば、複数のプロセスをスピードを落とす事なく処理する事が可能になりました。 一方、Tomcatでは、mod_jkと連動させて複数のサーバーにプロセスを分散する事は以前から可能でした。ここでは、1つのサーバーで複数のTomcatプロセスを立ち上げる事により、マルチコアのCPUの能力を十分に発揮させる方法について説明します。
本ページでは、設定する際に落とし穴になりそうな点、他のHPでの解説で勘違いした点を中心にまとめます。具体的な設定方法は参照先のページを確認してください。
以下のような環境での適用例です。Linux環境でも同様の設定による動作すると思います。
以下の記述は、上記環境が整っている状態で、tomcatプロセスを2個走らせる手順です。 特に、httpd.confの最後に以下の1行が追記されているか確認してください。
LoadModule jk2_module modules/mod_jk2.so
apache2とtomcatを連携させる構成では、tomcatの待ち受けポートは8009なので、 必要な<Connector>要素は以下の部分だけです。
<!-- Define an AJP 1.3 Connector on port 8009 --> <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
これ以外のポートは関係ないので、不要なら削除するか、コメントアウトしておきます。
次に、クラスタリングを有効にするため、<Cluster>タグを有効にします。
<!-- <=ここを削除 <Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
・・・・
</Cluster> --> <=ここを削除
セッション管理を有効にするため、EngineタグにjvmRouteを追記します。
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
jvmRouteに設定した名称はworkers2.propertyに使います。
2つ目のプロセス用のserver.xmlとして、server2.xmlを作成します。 まずは、server.xmlのファイルをコピーし、名前をserver2.xmlとします。
2つのプロセスで同じ設定だと動かない項目のみ、server2.xmlで編集します。
workers2.propertyを開き以下のように追記します。
[channel.socket:localhost:8009] tomcatId=jvm1 <=これを追記 [channel.socket:localhost:18009] <=これを追記 tomcatId=jvm2 <=これを追記
公開するサーブレットのWEB-INF内のweb.xmlを開きます。 最終行から2行目に、distributableを追記します。
<distributable/> <=これを追記 </web-app>
コマンドプロンプトから、tomcat起動コマンドをたたきます。 このとき、2つめの起動オプションは、-config conf¥server2.xmlとします。
startup.bat <=1つめのプロセスを起動 startup.bat -config conf¥server2.xml <=2つめのプロセスを起動