VisualVM远程监控配置+Tomcat apr 安装+Tomcat 启动脚本

        最近要上线一个项目,需要在 Linux 服务器上安装 Tomcat 并进行一系列配置,以实现三个目标:通过 VisualVM 远程监控、Tomcat 使用 apr 模式、Tomcat 自启动。

        作为一个 Linux 菜鸟,之前只是简单体验过 Linux 的操作,很多功能都是浅尝辄止。如今要在短期内完成这些目标,不得不说一把辛酸泪啊,其中的艰辛不言而喻。当然,主要是自己的功力不足,还需深入。这一周以来,查看了很多网上的资料,有很多雷同内容,而且并没有做出进一步的解释,按照这些步骤配置怎么也不成功,肯定有很多细节没有注意到,于是只好自己慢慢摸索。在结合了众多资料以及自我探索后,在当前环境下终于都配置成功了,在此把过程记录在这里,权当自己的学习日记了。里面有些内容可能很简单,高手勿喷。


一 . 测试环境:

      

        1、服务器:VirtualBox 虚拟机下 CentOS6.4 x86

        2、客户机:Windows7 x64
        3、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”,即控制相应登录用户的权限;


        4、防火墙设置(由于先前配置 Jstatd 的时候已经设置好了,故这里可以略过);
        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”,一般是脚本内容有问题。需要注意脚本注释部分必须有 chkconfigdescription这两个关键字,其中 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值