一、jconsole获取 JVM的内存使用情况、线程活动、GC 行为等重要指标的可视化工具
1.概念
jconsole 是 Java Development Kit (JDK) 自带的一款图形化监控和管理工具。它旨在提供一个简单而强大的界面,用于监视和管理 Java 应用程序在 Java 虚拟机 (JVM) 上的运行情况。
jconsole 提供了可视化的方式来获取有关 Java 应用程序的各种信息,包括内存使用情况、线程活动、GC 行为等重要指标。它还允许远程连接到运行中的 Java 进程,提供对远程应用程序的监控和管理能力。
2.使用
启动 JConsole:JConsole 是包含在 JDK 中的一个工具,因此首先要确保已经安装了 JDK。然后,在命令行中输入 jconsole 命令或者双击 jconsole.exe 启动 JConsole 。
- 连接到 Java 进程:启动 JConsole后,会弹出一个界面,显示所有正在运行的 Java 进程。选择要监控的 Java 进程,并点击 连接 按钮。
- 监控 JVM:连接成功后,JConsole 提供了多个选项卡,用于监控各种 JVM 资源。常用的选项卡包括:
- 概览(Overview):显示 JVM 的概览信息,如内存使用情况、线程数、类加载器信息等。
- 内存(Memory):显示 JVM 的内存使用情况,包括堆内存、非堆内存、内存池等。
- 线程(Threads):显示 JVM 中的线程活动情况,包括线程数、线程状态、死锁等。
- 类(Classes):显示 JVM 加载的类信息,包括已加载类的数量、被卸载的类数量等。
- VM 概要(VM Summary):显示JVM的基本信息,如 JVM 的启动参数、命令行参数等。
- MBean:显示了所有在 platform. MBeanserver 上注册的 MBeans 的信息。
- 执行操作:除了监控功能外,JConsole 还可以执行一些管理操作。例如,可以通过 JConsole 执行垃圾回收、线程Dump、线程死锁检测等操作。
这些操作可以通过点击相应的按钮执行。
2.1 启动jconsole
在 windows 下我们可以直接找到 JDK 的所在目录,去 /bin
目录下找到 jconsole.exe
双击运行即可,如图2.1。
图2.1
如果你正确的配置好 Java 环境的话,win + R
打开 命令提示符
窗口,输入 jconsole
命令也是能打开的。
2.2 连接到 Java 进程
2.2.1 本地连接
在本地进程中会展示出当前计算机所有正在运行的 Java 程序,只需选中双击进入,再点击 不安全的连接
即可进入到监听界面
2.2.2 远程连接
远程连接要到服务器上,需要再服务器上加入以下启动参数之后,重启项目
# 远程服务器ip,即本机ip,可以查看远程服务器的ip地址
-Djava.rmi.server.hostname=XXX.XXX.XXX.XXX
# 允许 JMX 远程调用
-Dcom.sun.management.jmxremote
# 自定义 JMX 端口号
-Dcom.sun.management.jmxremote.port=8899
# 是否需要 ssl 安全连接方式
-Dcom.sun.management.jmxremote.ssl=false
# 是否需要密钥
-Dcom.sun.managent.jmxremote.authenticate=false
注意:这个端口号不能与程序端口一样,需要单独的,不重复的端口号,否则会报端口被占用
的错误,还有就是你服务器的防火墙没关的话还要在防火墙中开发该端口,其次如果你使用的服务器是云服务器的话,还需要在云服务器上开发该端口。
其次还需要创建 jmxremote.password 文件,用于控制远程连接用户名和密码的。可以在 %JAVA_HOME%/jre/lib/management 目录下查看是否有 jmxremote.password 文件,如果没有的话可以通过该目录下的jmxremote.password.template 文件为原型复制一个。
#使用命令复制
cp jmxremote.password.template jmxremote.password
然后编辑 jmxremote.password
文件
#使用命令进行编辑
vim jmxremote.password
修改最下面的两行,把注释 #
去掉
monitorRole
是查看角色(也是登录用户名,在 access
文件中),拥有只读权限,QED
是设置的密码。controlRole
是控制用户(也是登录用户名,在 access
文件中),拥有读写权限,R&D
是设置的密码。
最后对该文件赋权即可:
#命令的作用是将文件 jmxremote.password 设置为只有所有者具有读写权限,而组用户和其他用户没有任何权限。
chmod 600 jmxremote.password
二、设置tomcat的java堆内存大小
1.如果tomcat是以bat方式启动的
打开tomcat所在目录/bin/catalina.bat,略过注释后,在第一行写上:
set JAVA_OPTS=-Xms1024M -Xmx2048M -XX:MaxPermSize=1024M
然后保存,关闭tomcat,重新启动即可。
2.如果tomcat是注册成了windows服务,以services方式启动的,则需要修改注册表中的相应键值
6.0以上的tomcat需要在tomcatw.exe文件中设置参数,比如tomcat_home/bin目录下的tomcat7w.exe,双击改程序文件。
打开到java标签页
下方的Initial memory pool就是初始化堆内存大小,Maximun memory pool是最大堆内存大小。
而要设置Perm Gen池的大小就要在Java Option里面加参数了,在里面加上:
-Dcatalina.base=%tomcat_home%
-Dcatalina.home=%tomcat_home%
-Djava.endorsed.dirs=%tomcat_home%endorsed
-Djava.io.tmpdir=%tomcat_home% emp
-XX:PermSize=512M
-XX:MaxPermSize=2048M
-Xms1024M
-Xmx2048M
-Duser.timezone=GMT+08
重起tomcat服务,即可生效。