java基础教程虚拟机性能分析和故障解决工具【可视化】

简介: java基础教程虚拟机性能分析和故障解决工具【可视化】

java基础教程虚拟机性能分析和故障解决工具【图形化界面】

--------------作用:帮助判断cpu占用率过高、死循环、死锁、内存泄露、内存溢出等等问题。

 

JConsole:重点学查看线程、内存

VisualVM (推荐):跟JConsole 功能一样,但是功能比JConsole强大。【详细介绍】

 

 

1、jconsole------重点学查看线程、内存


image.png


2、VisualVM-----运行监视、故障处理、性能分析

■ VisualVM基于NetBeans平台开发,因此他一开始就具备了插件扩展功能的特性,通过插件扩展支持,VisualVM可以做到:

    - 显示虚拟机进程以及进程的配置、环境信息(jps、jinfo)。

    - 监视应用程序的CPU、GC、堆、方法区以及线程的信息(jstat、jstack)。

    - dump以及分析堆转储快照(jmap、jhat)。

    - 方法级的程序运行性能分析,找到被调用最多、运行时间最长的方法。

    - 离线程序快照:收集程序的运行时配置、线程dump、内存dump等信息建立一个快照,可以将快照发送开发者处进行Bug反馈。

    - 其他plugins的无限的可能性…


■ 使用与安装插件

    1.在终端输入:jvisualvm执行即可;

    2.安装插件:

       2.1 从主菜单中选择“工具”>“插件” ;

       2.2 在“可用插件”标签中,选中该插件的“安装”复选框。单击“安装” ;

       2.3 逐步完成插件安装程序。


✿ 测试类的代码:


package jvisualvm;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
 * JVisualVM 内存分析
 * @author Huangyujun
 *
 */
public class jvisualvmDemo1 {
    public static void main(String[] args) throws IOException, InterruptedException {
        test1();
        System.in.read();
    }
    private static void test1() throws InterruptedException {
        List<Student> list = new ArrayList<>();
        for(int i = 0; i < 100; i++) {
            Thread.sleep(1000);
            list.add(new Student());
        }
    }
}
class Student {
    private byte[] big = new byte[5 * 1024 * 1024];    //5M
}


■ 使用jvisualvm 具体步骤:

1):先在eclipse终端上输入:jvisualvm

2):选中咱的测试类双击:


57.png


■ 看到的工具栏这些选项,其实就对应的是jvisualvm中安装的插件,需要更多功能,就安装一下啦


57.png


■  堆Dump 和 线程Dump重点

1): 堆Dump:在监视中有堆Dump 【点完观察最左边应用程序生成了一个堆Dump 文件; 当然这时候点概述也可以看到堆Dump 数量,点击它也可以查看堆Dump文件信息】

58.png


59.png60.png


2): 线程Dump:在线程选项里有线程Dump


61.png


 还有抽样器对CPU和内存进行一段时长的取样,从而对应用程序进行分析 【通过 快照或者暂停,获取到某个时刻的内存或cpu状态】


62.png


3,补充jvisualvm的使用---检查死锁:

1):代码案例:


private static void dealLock() {
        Lock lock1 = new ReentrantLock();
        Lock lock2 = new ReentrantLock();
        new Thread(() -> {            
            try {
                lock1.lock();//在线程myThread1中:lock1锁完不释放去睡觉了,在线程myThread2中:lock1 想再锁没机会呀
                Thread.sleep(100);
                lock2.lock();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "myThread1").start(); 
        new Thread(() -> {            
            try {
                lock2.lock();
                Thread.sleep(100);
                lock1.lock();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, "myThread2").start(); 
    }


2):jvisualvm工具中的情况:


63.png


目录
相关文章
|
16天前
|
IDE Oracle Java
java基础教程(1)-Java概述和相关名词解释
【4月更文挑战第1天】Java是1995年Sun Microsystems发布的高级编程语言,以其跨平台特性著名。它介于编译型和解释型语言之间,通过JVM实现“一次编写,到处运行”。Java有SE、EE和ME三个版本,分别针对标准、企业及嵌入式应用。JVM是Java虚拟机,确保代码在不同平台无需重编译。JRE是运行环境,而JDK包含开发工具。要安装Java开发环境,可从Oracle官网下载JDK,设置JAVA_HOME环境变量并添加到PATH。
|
2月前
|
Rust 数据可视化 安全
Rust性能分析工具概览:perf、flamegraph 与其他
Rust作为一种高性能、内存安全的编程语言,在构建大型系统和微服务时备受青睐。然而,优化Rust程序的性能需要有效的工具。本文将对Rust中常用的性能分析工具进行介绍,包括perf、flamegraph等,并探讨它们如何帮助开发者定位和解决性能瓶颈。
|
1月前
|
存储 Java 数据安全/隐私保护
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
【JVM】Java虚拟机栈(Java Virtual Machine Stacks)
36 0
|
1月前
|
数据可视化 关系型数据库 编译器
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
【C/C++ 单线程性能分析工具 Gprof】 GNU的C/C++ 性能分析工具 Gprof 使用全面指南
113 2
|
4天前
|
Web App开发 JavaScript 前端开发
JavaScript中的性能优化:代码优化技巧与性能分析工具
【4月更文挑战第22天】本文探讨JavaScript性能优化,包括代码优化技巧和性能分析工具。建议避免全局查找、减少DOM操作、使用事件委托、优化循环和异步编程以提升代码效率。推荐使用Chrome DevTools、Lighthouse和jsPerf等工具进行性能检测和优化。持续学习和实践是提升JavaScript应用性能的关键。
|
28天前
|
缓存 Java C#
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍(一)
【JVM故障问题排查心得】「Java技术体系方向」Java虚拟机内存优化之虚拟机参数调优原理介绍
79 0
|
10天前
|
存储 Java
Java基础教程(7)-Java中的面向对象和类
【4月更文挑战第7天】Java是面向对象编程(OOP)语言,强调将事务抽象成对象。面向对象与面向过程的区别在于,前者通过对象间的交互解决问题,后者按步骤顺序执行。类是对象的模板,对象是类的实例。创建类使用`class`关键字,对象通过`new`运算符动态分配内存。方法包括构造函数和一般方法,构造函数用于对象初始化,一般方法处理逻辑。方法可以有0个或多个参数,可变参数用`类型...`定义。`this`关键字用于访问当前对象的属性。
|
11天前
|
Java 索引
Java基础教程(6)-Java中的流程控制语句
【4月更文挑战第6天】Java流程控制包括选择(if, switch)、重复(while, do-while, for)和跳转(break, continue, return)语句。选择语句根据条件执行不同路径,if和switch用于单条件和多条件分支。重复语句用于循环,如for循环的初始化、条件和迭代部分,以及while和do-while循环。跳转语句中,break用于立即退出循环,continue结束当前循环迭代,return则从方法中返回。此外,Java的for each循环简化了数组或集合的遍历,但不能控制遍历顺序或索引。
|
13天前
|
存储 Java 编译器
Java基础教程(4)-Java中的操作符
【4月更文挑战第4天】Java中的String是常用类,字符串是不可变对象,用双引号表示。String对象在编译期长度受限于65535,运行期不超过Int范围。字符串方法如length()、substring()、replace()、equals()等提供了多种操作。可变字符串可使用StringBuffer或StringBuilder。String对象通过字符串池优化内存,池中已有相同内容字符串则返回其引用。
|
1月前
|
缓存 Linux iOS开发
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
【C/C++ 集成内存调试、内存泄漏检测和性能分析的工具 Valgrind 】Linux 下 Valgrind 工具的全面使用指南
65 1