ラベル Tomcat の投稿を表示しています。 すべての投稿を表示
ラベル Tomcat の投稿を表示しています。 すべての投稿を表示

2015年3月19日木曜日

CentOS 6.6 に Tomcat を yum を使ってインストールしてみた

概要

Tomcatのインストールはアーカイブをダウンロードして解凍して配置して終了という感じで実施していたのですが、yumでもインストールできるのでやってみました
設定ファイルやデプロイ先も自動で設定されるのでその辺も確認しました

環境

  • CentOS 6.6 Final
  • Tomcat 7.0.33
  • Java 1.8.0_31

インストール作業

yumを使って各種インストールしてみます

Tomcatのインストール

yum -y install tomcat

でTomcatの 7.0.33というバージョンがインストールされました

これは、バージョン7系のバージョンとしてはだいぶ古いです
バージョンで7系の最新版は 2015/03/18 時点では v7.0.59 でした
v7.0.33は 2012-11-21 12:07 頃にリリースされたバージョンです

tomcat version

Server version: Apache Tomcat/7.0.33
Server built:   Apr 30 2014 09:16:58
Server number:  7.0.33.0
OS Name:        Linux
OS Version:     2.6.32-358.el6.x86_64
Architecture:   amd64
JVM Version:    1.8.0_31-b13
JVM Vendor:     Oracle Corporation

Server builtを見ると割りと最近(それでも1年以上前)ですがおそらくこれはrpmパッケージとしてビルドされた時期なのでTomcatのリリースとは別になると思います

P.S 2015/03/24

すいません、tomcatの7系はCentOS6.6のbaseリポジトリでは公開されていませんでした
知らぬ間にepelのリポジトリを追加していたみたいです
上記を実施するにはまず以下を実施してください

rpm -Uvh http://ftp.riken.jp/Linux/fedora/epel/6/i386/epel-release-6-8.noarch.rpm

JVMについて

もし自分の環境にTomcatがまだインストールされていない状態だと一緒にJavaもインストールされます
インストールされるJavaはOpenJDKになります(Oracle版ではないです)
最終的に自分の環境で動作させたJavaは1.8になります

実はTomcatをyumインストールするとそのバージョンに依存したJavaのRPMパッケージも自動でインストールされます
Tomcat7.0.33の場合、一緒にインストールされたJavaのバージョンは1.7.0.75でした

これは既にJavaの1.8がyumがインストールされていても強制的にインストールされるようです
同時にインストールされたRPMパッケージ名はjava-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x86_64で詳細を確認したい場合は

rpm -qli java-1.7.0-openjdk-1.7.0.75-2.5.4.0.el6_6.x86_64

でOKです

JVMを切り替える

既に1.8がインストールされている状態だと使用するJavaのバージョンが1.7で上書きされてしまいます
実際にjava -version辺りを実行すると1.7 になっていることがわかると思います
1.8を使いたい場合はalternativesコマンドを使うと簡単に切り替えることができます

コマンドの流れとしては以下の通りです

java -version

java version "1.7.0_75"
OpenJDK Runtime Environment (rhel-2.5.4.0.el6_6-x86_64 u75-b13)
OpenJDK 64-Bit Server VM (build 24.75-b04, mixed mode)

まだ1.7の状態でalternativesコマンドを利用してバージョンを切り替えます

alternatives --config java

3 プログラムがあり 'java' を提供します。

  選択       コマンド
-----------------------------------------------
   1           /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.31-1.b13.el6_6.x86_64/jre/bin/java
   2           /usr/lib/jvm/jre-1.5.0-gcj/bin/java
*+ 3           /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java

Enter を押して現在の選択 [+] を保持するか、選択番号を入力します:1

使用したいバージョンの番号を入力すればOKです
切り替えたあとに再度バージョンを確認しましょう

java -version

openjdk version "1.8.0_31"
OpenJDK Runtime Environment (build 1.8.0_31-b13)
OpenJDK 64-Bit Server VM (build 25.31-b07, mixed mode)

