VisualVM远程监控配置+Tomcat apr 安装+Tomcat 启动脚本
最近要上线一个项目,需要在 Linux 服务器上安装 Tomcat 并进行一系列配置,以实现三个目标:通过 VisualVM 远程监控、Tomcat 使用 apr 模式、Tomcat 自启动。 作为一个 Linux 菜鸟,之前只是简单体验过 Linux 的操作,很多功能都是浅尝辄止。如今要在短期内完成这些目标,不得不说一把辛酸泪啊,其中的艰辛不言而喻。当然,主要是自己的功力不
作为一个 Linux 菜鸟,之前只是简单体验过 Linux 的操作,很多功能都是浅尝辄止。如今要在短期内完成这些目标,不得不说一把辛酸泪啊,其中的艰辛不言而喻。当然,主要是自己的功力不足,还需深入。这一周以来,查看了很多网上的资料,有很多雷同内容,而且并没有做出进一步的解释,按照这些步骤配置怎么也不成功,肯定有很多细节没有注意到,于是只好自己慢慢摸索。在结合了众多资料以及自我探索后,在当前环境下终于都配置成功了,在此把过程记录在这里,权当自己的学习日记了。里面有些内容可能很简单,高手勿喷。
一 . 测试环境:
1、服务器:VirtualBox 虚拟机下 CentOS6.4 x86
2、客户机:Windows7 x643、JDK:jdk1.7.0_45
4、Tomcat:apache-tomcat-7.0.47
5、监控工具:VisualVM1.3.6(这是从官网另外下载的,也可以使用 JDK 自带的,在 JAVA_HOME/bin 目录下)
二 . 环境准备及说明
1、安装好 VirtualBox 虚拟机以及 CentOS 系统,值得注意的是,虚拟机的网络连接方式一定要选择“桥接”,否则远程监控的时候会连不上;(因为这个浪费了不少时间o(╯□╰)o)
2、安装好 Linux 下的 JDK、Tomcat 并配置好相关环境变量,我的机器里 JAVA_HOME=/usr/local/jdk1.7.0_45 CATALINA_HOME=/usr/local/apache-tomcat-7.0.47;3、VisualVM 下载好相关插件,我只下载了 VisualGC 和 MBeans;
4、建议配置远程监控时, 先关闭服务器防火墙,远程连接配置成功后,再进行防火墙的相关配置并开启,这里客户机 IP 假设为 11.22.33.44;
5、任何新建文件在使用前,都应先赋权限。
三 . 配置 VisualVM 远程监控 —— Jstatd 模式
VisualVM 远程监控可以用两种模式,分别为 Jstatd 和 JMX ,其中 Jstatd 能自动检测被监控服务器上的所有 JAVA 应用程序,而且能使用 VisualGC ,但是由很多其他插件无法使用,如 MBeans;而 JMX 可以使用很多 VisualVM 提供的插件,当 Jstatd 和 JMX 同时启用时,在 JMX 连接下也能看到 VisualGC ,所以推荐同时使用。
配置 Jstatd 相对比较简单,一定要先把防火墙关掉!!!(在这里又浪费了不少时间,菜鸟伤不起 o(╯□╰)o)1、在 /usr/local/jdk1.7.0_45/bin 目录下新建文件,命名为 jstatd.all.policy(名字可以自己起,后缀一定要是 .policy),该文件是启动 jstatd 时所采用的安全策略文件,若没有指定安全策略,会出现“Could not create remote objectaccess denied”错误;
2、在新建的 jstatd.all.policy 文件下添加如下内容:
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
& 注:这里的 java.home 不一定是 JAVA_HOME 目录,而是 JRE 目录;
3、给 jstatd.all.policy 文件赋权限,我用的是 chmod 755 jstatd.all.policy ;
4、在 /etc/hosts 文件中设置 localhost IP 地址和 hostname 的映射,设置完后用 hostname -i查看,要和本机真实 IP 地址一致(用ifconfig 查看);
5、在终端执行以下命令启动 jstatd :
jstatd -J-Djava.security.policy = /usr/local/jdk1.7.0_45/bin/jstatd.all.policy
& 注:这里最好如上述命令指明绝对路径,否则可能由于找不到该安全策略文件,仍然报“Could not create remote objectaccess denied”错;
6、是否启动成功可以通过在终端输入 jps 命令查看,若有 Jstatd 则表示已经启动成功;
7、启动 jstatd 时还可以开启日志功能,同时可以通过 -p 参数指定端口(默认为 1099):
-J-Djava.rmi.server.logCalls=true
& 注:未启用日志功能时,即便 jstatd 开启成功,在终端也不会有任何反应(开始以为卡了。。。默哀),此外,
jstatd 开启时需要监听两个端口,除了默认的1099 或者指定的端口外,还需要监听一个,这个端口是随机的,而且建立连接时优先用随机的那个端口,我也没弄清楚到底是怎么回事,所以才建议先关闭防火墙;
8、上述配置均在服务器上,接下来在 VisualVM 中建立远程连接,右击“远程” -> 添加远程主机 -> 键入主机 IP -> 确定,若先前配置成功,应该能看到 Jstatd 连接,若在启动 jstatd 时自定义了端口号,则需要在添加远程主机时,在“高级设置”中指定对应端口;
9、添加防火墙白名单,在 /etc/sysconfig/iptables 中添加如下条目:
-A INPUT -p tcp -m state --state NEW -m tcp -s 11.22.33.44 -j ACCEPT
& 注:Jstatd 采用的是 TCP 协议,这里允许来自 11.22.33.44 上的所有访问通过,添加在
22 端口后面,保存后终端执行
service iptables restart重启防火墙,重启 jstatd 服务后,在 VisualVM 中能看到,至此 Jstatd 模式配置完毕;
10、安全策略还有其他配置方式,比如将 permission java.security.AllPermission; 添加到 /usr/local/jdk1.7.0_45/jre/lib/security/ java.policy 中,或是采用如下的 jstatd.sh 文件:
#!/bin/sh
policy=${HOME}/.jstatd.all.policy
[ -r ${policy} ] || cat >${policy} <<'POLICY'
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
POLICY
jstatd -J-Djava.security.policy=${policy}
#-J-Djava.rmi.server.logCalls=true
& 注:不建议将安全策略添加到 java.policy 中。
四 . 配置 VisualVM 远程监控 —— JMX 模式
JMX 模式的配置相对麻烦一点,具体如下:
1、在 /usr/local/apache-tomcat-7.0.47/conf/ server.xml中找到 Listener相关部分,在后面加上如下语句:<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
& 注:这里的 10001 端口就是之后 JMX 连接需要提供的端口;
2、在 /usr/local/apache-tomcat-7.0.47/bin/ catalina.sh中添加如下语句:
CATALINA_OPTS="-Dcom.sun.management.jmxremote.password.file=$CATALINA_HOME/conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=$CATALINA_HOME/conf/jmxremote.access -Dcom.sun.management.jmxremote.ssl=false"
& 注:这行参数的意思是:使用指定的 jmxremote.password 和 jmxremote.access 控制访问权限,并禁用 ssl 连接。此外,这里还可以使用
JAVA_OPTS 代替
CATALINA_OPTS,如果使用则一定要在其前面加上
“export”,否则Tomcat 7 不识别 JAVA_OPTS 参数。另外这里的 $CATALINA_HOME 最好换成
绝对路径,否则在后面应用 Tomcat 启动脚本启动时,会因为找不到 jmxremote.password 和jmxremote.access 这两个文件而启动失败。还有,网上说 CATALINA_OPTS 和 JAVA_OPTS 这两个参数没有什么区别,配任何一个都可以,实际上在 catalina.sh 文件的注释里面已经讲得很清楚了,CATALINA_OPTS 是只针对于 Tomcat 自身,有很多限制,而 JAVA_OPTS 则使用范围更广,可以配一些 CATALINA_OPTS 里没有的参数,这里因为只需要监控 Tomcat 所以选择 CATALINA_OPTS。
3、到 /usr/local/jdk1.7.0_45/jre/lib/management 下找到 jmxremote.access 和 jmxremote.password.template 文件,并复制到/usr/local/apache-tomcat-7.0.47/conf/ 文件夹下,注意将 jmxremote.password.template 的“.template”去掉。别忘了分别给两个文件赋权限 chmod 600。然后分别打开两个文件做如下修改:
jmxremote.password:注释掉所有原本信息,在最后添加“Username password”,即 VisualVM 的登录用户名和密码;
jmxremote.access:注释掉所有原本信息,在最后添加“Username readwrite”,即控制相应登录用户的权限;
5、到 http://archive.apache.org/dist/tomcat/tomcat-7/v7.0.47/bin/extras/ 下载 catalina-jmx-remote.jar文件,并放入/usr/local/apache-tomcat-7.0.47/lib 中;
6、在 VisualVM 中右击刚才建立的远程电脑,添加 JMX 连接,这里需要输入端口号,即刚才配置监听的 10001 端口,直接在冒号后面加就行,直接点确定后,若弹出输入用户名密码的对话框,则说明已经配置成功。如果同时开着 Jstatd,则在 JMX 连接里,也可以看到 VisualGC 的内容。
五 . Tomcat 安装 apr
在 Linux 中,Tomcat 默认是以 bio 模式启动,如果需要更多的并发,则需要启用 apr 模式。可以通过 /usr/local/apache-tomcat-7.0.47/logs/catalina.out日志文件来查看Tomcat 的启动模式。安装 apr 需要通过如下步骤:
1、安装或更新GCC:yum install gcc;2、安装 libtool:yum install libtool;
3、安装 apr-devel:yum -y install apr apr-devel(安装完后,会在 /usr/bin/ 目录下出现 apr-1-config);
4、解压 /usr/local/apache-tomcat-7.0.47/bin 目录下的 tomcat-native.tar.gz;
5、进入 /usr/local/apache-tomcat-7.0.47/bin/tomcat-native-1.1.29-src/jni/ native 目录,在终端执行以下命令:
./configure --with-apr=/usr/bin/apr-1-config --with-java-home=$JAVA_HOME --with-ssl=yes --prefix=$CATALINA_HOME
& 注:若不需要 ssl 可以去掉 --with-ssl=yes 参数,配置 ssl 需要另外安装 openssl-devel。
6、执行 make 命令;
7、执行 make install 命令;8、出现如下信息后,说明 lib 编译安装成功:
----------------------------------------------------------------------
Libraries have been installed in:
/usr/local/apache-tomcat-7.0.47/lib
9、在
catalina.sh 中设置环境变量,指定 Tomcat 启动的 lib,添加如下内容:
CATALINA_OPTS="-Djava.library.path=/usr/local/apache-tomcat-7.0.47/lib"
& 注:因为之前 CATALINA_OPTS 已经有参数了,这个直接添加在后面就行;
10、启动 Tomcat ,在 catalina.out 文件中出现如下信息,说明 apr 安装成功
Dec 22, 2013 10:22:42 PM org.apache.catalina.core.AprLifecycleListener init
INFO: Loaded APR based Apache Tomcat Native library 1.1.29 using APR version 1.3.9.
Dec 22, 2013 10:22:42 PM org.apache.catalina.core.AprLifecycleListener init
INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true].
Dec 22, 2013 10:22:44 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-apr-8080"]
Dec 22, 2013 10:22:44 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-apr-8009"]
Dec 22, 2013 10:22:44 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 3899 ms
& 注:如果在 catalina.out 出现“SEVERE: Failed to initialize the SSLEngine.”错误,是因为没有启动或配置 SSLEngine,如果不需要 SSLEngine,在 service.xml 文件中将其关闭即可,如下:
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="off" />
11、在 VisualVM 中,也可以通过 JMX 连接“线程”中看到 Tomcat 已经使用 apr 模式启动了。
六 . Tomcat 启动脚本
1、在 /etc/rc.d/init.d 目录下,创建名为 tomcat 的文件,内容为后述启动脚本内容;
2、为该文件赋权限;3、在终端执行以下命令:
chkconfig --add tomcat
& 注:add 前面有两个“-”,该命令将 tomcat作为服务添加到 chkconfig中,如果出现“service tomcat does not support chkconfig”,一般是脚本内容有问题。需要注意脚本注释部分必须有
chkconfig 和
description这两个关键字,其中 chkconfig 指定该脚本的默认运行级别(即在哪些条件下开机启动)、启动优先级和关闭优先级。运行级别总共有7个,分别为:
等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:没有用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动
一般设置 2345就行;
4、在终端执行 chkconfig --list tomcat 命令,查看 tomcat 服务是否添加成功,出现如下内容,则说明添加成功:
tomcat 0:off 1:off 2:on 3:on 4:on 5:on 6:off
5、可以执行 chkconfig --level 2345 tomcat on 修改运行级别,上一步的结果是已经修改后的。
6、启动脚本内容如下:
#!/bin/bash
#
#Tomcat Server
#
#chkconfig: 345 80 20
#description: Tomcat --Start --Stop --Restart --Status
#
export TOMCAT_HOME=/usr/local/apache-tomcat-7.0.47
export JAVA_HOME=/usr/local/jdk1.7.0_45
TOMCAT_USER=tomcatadmin
RETVAL=0
checkrun(){
ps aux|grep "org.apache.catalina.startup.Bootstrap start"|grep -v "grep"|wc -l > /tmp/tomcat_process_count.txt
read line </tmp/tomcat_process_count.txt
#注意“[”和“]”左右都有空格,否则报错
if [ $line -gt 0 ];then
RETVAL=1;
return $RETVAL;
else
RETVAL=0;
return $RETVAL;
fi
}
start(){
checkrun
if [ $RETVAL -eq 0 ];then
# cd $TOMCAT_HOME/bin 有时候运行start启动不了Tomcat,尝试将相对路径改成绝对路径
# sh startup.sh
su - $TOMCAT_USER -lc $TOMCAT_HOME/bin/startup.sh
#创建锁文件
touch /var/lock/subsys/tomcat
echo "----------> Tomcat Start ----------[OK]"
else
echo "----------> Tomcat is Already Running"
fi
}
stop(){
checkrun
if [ $RETVAL -eq 1 ];then
su - $TOMCAT_USER -lc $TOMCAT_HOME/bin/shutdown.sh
while [ $RETVAL -eq 1 ]
do
sleep 5
checkrun
done
#删除锁文件
rm -f /var/lock/subsys/tomcat
echo "----------> Tomcat Stop ----------[OK]"
else
echo "----------> Tomcat is Not Running"
fi
}
status(){
checkrun
if [ $RETVAL -eq 1 ];then
echo -n "----------> Tomcat is Running: PID = "
ps aux|grep "org.apache.catalina.startup.Bootstrap start"|grep -v "grep" |awk '{print $2}'
else
echo "----------> Tomcat is Stopped"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo $"Usage:$0 {start|stop|status|restart}"
exit 1
esac
exit 0
& 注:若脚本出现问题,可以尝试删除其中的中文注释,同时注意脚本的编码格式,若直接复制,有可能会出现无法预知的错误,导致脚本启动失败。此外,注意修改其中的部分环境配置为本机实际配置,其中的TOMCAT_USER 为 tomcat 的启动用户,该用户必须要在/etc/passwd 和 /etc/group 中。
7、至此,已经可以通过 service tomcat start | stop | restart | status 等命令操作 tomcat 了,而且在启动 Linux 的时候 Tomcat 也会作为服务自动启动。(脚本这块也费了很久,因为不熟悉 bash 的编程语法,这个脚本是参考了网上的一个脚本,自己做了简单的修改)
七 . 结束语
真心不容易啊,这一周都是在高压力下度过的,任务时间紧加上我这个小菜鸟的水平实在不怎么样,好不容易都搞定。虽然这个过程让人十分纠结,不过这其中也学到了不少东西,之前虽然也看过 Linux 的一部分东西,但是都没有去仔细实践过,真的自己经历了之后,才会发现这个过程的艰辛。再接下去要做的就是对 JVM 的调优了,希望项目上线的时候能顺顺利利。
备注一下:如果用 Xmanager 远程连接服务器,则默认启动 id 要设为 5,并且 hosts 文件中要有 127.0.0.1 这个地址;如果用 Xming 连接,则默认启动 id 要设为 3。
PS:写这篇东西也费不少时间 ~~~~(>_<)~~~~
转载请注明出处: http://blog.csdn.net/yiquduanzhang/article/details/17427133
更多推荐
所有评论(0)