今天分享一个java,JDK自带的监控工具jvisualvm
1.在java的bin目录下面找到jvisualvm打开既可
2.启动后会自动检测运行的java进程
3.模拟死锁,简易代码如下
package test;
public class DeadLockDemo {
private static String A = "A";
private static String B = "B";
public static void main(String[] args)
{
new DeadLockDemo().deadLock();
}
private void deadLock()
{ Thread t1 = new Thread(new Runnable()
{ @Override public void run() { synchronized (A) {
try { Thread.currentThread().sleep(2000); }
catch (InterruptedException e) { e.printStackTrace();
}synchronized (B) { System.out.println("1");
}
}
}
}
);
Thread t2 = new Thread(new Runnable() { @Override public void run() { synchronized (B) { synchronized (A) { System.out.println("2"); } } } }); t1.start(); t2.start(); } }
3.点击监视可以查看对应的CPU(这里CPU是值JVM的虚拟机)
4.点击线程可以查看是否检查到死锁的状态
5.线程死锁分析
6.使用jstatd远程链接centos:
下面展示一些 内联代码片
。
cd /usr/lib/jdk1.8jre/lib/management/ (根据自己的目录来定 )
cp jmxremote.password.template jmxremote.password
chmod 644 jmxremote.password
VIM jmxremote.password
2.第二步去到java的bin目录下创建一个jstatd.all.policy(文件名就是这个)的文件内容为:
grant codebase “file:${java.home}/…/lib/tools.jar” {
permission java.security.AllPermission;
};
3.添加完成后运行守护进行运行
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.1.156 &
4.如果使用jmx链接的话:
单独在应用上配置如下JVM启动参数
-Djava.rmi.server.hostname=192.168.200.136 -Dcom.sun.management.jmxremote.port=18888 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.managementote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
其中java.rmi.server.hostname配置的是运行JVM所在的机器IP
这里配置后整个过程就算完成了,大家有问题可以加群欢迎各路大佬来群里面交流:
你来或不来我都在这里等你,等风也等你(337237612)