JVM-JvisualVM部署及Tomcat监控实例(基于客户端jdk1.8.0_144和服务端tomcat7.0.47)

来源:互联网 发布:侧铣头编程讲解 编辑:程序博客网 时间:2024/06/07 18:02

JVM-JvisualVM部署及Tomcat监控实例(基于客户端jdk1.8.0_144和服务端tomcat7.0.47)


一.准备工作

~~客户端~~

1.1安装JDK(以便获取JvisualVM.exe执行程序)


~~服务器端~~

1.2准备JDK服务和tomcat服务

1.3准备JvisualVM-jmx监控代理

1.4查看tomcat版本

1.5下载与toncat版本对应的jmx监控代理版本

http://mvnrepository.com/artifact/org.apache.tomcat/tomcat-catalina-jmx-remote


二.配置Jvisualvm-JMX监控

~~服务器端~~

2.1配置setenv.sh

vi /server/tomcat/bin/setenv.sh

JAVA_OPTS=" -server
-Xmx2G
-Xms2G
-Xmn256
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password
-Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access

...
"

chmod +x setenv.sh

2.2配置server.xml

vi /server/tomcat/conf/server.xml

<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JasperListener" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

2.3配置catalina.sh

vi /server/tomcat/bin/catalina.sh

export JAVA_OPTS="-Xms2048m -Xmx2048m -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.password.file=../conf/jmxremote.password -Dcom.sun.management.jmxremote.access.file=../conf/jmxremote.access..."

2.4设置 jmxremote.password和jmxremote.access

cp $JAVA_HOME/jre/lib/management/jmxremote.password.template /server/tomcat/conf/jmxremote.password;

cp $JAVA_HOME/jre/lib/management/jmxremote.access /server/tomcat/conf/jmxremote.access;

chmod 600 jmxremote.password;

chmod 600 jxmremote.access

vi /server/tomcat/conf/jmxremote.password
...
monitorRole  QED
controlRole   R&D
admin admin

vi /server/tomcat/conf/jmxremote.access

...

monitorRole   readonly
controlRole   readwrite \
admin readwrite 

create javax.management.monitor.*,javax.management.timer.* \
              unregister

注:admin为自定义用户,可以使用其自带用户monitorRole或controlRole

2.5上传tomcat-catalina-jmx-remote-7.0.47.jar到tomcat服务器并重命名

mv /server/tomcat/lib/tomcat-catalina-jmx-remote-7.0.47.jar /server/tomcat/lib/tomcat-catalina-jmx-remote.jar

2.6设置防火墙

vi /etc/sysconfig/iptables

...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

...

重启生效

service iptables restart


~~客户端~~

2.7添加JMX监控

   


    


JMX监控默认不支持VisualGC插件(其功能很强大),需要通过配置JvisualVM的Jstatd监控来添加该插件


三.配置Jvisualvm-Jstatd监控

~~服务器端~~

3.1配置安全策略

vi $JAVA_HOME/jre/lib/security/java.policy
...
permission java.util.PropertyPermission "java.vm.name", "read";
permission java.security.AllPermission;
};

3.2 启动jstatd
cd $JAVA_HOME/bin;./jstatd -J-Djava.security.policy=all.policy &
启动后会开启注册端口1099和一个随机的连接端口,注册端口也可通过-p参数指定,cd $JAVA_HOME/bin;./jstatd -J-Djava.security.policy=all.policy -p 10003 &
3.3设置防火墙
除了把1099添加到防火墙规则外,还需要找到另外一个随机端口,也加入到规则中
执行netstat -anp | grep *jstatd



3.4找到jstatd注册端口和连接端口,将其加入到/etc/sysconfig/iptables 方法见2.5

vi /etc/sysconfig/iptables
...
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10001 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10002 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 10003 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 37627 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
...

重启生效 service iptables restart

~~客户端~~

3.5启动VisualVM,通常VisualVM会自动检测到Jstatd连接并添加节点,如未监测到可按如下步骤启动Jstatd,默认展示“概述,监视,抽样器”3个标签

   


 



3.6添加常用插件

工具->插件->可选插件安装插件后在已安装标签中可以看到被下载和激活的插件列表,重启jstatd可以看到新近下载和激活的插件,重启Jstatd可以看到与插件相关的最新标签

实时下载不到,可更新下载中心地址后重新下载:https://visualvm.github.io/pluginscenters.html






注:配置防火墙问题导致tomcat 8080服务无法访问,可以在防火墙中再为8080端口添加白名单即可,具体可以参考:http://liuna718-163-com.iteye.com/blog/2281943


四.实时监控与调优

~~JMX~~

4.1通过JvisualVM客户端触发生成tomcat服务器端的.hprof待分析堆dump文件并下载导入到JvisualVM分析内存使用不合理的java方法


  



~~Jstatd

4.2通过Jstatd以及与之配合的插件如Visual GC分析新生代老生代等jvm指标使用是否合理


参考文章列表:

http://blog.csdn.net/autfish/article/details/51326340

http://www.linuxidc.com/Linux/2017-01/139409.htm

http://ihuangweiwei.iteye.com/blog/1219302

https://www.bbsmax.com/A/gGdXlNQd4m/


原创粉丝点击