博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java二进制工具
阅读量:6933 次
发布时间:2019-06-27

本文共 9142 字,大约阅读时间需要 30 分钟。

可以运用jdk工具监控java应用性能,再配合 jmeter 进行了一个长时间的加压,在加压过程中重点关注了系统资源的使用情况

D:\Program Files (x86)\Java\jdk1.8.0_111\bin

这个目录下的工具

jps - Lists the instrumented Java Virtual Machines (JVMs) on the target system

jarsigner - Signs and verifies Java Archive (JAR) files.

=================================
jconsole

本地进程

远程进程

=================================

java mission control
jmc
=================================
jvisualVM

本地

远程
jstatd连接
jmx连接
两种地址
1、ip:port
2、jmx service url (service:jmx:rmi:///jndi/rmi://192.168.3.15:9999/jmxrmi)
service:jmx:rmi:///jndi/rmi://localhost:7091/jmxrmi
service:jmx:rmi:///jndi/rmi://<hostname>/jmxrmi

另外我们还可以为VisualVM安装一些插件,比如GC,MBeans等等。满足自己的需要。
=================================
jstatd
jstatd是一个rmi的server应用,用于监控jvm的创建和结束,并且提供接口让监控工具可以远程连接到本机的jvm 。jstatd位于 $JAVA_HOME/bin目录下
jstatd是一个监控 JVM 从创建到销毁过程中资源占用情况并提供远程监控接口的 RMI ( Remote Method Invocation ,远程方法调用)服务器程序,它是一个 Daemon 程序,要保证远程监控软件连接到本地的话需要 jstatd 始终保持运行。

jmx
JMX:Java Management Extensions ,即 Java 管理扩展 , 是一个为应用程序、设备、系统等植入管理功能的框架。 JMX 可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用 。而Visual VM是通过 JMX 来和远程 Java 应用联系的
=================================

在需要被监控的服务器上面,通过jstatd来启动RMI服务

新建文件,编辑内容,启动守护,再visualVM添加jstatd连接
[root@localhost bin]# pwd
/root/jdk1.8.0_144/bin

jstatd运行需要通过 -J-Djava.security.policy=*** 指定安全策略,因此我们需要在服务器上建立一个指定安全策略的文件jstatd.all.policy ,文件内容如下:

[root@localhost bin]# cat jstatd.all.policy

grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};

grant codebase "file:${java.home}/../lib/tools.jar" {    permission java.security.AllPermission;};

 

上面内容格式不正确,可能导致不能正常连接

看man jstatd,里面都有解释

-Joption              Passes option to the JVM, where option is one of the options described on the reference page for the Java application launcher. For example, -J-              Xms48m sets the startup memory to 48 MB. See java(1).

 

[root@localhost bin]# ./jstatd -J-Djava.security.policy=jstatd.all.policy
默认就是1099

jstatd -J-Djava.security.policy=/root/jstatd.policy -p 2099

要使Java VisualVM 成功连接到远程服务器上,服务器端应该在 /etc/hosts 文件中把本机地址设为本机的 IP 地址。使用 hostname -i 命令查看,如果显示的是 127.0.0.1 或者与本机实际 IP 不一致的话,需要把 /etc/hosts 文件中相应的地址改为本机实际 IP 。

[root@localhost ~]# jstatd -J-Djava.security.policy=/root/jdk1.8.0_144/bin/jstatd.all.policy -J-Djava.rmi.server.logCalls=true