これでTomcatが利用するJVMを切り替えることができます
もしyumでJavaをインストールしている場合はお好きなバージョンに切り替えてください

起動方法

yumでインストールした場合はinit.d配下に起動スクリプトが作られるので service コマンド経由で起動することができます

service tomcat start

init.d経由なので chkconfig で自動起動をONにすることもできます
Tomcat起動中にJavaのバージョンを切り替えて停止しようとするとうまく停止することができないので、Javaのバージョンを変更したい場合は起動 -> 停止をしてから変更してください

管理画面をインストール

Tomcatの管理画面は別途yumインストール必要がありました

yum -y install tomcat-admin-webapps

でインストールできます
これでTomcatを再起動するとhttp://localhost:8080/manager/htmlにアクセスできるようになります

アクセスするとユーザ名とパスワードが聞かれます
デフォルトだと管理UIにアクセスできるユーザは存在しないのでアクセスしたい場合は設定ファイルにユーザを追加しましょう

  • vim /etc/tomcat/tomcat-users.xml
<role rolename="admin-gui"/>
<role rolename="manager-gui"/>
  <user username="tomcat" password="tomcat" roles="admin-gui,manager-gui"/>

上記をtomcat-usersタグ内に記載しましょう
これで管理画面にアクセスすることができます

設定の確認

設定ファイルのパスやデプロイパスを確認します

設定ファイルのパス

まず、インストールしたTomcatの詳細情報を確認してみましょう

rpm -qli tomcat-7.0.33-4.el6.noarch

上記のコマンドでインストールされたファイルやパスがすべて表示されます

その中で設定ファイルは以下のパスで管理されるようです

/etc/tomcat/

このパスの実態は/usr/share/tomcat/confになっており、ここからシンボリックリンクがはられている感じになります
設定変更したい場合は/etc/tomcat配下にある設定ファイルを変更すればOKです

デプロイ先のパス

デプロイ先は以下でした

/var/lib/tomcat/webapps

これは/usr/share/tomcat/webappsからシンボリックされています

ログ

ログは以下に出力されます

/var/log/tomcat

これは/usr/share/tomcat/logsからシンボリックされています
なので、log4jなので FileAppenderを使う場合は./logs/hoge.logと書いておけば上記にログが吐かれるようになります

最後に

yumだと簡単にインストールできます
ただ設定ファイルのディレクトリやログのディレクトリも勝手に決まるのでその辺をインストール後に自分で確認する必要があります
起動スクリプトが自動で生成されるのも嬉しいポイントかなと思います

ただ、デメリットもやはりあり最新版がインストールされないことや管理UI用のRPMを別途インストールしなければいけないなど若干手間になる作業もあります

アーカイブ版とyum版を比較すると個人的にはyumインストールでいいかなと思っています
もしアップデートやセキュリティパッチが出たらyumコマンドで簡単に適用できます
最新版を絶対使う必要がなければyumをおすすめします

それでも最新版を使いたいのであればアーカイブ版方式でインストールするしかないかなと
もしくは自分でrpmbuild等を使ってrpmファイルを作成すればrpmコマンドでインストールでされるのでパッケージ管理システム配下で管理することはできるようになります

2013年10月8日火曜日

Tomcatですでにデプロイされているwarファイルをリモートデバッグしてみた

■環境
・ローカル
Windows7 64bit
eclipse 3.8
・リモート
Java 1.7.0_17
Tomcat 7.0.32.0
※Tomcatはchefでインストールした際の設定方法を記載します
参考URL:http://kakakikikeke.blogspot.jp/2013/06/cheftomcatjvm.html

■概要
どうしもローカルのeclipse上でWebアプリケーションをデバッグできない状態だけど
リモート環境(今回はクラウド上のサーバ)だったらwarが展開されサービスの動作確認が出来る場合に
リモートの環境を使ってあたかもローカルでデバッグしているかのようにできる手法を紹介します

