Java虚拟机使用jvisualvm工具远程监控tomcat内存
作者:码农大卫 发布时间:2023-11-28 22:15:49
jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息。
一、配置tomcat
在tomcat的catalina.sh文件开头加上如下配置:
JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.184.129 -Dcom.sun.management.jmxremote.rmi.port=9999"
各参数含义:
-Dcom.sun.management.jmxremote:是否支持远程JMX访问,默认true;
-Dcom.sun.management.jmxremote.port:是JMX远程监控端口号,需要在防火墙开放该端口;
-Dcom.sun.management.jmxremote.ssl=false:表示是否对连接开启SSL加密,默认开启;
-Dcom.sun.management.jmxremote.authenticate=false :是否需要开启用户认证,默认开启,如果开启需要额外配置授权文件;
-Djava.rmi.server.hostname=192.168.184.129:远程服务器的主机名;
-Dcom.sun.management.jmxremote.rmi.port=9999:RMI端口号,JMX在远程连接时,会随机开启一个RMI端口作为连接的数据端口,可以和JMX端口号相同。
二、配置主机名
使用hostname -i命令查看主机名是否为外网访问ip192.168.184.129:
[root@localhost bin]# hostname -i127.0.0.1 127.0.0.1
发现是127.0.0.1,所以需要修改主机名为192.168.184.129。
(1)修改/etc/sysconfig/network文件
原文件内容为:
[root@localhost bin]# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=localhost.localdomain
修改HOSTNAME为192.168.184.129,即修改后内容为:
[root@localhost bin]# cat /etc/sysconfig/networkNETWORKING=yesHOSTNAME=192.168.184.129
修改后使用service network restart命令重启网络服务。
(2)修改/etc/hosts文件
原文件内容为:
[root@localhost bin]# cat /etc/hosts127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
修改127.0.0.1为192.168.184.129,并删除第二行ipv6的配置,即修改后文件内容为:
[root@localhost bin]# cat /etc/hosts192.168.184.129 localhost localhost.localdomain localhost4 localhost4.localdomain4
此时使用hostname -i命令再次查看主机名,已经修改过来了
[root@localhost bin]# hostname -i192.168.184.129
三、配置防火墙
配置防火墙开放9999端口,编辑/etc/sysconfig/iptables文件,加入-A INPUT -m state --state NEW -m tcp -p tcp --dport 9999 -j ACCEPT,然后service iptables restart重启防火墙服务。
四、配置jvisualvm
启动tomcat后,在windows本地jdk安装路径bin目录下找到jvisualvm.exe,双击打开后左侧显示如下:
在“远程”上右键-->添加远程主机-->填写主机名:
点击确定后,远程选项下多了一条刚才添加的主机列表。右键-->添加JMX连接,如下图,填入JMX远程连接端口号9999,并勾选“不要求ssl连接”:
点击确定后,左侧多了一条pid为6822的远程连接,6822是远程tomcat的pid:
双击该连接,在右侧可以动态查看jvm的概览信息,监控CPU,java堆,元空间,类,线程等数据:
五、常见问题
在添加JMX连接的时候,经常会出现如下报错:
此时可以从以下几个方向检查:
(1)检查tomcat应用是否启动,或者修改tomcat配置后是否重启tomcat,确保9999端口处于监听状态,查看命令netstat -nl|grep 9999;
(2)检查主机名是否和tomcat中配置的主机名相同,如果不同则按照第二步修改主机名;
(3)检查RMI端口号端口号是否在防火墙进行了配置,如果配置的RMI端口号和JMX端口号不一致,需要在防火墙配置RMI端口号允许访问,如果没有配置,则添加-Dcom.sun.management.jmxremote.rmi.port=9999配置RMI端口号。
来源:https://www.cnblogs.com/fengweiweicoder/p/10779489.html


猜你喜欢
- 去年春节的时候支付宝推行的集福娃活动着实火的不能再火了,更给力的是春晚又可以全民参与咻一咻集福娃活动,集齐五福就可平分亿元大红包,只可惜没有
- 本文借由并发环境下使用线程不安全的SimpleDateFormat优化案例,帮助大家理解ThreadLocal.最近整理公司项目,发现不少写
- 前言内存泄漏简单地说就是申请了一块内存空间,使用完毕后没有释放掉。它的一般表现方式是程序运行时间越长,占用内存越多,最终用尽全部内存,整个系
- 学习java的人都知道spring,springMVC,mybatis等框架,像structs2这样的框架是基于servlet以外实现的,而
- 在说struts2的线程安全之前,先说一下,什么是线程安全?这是一个网友讲的。如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会
- Android 监听手机GPS打开状态实现代码GPS_Presenterpackage com.yiba.core;import andro
- 流,就是一系列的数据。当不同介质之间有数据交互的时候,JAVA就使用流来实现。数据源可以是文件,还可以是数据库、网络甚至其他的程序。比如读取
- 这篇文章主要介绍了简单了解Java多态向上转型相关原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 滚轮选择控件Android自带的选择时间控件有点丑,往往产品和设计都比较嫌弃,希望做成ios一样的滚轮选择,下面是我在NumberPicke
- class文件中的常量池之前我们在讲class文件的结构时,提到了每个class文件都有一个常量池,常量池中存了些什么东西呢?字符串常量,类
- springboot启动时自动加载application.properties或者application.yml,如何定义自己的配置让spr
- 理解C#中的闭包1、 闭包的含义首先闭包并不是针对某一特定语言的概念,而是一个通用的概念。除了在各个支持函数式编程的语言中,我们会接触到它。
- 参考: https://gist.github.com/laispace/666dd7b27e9116faece6前提是你本地有 socks
- 你好,今天我要和大家分享一些东西,举例来说这个在JavaScript中用的很多。我要讲讲回调(callbacks)。你知道什么时候用,怎么用
- C# 连接海康威视/// <summary> /// 海康威视SDK ///
- 若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作为你的业务对象(你也应该这么做!),你会
- 本文实例讲述了Java代理模式。分享给大家供大家参考,具体如下:即Proxy Pattern,23种java常用设计模式之一。代理模式的定义
- CXF简介CXF是一个开源的WebService框架。Apache CXF = Celtix + XFire,开始叫 Apache Celt
- 一、缓存的基本概念缓存 。这是一个简单但非常有效的概念,这个想法的核心是记录过程数据,重用操作结果。当执行繁重的操作时,我们会将结果保存在我
- 前言:在我们使用C# WinForm中,我们有时候是需要或者自己本机的IP地址进行处理,今天我们学习一下如何使用C# Winform获取主机