#Jmx远程调用(jmx远程监控)
JMX即Java管理扩展,是对Java应用程序和JVM进行监控和管理的,在实际开发过程中,所有的程序都是需要进行监控的,JMX是Java官方提供的一套用于监控Java程序和JVM运行时状态的标准API,很多开源软件都是用JMX来实现性能监控的
#通过JMX,我们可以监控的内容包括:
1、服务器中各种资源的使用情况:CPU、内存等
2、JVM内存使用情况
3、JVM中的线程情况
4、JVM中加载的类
#环境
tomcat 192.168.2.10
远程监控 192.168.2.20
#监控端只需要配置jdk环境即可
#客户端
vim /usr/local/tomcat/bin/catalina.sh #通过tomcat启动文件配置监控的功能
308 # ----- Execute The Requested Command ----------------- #在此行下添加一下内容
309 CATALINA_OPTS="-Djava.rmi.server.hostname=192.168.5.4 #监控主机的ip,本机
310 -Dcom.sun.management.jmxremote #开启远程监控
311 -Dcom.sun.management.jmxremote.port=8080 #端口
312 -Dcom.sun.management.jmxremote.ssl=false #不使用https
313 -Dcom.sun.management.jmxremote.authenticate=true" #需要验证登录才能远程监控
ls /usr/local/java/jre/lib/management/
jmxremote.access management.properties
jmxremote.password.template snmp.acl.template
cp /usr/local/java/jre/lib/management/jmxremote.password.template /usr/local/java/jre/lib/management/jmxremote.password #样例文件复制成密码文件
vim /usr/local/java/jre/lib/management/jmxremote.password #编辑密码文件
monitorRole 123456 #监控角色密码,monitorRole账号
controlRole 123456 #控制角色密码,controlRole账号
#关闭防火墙,selinux
setenforce 0
systemctl stop firewalld
#增加权限,重启tomcat
chmod 600 /usr/local/java/jre/lib/management/jmxremote.*
/usr/local/tomcat/bin/shutdown.sh
/usr/local/tomcat/bin/startup.sh
netstat -anput | grep 8080
#远程主机端执行
jconsole
1.远程连接IP地址,192.168.5.4:8080
2.账号monitorRole,密码123456
#jvm的内存监控
栈内存是静态分配
栈内存系统可以自动释放,物理机jvm先分配一部分内存,jvm会先给tomcat分配一块内存,让tomcat先使用,如果不够,在会分配一块给tomcat,上限使用jvm所有的内存
堆内存是动态分配
堆内存系统不会自动释放,即使程序退出内存还是在被占用状态,必须手动释放,不然会造成内存泄漏,Memory Leak或者是内存漏洞,直到系统崩溃
vim /usr/local/tomcat/webapps/ROOT/meminfo.jsp
<%
Runtime rtm = Runtime.getRuntime();
long mm = rtm.maxMemory()/1024/1024; #默认计算bit字节,两个1024则是MB,增加11024则GB
long fm = rtm.freeMemory()/1024/1024;
long tm = rtm.totalMemory()/1024/1024;
out.println("JVM memory info:
");
out.println("Max memory:"+mm+"MB"+"
"); #单位是MB,可以更改为GB或者KB
out.println("Free memory:"+fm+"MB"+"
");
out.println("Total memory:"+tm+"MB"+"
");
out.println("Available memory can be used:"+(mm+fm-tm)+"MB"+"
");
%>
firefox 192.168.5.4:8080/meminfo.jsp
Max memory jvm可以从系统得到的最大内存
Free memory jvm运行后剩余可用内存,jvm是使用多少系统分配多少,使用过程中剩余的,并不是最大减去使用
Total memory jvm当前使用的总内存,包括tomcat使用的和free memory剩余可用的
Available memory jvm当前可用内存
tomcat使用的内存=tm-fm
jvm总可以使用的内存=mm-(tm-fm)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vaVMwDjH-1663599449628)(https://2022429.oss-cn-beijing.aliyuncs.com/csdn/jvm%E5%86%85%E5%AD%98%E5%88%86%E9%85%8D%E7%A4%BA%E6%84%8F%E5%9B%BE.jpg)]
存=tm-fm
jvm总可以使用的内存=mm-(tm-fm)
[外链图片转存中...(img-vaVMwDjH-1663599449628)]