■設定
1. Tomcatの起動オプション修正
8000番でLISTENしローカルから接続するようにします
起動ファイルを以下のように設定し起動時にリモートデバッグが有効になるようにします

vim /etc/default/tomcat7
JMX_OPTS="$JMX_OPTS\
-Xdebug\
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000"

service tomcat7 restart

netstat -an | grep 8000
tcp 0 0 0.0.0.0:8000 0.0.0.0:*            LISTEN

8000番でLISTENしていることを確認する

2. Eclipse設定
ローカル側に存在するリモート側に展開されているプロジェクトを右クリックし
デバッグ→デバッグの構成をクリック
開いたダイアログから「リモートJavaアプリケーション」を探しダブルクリックするとプロジェクト名のデバッグ構成が作成されます

※都合によりプロジェクト名はマスクしてあります

ホスト(IPアドレス)、ポートを設定してデバッグを押下します
また、デバッグする前にbreakpointをローカル側のソースに設定しておきましょう
eclipse上のパースペクティブもデバッグ用のパースペクティブに変更しておくといいと思います

3. 実際にリクエストをサーバに送る
breakpointでサーバ側のプログラムが停止します
ブラウザでリクエストを送った場合はブラウザが読み込み中等で停止していることが確認できるかと思います

■Tips
  • リモートサーバ上で8000番をLISTENするのでローカル -> 8000/tcp -> リモートの通信ができるようにFWの設定等を変更します
  • サーバ側でnetstat -an | grep 8000を実行してESTABLISHEDになっていることを確認しましょう
  • ESTABLISHEDになっていない場合はeclipse側のプロキシの設定やFWの設定を疑いましょう
  • リモート側のソースコードとローカル側のソースコードが常に同期しているようにしてください、差分があるとうまく動作しないことがあるようです

2013年10月1日火曜日

【Tomcat】catalina.outのログローテーションを設定する方法

■環境
CentOS 6.3
Apache Tomcat/7.0.32
※chefのcookbooksにてtomcatインストールした場合の設定方法となります
http://kakakikikeke.blogspot.jp/2013/05/opscodecookbooks.html

■概要
tomcatの起動や停止に関するログを記録するcatalina.outですが、
こいつはtomcatのconf/logging.propertiesというログローテーションを定義するプロパティで
ちゃんと日次でローテーションしてくれるはずなのですが、tomcatがずっと起動している場合
ローテーションで日付付きのファイル自体は作成させるのですが、ログ自体はずっとcatalina.outというログファイルに吐き続けるため
catalina.outがどんどん肥大化していってしまいます

そんな場合にちゃんとローテーションしたタイミングでcatalina.outも切り替えてくれる方法を記載します
他にも方法はあると思いますので参考程度に見て下さい

■設定方法
vim /etc/init.d/tomcat7

以下を編集
$SU "$TOMCAT_USER" -c "touch $CATALINA_OUT"
↓
#$SU "$TOMCAT_USER" -c "touch $CATALINA_OUT"

org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &
echo \$! > "$CATALINA_PID"
↓
org.apache.catalina.startup.Bootstrap "$@" start >/dev/null 2>&1 &
echo \$! > "$CATALINA_PID" | /usr/sbin/rotatelogs $CATALINA_BASE/logs/catalina.%Y-%m-%d.log 86400 540

service tomcat7 restart
サービスを再起動

lsof | grep catalina.out
catalina.outを掴んでいるプロセスがいないことを確認する

rm catalina.out
df -h
ディスク容量が大きくなっていることを確認する
ここでディスク容量が減らなかったりするとまだcatalina.outをtomcatが掴んでしまっており見た目は削除されたファイルですが、
実は裏ではcatalina.outにログを吐き続けているためどんどん肥大化しディスクサイズを逼迫していきます

rotetelogsはインストールされている環境に合わせてパスを変更してください
引数に86400を指定することで毎日0時にローテーションするようになります

