<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "讓Tomcat啟動時支援JMX，可以透過JConsole遠端管理"]]></title>
		<link>https://forum.andowson.com/posts/list/20.page</link>
		<description><![CDATA[Latest messages posted in the topic "讓Tomcat啟動時支援JMX，可以透過JConsole遠端管理"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>讓Tomcat啟動時支援JMX，可以透過JConsole遠端管理</title>
				<description><![CDATA[ 在完成Tomcat Cluster的安裝後（請參考[url]http://www.andowson.com/posts/list/315.page[/url]這篇），我們可以透過JConsole來監控Tomcat運行的狀態，只需要修改Tomcat啟動時的設定即可。 
<br>
<br>
1.修改setenv.sh，加上下列設定 
<br>
[code] 
<br>
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 
<br>
[/code] 
<br>
修改後的完整內容如下： 
<br>
[code=bash] 
<br>
JAVA_HOME="/usr/java/latest" 
<br>
JAVA_OPTS="-server -XX:NewSize=503m -XX:MaxNewSize=503m -XX:SurvivorRatio=8 -XX:MaxPermSize=128m -Xss768k -Xms2013m -Xmx2013m -Djava.net.preferIPv4Stack=true -Djava.awt.headless=true" 
<br>
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=${JMX_PORT} -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 
<br>
[/code] 
<br>
2.修改/etc/init.d/tomcat 
<br>
(1)在原先的WORKER_PORT=( 8105 8205 )下面，加上JMX_PORTS=( 9105 9205 ) 
<br>
(2)在start()中，將原先的 
<br>
[code]su -l $TOMCAT_USER -c "export CATALINA_BASE=$CATALINA_BASE; $CATALINA_HOME/bin/startup.sh"[/code] 
<br>
改為 
<br>
[code]su -l $TOMCAT_USER -c "export CATALINA_BASE=$CATALINA_BASE; export JMX_PORT=${JMX_PORTS[i]}; $CATALINA_HOME/bin/startup.sh"[/code] 
<br>
修改後的完整內容如下： 
<br>
[code=bash] 
<br>
#!/bin/sh 
<br>
# 
<br>
# Startup script for Tomcat, the Apache Servlet Engine 
<br>
# 
<br>
# chkconfig: - 84 16 
<br>
# description: Tomcat Servlet Engine 
<br>
# processname: tomcat 
<br>
# pidfile: /var/run/worker1.pid /var/run/worker2.pid 
<br>
<br>
# Source function library. 
<br>
. /etc/rc.d/init.d/functions 
<br>
<br>
# User under which tomcat will run 
<br>
TOMCAT_USER=tomcat 
<br>
<br>
RETVAL=0 
<br>
<br>
CATALINA_HOME=/var/tomcat6 
<br>
WORKER_ROOT=/var/robust 
<br>
WORKER_LIST=( worker1 worker2 ) 
<br>
WORKER_PORT=( 8105 8205 ) 
<br>
JMX_PORTS=( 9105 9205 ) 
<br>
# start, debug, stop, and status functions 
<br>
start() { 
<br>
 i=$1 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 if [ $SHUTDOWN_PORT -ne 0 ]; then 
<br>
 echo "Tomcat ${WORKER_LIST[i]} already started" 
<br>
 else 
<br>
 echo "Starting tomcat ${WORKER_LIST[i]}..." 
<br>
 CATALINA_BASE="$WORKER_ROOT/${WORKER_LIST[i]}" 
<br>
 chown -R $TOMCAT_USER:$TOMCAT_USER $CATALINA_HOME 
<br>
 chown -R $TOMCAT_USER:$TOMCAT_USER $WORKER_ROOT 
<br>
 su -l $TOMCAT_USER -c "export CATALINA_BASE=$CATALINA_BASE; export JMX_PORT=${JMX_PORTS[i]}; $CATALINA_HOME/bin/startup.sh" 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 while [ $SHUTDOWN_PORT -eq 0 ]; do 
<br>
 sleep 1 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 done 
<br>
 echo "Tomcat ${WORKER_LIST[i]} started in normal mode" 
<br>
 RETVAL=$? 
<br>
 [ $RETVAL = 0 ] &amp;&amp; touch /var/lock/subsys/${WORKER_LIST[i]} /var/run/${WORKER_LIST[i]}.pid 
<br>
 fi 
<br>
} 
<br>
<br>
debug() { 
<br>
 i=$1 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 if [ $SHUTDOWN_PORT -ne 0 ]; then 
<br>
 echo "Tomcat ${WORKER_LIST[i]} already started" 
<br>
 else 
<br>
 echo "Starting tomcat ${WORKER_LIST[i]} in debug mode..." 
<br>
 CATALINA_BASE="$WORKER_ROOT/${WORKER_LIST[i]}" 
<br>
 rm -rf $CATALINA_BASE/work/* 
<br>
<br>
 chown -R $TOMCAT_USER:$TOMCAT_USER $CATALINA_HOME 
<br>
 chown -R $TOMCAT_USER:$TOMCAT_USER $WORKER_ROOT 
<br>
 su -l $TOMCAT_USER -c "export CATALINA_BASE=$CATALINA_BASE; $CATALINA_HOME/bin/catalina.sh jpda start" 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 while [ $SHUTDOWN_PORT -eq 0 ]; do 
<br>
 sleep 1 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 done 
<br>
 echo "Tomcat ${WORKER_LIST[i]} started in debug mode" 
<br>
 RETVAL=$? 
<br>
 [ $RETVAL = 0 ] &amp;&amp; touch /var/lock/subsys/${WORKER_LIST[i]} /var/run/${WORKER_LIST[i]}.pid 
<br>
 fi 
<br>
} 
<br>
<br>
stop() { 
<br>
 i=$1 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 if [ $SHUTDOWN_PORT -eq 0 ]; then 
<br>
 echo "Tomcat ${WORKER_LIST[i]} already stopped" 
<br>
 else 
<br>
 echo "Stopping tomcat ${WORKER_LIST[i]} ..." 
<br>
 CATALINA_BASE="$WORKER_ROOT/${WORKER_LIST[i]}" 
<br>
 su -l $TOMCAT_USER -c "export CATALINA_BASE=$CATALINA_BASE; $CATALINA_HOME/bin/shutdown.sh" 
<br>
 SHUTDOWN_PORT=`ps -ef|grep ${WORKER_LIST[i]}|grep -v grep|wc -l` 
<br>
 while [ $SHUTDOWN_PORT -ne 0 ]; do 
<br>
 sleep 1 
<br>
 SHUTDOWN_PORT=`ps -ef|grep ${WORKER_LIST[i]}|grep -v grep|wc -l` 
<br>
 done 
<br>
 echo "Tomcat ${WORKER_LIST[i]} stopped" 
<br>
 RETVAL=$? 
<br>
 [ $RETVAL=0 ] &amp;&amp; rm -f /var/lock/subsys/${WORKER_LIST[i]} /var/run/${WORKER_LIST[i]}.pid 
<br>
 fi 
<br>
} 
<br>
<br>
status() { 
<br>
 for (( i = 0 ; i &lt; ${#WORKER_LIST[@]} ; i++ )) 
<br>
 do 
<br>
 SHUTDOWN_PORT=`netstat -vatn|grep LISTEN|grep ${WORKER_PORT[i]}|wc -l` 
<br>
 if [ $SHUTDOWN_PORT -eq 0 ]; then 
<br>
 echo "Tomcat ${WORKER_LIST[i]} stopped" 
<br>
 else 
<br>
 MODE="normal" 
<br>
 JPDA_PORT=`netstat -vatn|grep LISTEN|grep 8000|wc -l` 
<br>
 if [ $JPDA_PORT -ne 0 ]; then 
<br>
 MODE="debug" 
<br>
 fi 
<br>
 echo "Tomcat ${WORKER_LIST[i]} running in $MODE mode" 
<br>
 fi 
<br>
 done 
<br>
} 
<br>
<br>
case "$1" in 
<br>
 start) 
<br>
 start 0 
<br>
 start 1 
<br>
 ;; 
<br>
 debug) 
<br>
 debug 0 
<br>
 debug 1 
<br>
 ;; 
<br>
 stop) 
<br>
 stop 0 
<br>
 stop 1 
<br>
 ;; 
<br>
 restart) 
<br>
 stop 0 
<br>
 start 0 
<br>
 stop 1 
<br>
 start 1 
<br>
 ;; 
<br>
 redebug) 
<br>
 stop 0 
<br>
 debug 0 
<br>
 stop 1 
<br>
 debug 1 
<br>
 ;; 
<br>
 status) 
<br>
 status 
<br>
 ;; 
<br>
 *) 
<br>
 echo "Usage: $0 {start|debug|stop|restart|redebug|status}" 
<br>
 exit 1 
<br>
esac 
<br>
<br>
exit $RETVAL 
<br>
[/code] 
<br>
<br>
接下來就可以用jconsole來連了， 
<br>
在Windows主機上安裝JDK 5以上版本，然後設定好JAVA_HOME及Path環境變數，接著開一個命令列視窗，然後輸入jconsole這個指令來執行 
<br>
在Remote Process那邊輸入&lt;Host IP&gt;:&lt;JMX Port&gt;，例如 
<br>
10.66.19.16:9205 
<br>
再點選Connect按鈕，如果一切正常就可以看到畫面了 
<br>
[img]http://sites.google.com/site/andowson/_/rsrc/1276141839416/Home/jconsole.jpg[/img] 
<br>
障礙排除： 
<br>
如果連線失敗請參考注意事項： 
<br>
*注意事項：請用"hostname -i"檢查一下是否回傳主機的真實IP，而非127.0.0.1，如果回傳127.0.0.1，則需修改/etc/hosts，將hostname另外設定IP，參考範例如下： 
<br>
[code=text] 
<br>
127.0.0.1 localhost.localdomain localhost 
<br>
10.66.19.16 www 
<br>
[/code] 
<br>
另外執行"/sbin/iptables --list"檢查是否有防火牆設定。 
<br>
<br>
參考資料 
<br>
http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 
<br>
http://java.sun.com/javase/6/docs/technotes/guides/management/faq.html#linux1]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/424/857.page</guid>
				<link>https://forum.andowson.com/posts/preList/424/857.page</link>
				<pubDate><![CDATA[Thu, 10 Jun 2010 11:15:29]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
			<item>
				<title>回覆:讓Tomcat啟動時支援JMX，可以透過JConsole遠端管理</title>
				<description><![CDATA[ 謝謝 andowson 
<br>
我是初學者，這文章對我來說非常有用 
<br>
感謝]]></description>
				<guid isPermaLink="true">https://forum.andowson.com/posts/preList/424/1174.page</guid>
				<link>https://forum.andowson.com/posts/preList/424/1174.page</link>
				<pubDate><![CDATA[Thu, 10 Nov 2011 16:48:28]]> GMT</pubDate>
				<author><![CDATA[ goodrockey]]></author>
			</item>
	</channel>
</rss>