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"