また今回はchefでインストールしたtomcatの場合を紹介しましたが他の方法でインストールした場合もほぼ同様に設定可能です
/usr/local/tomcat/bin/catalina.sh
等の起動スクリプトに同じような記述があるのでそこを編集すれば問題ありません

2012年6月21日木曜日

【Tomcat7】tomcatの起動ファイルを作成してみた

cd /etc/init.d/
touch tomcat
chmod 755 tomcat
chkconfig --add tomcat
chkconfig --list | grep tomcat
---
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
---
vi tomcat
で以下を貼り付けてください
#!/bin/sh
#
# Startup script for Apache Tomcat 7.0.27.0
#
# chkconfig: 2345 85 15
# description: Apache Tomcat Java Servlets and JSP server
# processname: tomcat
# pidfile: /var/run/tomcat.pid
# config: /usr/local/tomcat/conf/server.xml

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

CATALINA_HOME=/usr/local/tomcat
TOMCAT_SCRIPT=$CATALINA_HOME/bin/catalina.sh
TOMCAT_USER=root

if [ ! -f $TOMCAT_SCRIPT ]; then
    exit 0
fi

# See how we were called.
case "$1" in
    start)
        # Start daemons.
        if [ -f /var/lock/subsys/tomcat ] ; then
            echo "Tomcat already started!"
            exit 1
        fi
        echo -n "Starting Tomcat: "
        su -s /bin/bash - $TOMCAT_USER -c "$TOMCAT_SCRIPT start"
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
        ;;
    stop)
        # Stop daemons.
        if [ ! -f /var/lock/subsys/tomcat ] ; then
            echo "Tomcat already stopped!"
            exit 1
        fi
        echo -n "Shutting down Tomcat: "
        $TOMCAT_SCRIPT stop
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/tomcat
        ;;
    status)
        status tomcat
        exit $?
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $TOMCAT_PROG {start|stop|status|restart}"
        exit 1
esac

exit 0

太字の箇所の設定は自身の設定に合わせてください
これでserviceコマンドからtomcatを起動することができます

2012年3月22日木曜日

Error receiving mcast package (errorCounter=10). Try Recovery!

2012/03/22 22:49:49 org.apache.catalina.cluster.mcast.McastServiceImpl$ReceiverThread run
警告: Receiver Thread ends with errorCounter=1.
2012/03/22 22:49:50 org.apache.catalina.cluster.mcast.McastServiceImpl setupSocket
情報: Setting cluster mcast soTimeout to 500
2012/03/22 22:49:50 org.apache.catalina.cluster.mcast.McastServiceImpl$RecoveryThread run
情報: Membership recovery was successful.
2012/03/22 22:50:00 org.apache.catalina.cluster.mcast.McastServiceImpl$ReceiverThread run
警告: Error receiving mcast package (errorCounter=10). Try Recovery!
java.net.SocketTimeoutException: Receive timed out
        at java.net.PlainDatagramSocketImpl.receive0(Native Method)
        at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:145)
        at java.net.DatagramSocket.receive(DatagramSocket.java:725)
        at org.apache.catalina.cluster.mcast.McastServiceImpl.receive(McastServiceImpl.java:254)
        at org.apache.catalina.cluster.mcast.McastServiceImpl$ReceiverThread.run(McastServiceImpl.java:346)



・・・
service tomcat start
をしたはいいがずっとこんな感じでエラーログが永遠に流れる場合、
tomcatのレプリケーション設定がうまくいってない状態です
おそらくレプリの設定はしてるけど、レプリするサーバがない状態におきます。
そんなときは一旦レプリの設定を解除してあげましょう。

vi /usr/local/tomcat/conf/server.xml


<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"・・・
</Cluster>

の部分をコメントアウトしてあげましょう

<!--
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
・・・
</Cluster>
-->


こんな感じで。
その後もう一度tomcatを再起動すると該当のエラーも出なくなるはずです。
参考になれば。お試しあれ。