Tomcat構成と最適化の実践ガイド

Java実行環境の基礎知識

Javaエコシステムの主な構成要素:

  • JDK:開発者向けの開発・実行環境を提供するソフトウェア開発キット
  • SDK:ライブラリやコンパイラなどを含むソフトウェア開発パッケージ
  • JRE:Javaアプリケーションの実行環境を提供するランタイム

Tomcatインストール手順

前提条件

  • JDKダウンロード:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
  • Tomcatダウンロード:https://tomcat.apache.org/

Java環境の構築

# ディレクトリ作成
mkdir -p /opt/software/

# JDK展開
tar xf jdk-8u60-linux-x64.tar.gz -C /opt/

# シンボリックリンク作成
ln -s /opt/jdk1.8.0_60 /opt/java

# 環境変数設定
echo 'JAVA_HOME=/opt/java
PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
CLASSPATH=.$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar' >> /etc/profile.d/java.sh

# 環境反映
source /etc/profile.d/java.sh

# インストール確認
java -version

Tomcat導入

# アーカイブ展開
tar xf apache-tomcat-8.0.27.tar.gz -C /opt/

# シンボリックリンク作成
ln -s /opt/apache-tomcat-8.0.27 /opt/tomcat

# 環境変数追加
echo 'export CATALINA_HOME=/opt/tomcat' >> /etc/profile.d/tomcat.sh

# ユーザー作成
useradd -u 601 tomcat

# パーミッション設定
chown -R tomcat.tomcat /opt/java /opt/tomcat

ディレクトリ構造

  • bin:起動・停止スクリプト
  • conf:設定ファイル
  • lib:共有ライブラリ
  • logs:ログ出力先
  • webapps:Webアプリケーション配置ディレクトリ
  • work:JSPコンパイル出力先

サービス制御

# 起動
/opt/tomcat/bin/startup.sh

# 停止
/opt/tomcat/bin/shutdown.sh

Tomcat構成管理

主要設定ファイル

  • server.xml:メイン構成ファイル
  • tomcat-users.xml:ユーザー認証情報

管理者権限設定

<tomcat-users>
  <role rolename="manager-gui"/>
  <role rolename="admin-gui"/>
  <user username="admin" password="secure123" roles="manager-gui,admin-gui"/>
</tomcat-users>

server.xml構成要素

  • Server:全体のルート要素
  • Service:複数コンポーネントの集合
  • Connector:クライアント接続管理
  • Engine:リクエスト処理の中心
  • Host:仮想ホスト定義
  • Context:アプリケーション単位の設定

運用管理スクリプト

#!/bin/bash

JAVA_HOME=/opt/java
CATALINA_HOME=/opt/tomcat

start() {
    $CATALINA_HOME/bin/startup.sh
}

stop() {
    PID=$(ps -ef | grep java | grep tomcat | grep -v grep | awk '{print $2}')
    [ -n "$PID" ] && kill -9 $PID
    sleep 3
    rm -rf $CATALINA_HOME/temp/* $CATALINA_HOME/work/*
}

case "$1" in
    start) start;;
    stop) stop;;
    restart) stop; start;;
    *) echo "Usage: $0 {start|stop|restart}"; exit 1;;
esac

パフォーマンスチューニング

JVMメモリ最適化

JAVA_OPTS="-server
-Xms2048m -Xmx4096m
-XX:PermSize=256m -XX:MaxPermSize=512m
-XX:+UseConcMarkSweepGC
-XX:+PrintGCDetails -XX:+PrintGCDateStamps
-Xloggc:$CATALINA_HOME/logs/gc.log"

コネクタ設定最適化

<Connector port="8080"
    protocol="org.apache.coyote.http11.Http11NioProtocol"
    URIEncoding="UTF-8"
    maxThreads="500"
    minSpareThreads="100"
    maxConnections="10000"
    connectionTimeout="20000"
    acceptCount="1000"
    enableLookups="false"
    disableUploadTimeout="true"
    compression="on"
    compressionMinSize="2048"
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
    SSLEnabled="false"/>

スレッドプール構成

<Executor name="tomcatThreadPool"
    namePrefix="worker-"
    maxThreads="1000"
    minSpareThreads="200"
    maxIdleTime="60000"
    maxQueueSize="100000"
    threadPriority="5"/>

I/Oモード選択

  • BIO:伝統的なブロッキングI/O(デフォルト)
  • NIO:非同期I/O(多数接続対応)
  • APR:ネイティブライブラリ利用(静的ファイル処理に最適)

運用監視

JMX経由のモニタリング

# JMX設定追加
CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=12345
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
-Djava.rmi.server.hostname=192.168.1.100"

タグ: Tomcat server.xml JVM JMX JDBC

8月2日 23:27 投稿