Jun 17, 2019 2:43:02 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(1)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: void rebind(java.lang.String, java.rmi.Remote)]
Jun 17, 2019 2:43:02 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(2)-127.0.0.1: [127.0.0.1: sun.rmi.transport.DGCImpl[0:0:0, 2]: java.rmi.dgc.Lease dirty(java.rmi.server.ObjID[], long, java.rmi.dgc.Lease)]
Jun 17, 2019 2:43:02 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-192.168.3.169: [192.168.3.169: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Jun 17, 2019 2:43:07 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(3)-192.168.3.169: [192.168.3.169: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(java.lang.String)]
Jun 17, 2019 2:43:11 PM sun.rmi.server.UnicastServerRef logCall
上面是没有改hosts文件时的console输出
下面是改后的console输出
FINER: RMI TCP Connection(4)-192.168.3.169: [192.168.3.169: sun.tools.jstatd.RemoteVmImpl[-6199bad7:16b6432834d:-7ff8, 7381047654591843568]: public abstract byte[] sun.jvmstat.monitor.remote.RemoteVm.getBytes() throws java.rmi.RemoteException]
Jun 17, 2019 2:51:01 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-192.168.3.169: [192.168.3.169: sun.tools.jstatd.RemoteVmImpl[-6199bad7:16b6432834d:-7ff2, 5427747741497180388]: public abstract byte[] sun.jvmstat.monitor.remote.RemoteVm.getBytes() throws java.rmi.RemoteException]
Jun 17, 2019 2:51:01 PM sun.rmi.server.UnicastServerRef logCall
FINER: RMI TCP Connection(4)-192.168.3.169: [192.168.3.169: sun.tools.jstatd.RemoteHostImpl[-6199bad7:16b6432834d:-7fff, 8336527158749228898]: public abstract int[] sun.jvmstat.monitor.remote.RemoteHost.activeVms() throws java.rmi.RemoteException,sun.jvmstat.monitor.MonitorException]
Jun 17, 2019 2:51:01 PM sun.rmi.server.UnicastServerRef logCall

=================================

jps

pid java应用主类名称
[root@test1 ~]# jps
5729 Bootstrap
5782 Jstatd

PID: 5782
Host: 192.168.3.15
Main class: sun.tools.jstatd.Jstatd

PID: 5729

Host: 192.168.3.15
Main class: org.apache.catalina.startup.Bootstrap

 

[root@test1 bin]# jps5729 Bootstrap6009 Jps[root@test1 bin]# jps -q57296024[root@test1 bin]# jps -l5729 org.apache.catalina.startup.Bootstrap6039 sun.tools.jps.Jps[root@test1 bin]# jps -m5729 Bootstrap start5994 Jps -m[root@test1 bin]# jps -lm5729 org.apache.catalina.startup.Bootstrap start6054 sun.tools.jps.Jps -lm[root@test1 bin]# jps -v5729 Bootstrap -Djava.util.logging.config.file=/root/apache-tomcat-8.5.20/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.3.15 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcatalina.base=/root/apache-tomcat-8.5.20 -Dcatalina.home=/root/apache-tomcat-8.5.20 -Djava.io.tmpdir=/root/apache-tomcat-8.5.20/temp6069 Jps -Dapplication.home=/root/jdk1.8.0_144 -Xms8m[root@test1 bin]# jps -lvm5729 org.apache.catalina.startup.Bootstrap start -Djava.util.logging.config.file=/root/apache-tomcat-8.5.20/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dcom.sun.management.jmxremote -Djava.rmi.server.hostname=192.168.3.15 -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcatalina.base=/root/apache-tomcat-8.5.20 -Dcatalina.home=/root/apache-tomcat-8.5.20 -Djava.io.tmpdir=/root/apache-tomcat-8.5.20/temp6084 sun.tools.jps.Jps -lvm -Dapplication.home=/root/jdk1.8.0_144 -Xms8m

 

=================================

为tomcat 配置 jvm 启动参数,以便监控

CATALINA_OPTS="$CATALINA_OPTS

-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.3.225
-Dcom.sun.management.jmxremote.port=9999
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false"

 

==================================[root@test1 bin]# jps5729 Bootstrap6331 Jps得到pidjstat - Monitors Java Virtual Machine (JVM) statistics.[root@test1 bin]# jstat -helpUsage: jstat -help|-options       jstat -

 

转载于:https://www.cnblogs.com/createyuan/p/11038958.html

你可能感兴趣的文章
重装MAC系统 “安装器有效负载签名检查失败” 解决方法
查看>>
(转) Supercharging Style Transfer
查看>>
JMeter性能测试,验证请求数据的准确性(wc命令)
查看>>
Python学习札记(二十三) 函数式编程4 sorted
查看>>
跟着百度学PHP[14]-PDO-优化驱动
查看>>
mysql的.sql文件头部 /*!32312 IF NOT EXISTS*/;
查看>>
ONVIF测试方法及工具
查看>>
《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:发布具有同步能力的FeatureService服务...
查看>>
Oracle快速克隆安装
查看>>
Spring Boot中使用JdbcTemplate访问数据库
查看>>
struts2的核心和工作原理
查看>>
一种快速统计SQL Server每个表行数的方法
查看>>
(zhuan) How to Train Neural Networks With Backpropagation
查看>>
MHA快速搭建
查看>>
看过的编程类好书(资料)
查看>>
BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
查看>>
抽水算法
查看>>
.net 中struct(结构)和class(类)的区别
查看>>
Unity3D的坑系列:动态加载dll
查看>>
从JSON数据中取出相关数据
查看>>