ページ

2010年12月14日火曜日

他のマシン上で起動しているTomcatをリモートからデバックする方法

他のマシン上で起動しているTomcatをリモートからデバックする方法

■ デバッグされる側の準備

・Tomcat 起動時に引数を指定する方法
$TOMCAT_HOME/bin/catalina.sh jpda start

・VM オプションを環境変数に設定する方法
(当方ではjsvcを利用してtomcatをデーモン化している為、
こちらを利用した。)

-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005


■ 接続確認
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=5005


■ ローカルのEclipseからリモートのTomcatをデバックする。

メニューバーから「実行(R)」→「デバッグ(B)」→「起動構成」
以下のように設定します。
・接続方法:ソケット
・ホスト名:接続するIPアドレス(または、ホスト名)
・ポート番号:5005 (-Xrunjdwpのaddressで指定したもの)


2010年12月8日水曜日

JMX経由でTomcatサーバを監視する

JMX経由でTomcatサーバを監視する

■ 概要
jconsoleで Windows PC から Linux サーバ上で稼動している Tomcat サーバに対して接続し、
リソース使用状態を監視する方法についてまとめた。

このjconsole、「接続しようとしても接続できない」という問題に結構出会う。

jconsoleとは
Sun JDK 6 の中には、コンパイラ javac の他にも、いくつか役に立つツールが含まれている。
jconsole は、Java プログラムに対し、次のような情報を得ることができる。

・パフォーマンス情報
・メモリの使用状態
・稼働中のスレッドに関する情報
・JMX


■ 設定方法に関する注意点

1.hostname -i を実行して、127.0.0.1 が返ってきた場合、まずこれを解決する必要がある。

------------------------------------------
# hostname -i
127.0.0.1
------------------------------------------

/etc/hosts を修正する
127.0.0.1 が返ってくる場合、/etc/hosts を見ると、
おそらく次のように記述されていると思う。

------------------------------------------
# cat /etc/hosts
127.0.0.1 localhost dev.ise-web.com
------------------------------------------

これを、次のように修正する。dev.ise-web.com に対し、このホストのIPアドレスを記述する。

------------------------------------------
# cat /etc/hosts
127.0.0.1 localhost
192.168.11.6 dev.ise-web.com
------------------------------------------

再度、hostname -i を実行して確認し、ホストのIPアドレスが返ってきたらOK。

# hostname -i
192.168.11.6

ホストに複数のIPアドレスが設定されている場合は?
例えば1つのホストにローカルIPとグローバルIPのように2つが設定されているようなケースでは、
「管理用PCから接続するときの IPアドレス」が hostname -i で返ってこなければならない。
Javaサーバの起動スクリプトの修正
tomcat を起動するときの Java のパラメータに、次のオプションを追加する。

------------------------------------------
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=7900
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
------------------------------------------

設定後、tomcat を起動する。

# /etc/init.d/tomcat start

ファイアウォールに穴をあける
例えば、Java サーバに iptables でパケット・フィルタリングを実施している場合、
「管理PCから jmx ポートへのアクセスを許可」の設定を行う必要がある。

ここで注意しなければならないのが、この機能では次の2つのポートを空ける必要があること。

・com.sun.management.jmxremote.port で指定したポート (上記例では 7900)
・そのポート~65535

したがって、例えば管理PC 192.168.11.10 が tomcat サーバのホスト
192.168.11.6 に jconsole で接続する場合、 192.168.11.6 上の /etc/sysconfig/iptables に次のような記述を加える。

改行せず、1行につなげる
-A RH-Firewall-1-INPUT -m state --state NEW
-m tcp -p tcp -s 192.168.11.10 --dport 7900:65535 -j ACCEPT

これで準備完了!


2010年12月5日日曜日

Postfix 設定手順のまとめ(OP25B対策)

Postfix 設定手順のまとめ

最近の国内プロバイダがOP25B (Outbound Port 25 Blocking) を利用するようになって
以降、プロバイダ外部への25番ポートへの接続を禁止するようになっているケースが多い。
これは、プロバイダのsmtpサーバの利用を許可するが、
送信アドレスはプロバイダの自ドメインに限るというものです。

当方ではフリーのダイナミックDNSに登録しており、
自宅用のメールアドレスを利用して外部メール(Gmailなどに)に送信したいのですが、
プロバイダから指定されたアドレスと異なる為に、

connect to gmail-smtp-in.l.google.com[74.125.53.27]

というような送信エラーとなってしまいます。

そこで、利用しているプロバイダの自ドメインを踏み台にして
外部メールに送受信する方法をメモしておく事にします。


※環境
CentOS 5.3
Postfix

【送信側の設定】

今インストールされているMTAを確認する。
# alternatives --display mta

postfixnのインストール
# yum install -y postfix

postfixの設定
# vi /etc/postfix/main.cf

-----------------------------------
#ホスト名を設定する。
myhostname = ise-web.com
#外部からのメール受信を許可
inet_interfaces = all
#メールサーバのネットワーク
mynetworks = 192.168.11.0/24
#メールボックス形式をMaildir形式にする
home_mailbox = Maildir/
#メールサーバーソフト名の隠蔽化
smtpd_banner = $myhostname ESMTP unknown

#以下文末に追加
#受信メールサイズ制限
message_size_limit = 10485760

#OP25B対策
relayhost = <プロバイダのSMTPサーバー>:587

#SMTP-Auth設定
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/authinfo
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = login, plain
-----------------------------------

プロバイダのSMTPサーバーに接続する為の情報を設定する。
vi /etc/postfix/authinfo
-----------------------------------
<プロバイダのSMTPサーバー> <プロバイダのメールアカウント>:<プロバイダのメールパスワード>
-----------------------------------

# chmod 640 /etc/postfix/authinfo
# postmap /etc/postfix/authinfo
# /etc/rc.d/init.d/postfix reload

SMTP-Auth設定
# /etc/rc.d/init.d/saslauthd start
# chkconfig saslauthd on
# chkconfig --list saslauthd

sendmailの停止
# /etc/rc.d/init.d/sendmail stop

メールサーバの切替え
alternatives --config mta

postfix起動
# /etc/rc.d/init.d/postfix start
# chkconfig postfix on
# chkconfig --list postfix


"fatal: no SASL authentication mechanisms"と表示される場合は必要なライブラリが不足しているので下記をインストールする。
yum -y install cyrus*


【受信側の設定】

Dovecotのインストール
# yum install -y dovecot

Dovecot設定
# vi /etc/dovecot.conf

# 以下の記述を追記
protocols = imap imaps pop3 pop3s
mail_location = maildir:~/Maildir

Dovecot起動
# /etc/rc.d/init.d/dovecot start
# chkconfig dovecot on
# chkconfig --list dovecot