VisualVM

Java 程序员必备的 Intellij IDEA 插件

大城市里の小女人 提交于 2020-08-05 17:49:03
来源:柠檬学园 以下是我用过不错的Intellij插件,分享给大家希望能帮到大家。 1. .ignore 地址: https://plugins.jetbrains.com/plugin/7495--ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写 截图: 2. lombok 地址: https://plugins.jetbrains.com/plugin/6317-lombok-plugin 支持lombok的各种注解,从此不用写getter setter这些 可以把注解还原为原本的java代码 非常方便 截图: 3. p3c 地址: https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines 阿里巴巴出品的java代码规范插件 可以扫描整个项目找到不规范的地方 并且大部分可以自动修复 更多可看: https://github.com/alibaba/p3c/tree/master/idea-plugin 4. FindBugs-IDEA 地址: https://plugins.jetbrains.com/plugin/3847-findbugs-idea 检测代码中可能的bug及不规范的位置,检测的模式相比p3c更多, 写完代码后检测下

JAVA死锁排查-性能测试问题排查思路

别来无恙 提交于 2020-07-29 10:18:29
死锁原因 Java发生死锁的根本原因是:在申请锁时发生了交叉闭环申请。即线程在获得了锁A并且没有释放的情况下去申请锁B,这时,另一个线程已经获得了锁B,在释放锁B之前又要先获得锁A,因此闭环发生,陷入死锁循环。 监控死锁 VisualVM监控工具有明显线程死锁提醒,也可监控到发生死锁的线程、类、代码行数、数据类型。 分析死锁 VisualVM生成threaddump,查找死锁代码块内存地址 VisualVM生成heapdump, 使用OQL查看被死锁对象的值和引用 select heap.findObject("0x00000006c0276428") 使用OQL的另一种方法 jmap -dump:live,file=/data/test.map <jps端口号> jhat /data/test.map 浏览器访问 http://ip:7000/ 示例代码 /* * 线程死锁等待演示 */ static class SynAddRunalbe implements Runnable { int a, b; public SynAddRunalbe(int a, int b) { this.a = a; this.b = b; } @Override public void run() { synchronized (Integer.valueOf(a)) {

面试官:说说你了解哪些JDK自带的命令行工具

断了今生、忘了曾经 提交于 2020-07-27 13:59:01
不看不知道,一看吓一跳,原来JDK自带了这么多工具,本文主要介绍一下工作中常用的JDK工具以及使用方法和使用场景。 jps:虚拟机进程状况工具 是工作中排查问题使用率最高的命令之一,用于列出正在运行的虚拟机进程,并显示虚拟机执行主类名称以及这些进程的本地虚拟机唯一ID。 语法是 jps [options] [hostid] ,常用的选项如下: 选项 作用 -l 输出主类的全名,如果进程执行的是jar包,输出jar路径 -v 输出虚拟机进程启动时JVM参数 -q 只输出pid,省略主类的名称 -m 输出虚拟机进程启动时传递给主类main()函数的参数 jps可以通过RMI协议查询开启了RMI服务的远程虚拟机进程状态,hostid为RMI注册表中注册的主机名。 jstat:虚拟机统计信息监视工具 jstat是用于监视虚拟机各种运行状态信息的命令行工具。他可以显示本地或者远程虚拟机进程中的类加载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期间定位虚拟机性能问题的首选工具。 语法为 jstat [option vmid [interval [s|ms] [count]] ] ,常用的选项如下: jinfo:Java配置信息工具 用来实时查看和调整虚拟机各项参数。 语法为 jinfo [option] pid ,常用选项如下:

【JVM之内存与垃圾回收篇】堆

六月ゝ 毕业季﹏ 提交于 2020-07-27 00:54:27
堆 堆的核心概念 堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个 JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域。 Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最大一块内存空间。 堆内存的大小是可以调节的。 《Java 虚拟机规范》规定,堆可以处于 物理上不连续 的内存空间中,但在 逻辑上 它应该被视为 连续的 。 所有的线程共享 Java 堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)。 -Xms10m:最小堆内存 -Xmx10m:最大堆内存 理解: ms:memory size mx:memory max size 下图就是使用:Java VisualVM 查看堆空间的内容,通过 jdk bin 提供的插件 《Java 虚拟机规范》中对 Java 堆的描述是:所有的对象实例以及数组都应当在运行时分配在堆上。(The heap is the run-time data area from which memory for all class instances and arrays is allocated) 我要说的是:“几乎”所有的对象实例都在这里分配内存。—从实际使用角度看的

JConsole可视化工具

心不动则不痛 提交于 2020-07-24 21:55:44
JConsole 可视化工具介绍 一、 JConsole介绍 1.1 JConsole描述 Jconsole (Java Monitoring and Management Console),一种基于JMX的可视化监视、管理工具。 1.2 启动JConsole 点击JDK/bin 目录下面的jconsole.exe 即可启动 然后会自动自动搜索本机运行的所有虚拟机进程。 选择其中一个进程可开始进行监控 1.3JConsole基本介绍 JConsole 基本包括以下基本功能:概述、内存、线程、类、VM概要、MBean 运行下面的程序、然后使用JConsole进行监控;注意设置虚拟机参数 import java.util.ArrayList; import java.util.List; /** * 设置虚拟机参数: * -Xms100M -Xms100m -XX:+UseSerialGC -XX:+PrintGCDetails */ public class JConsoleTool { static class OOMObject { public byte[] placeholder = new byte[64 * 1024]; } public static void fillHeap(int num) throws InterruptedException { Thread

【拥抱大厂系列】百度面试官问过的 “JVM内存分配与回收策略原理”,我用这篇文章搞定了

你说的曾经没有我的故事 提交于 2020-04-29 10:57:13
点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了3个月总结的一线大厂Java面试总结,本人已拿腾讯等大厂offer。 在前面的一篇文章 深入理解Java虚拟机-如何利用VisualVM进行性能分析 中讲到了一些关于JVM调优的知识,但是,其实,还是有一些问题没有非常清楚的可以回答的,这里先给出几个问题,然后,我们再展开这篇文章需要讲解的知识。 我们生成的对象最开始在哪分配?Eden?Survivor?还是老年代呢? 进入到老年代需要满足什么条件呢? 接下来,我们就带着这两个问题展开全文。 1 对象优先在哪分配 其实,通过前面几篇文章的讲解,这个问题其实已经见怪不怪了,在大多数的情况下,对象都是在新生代 Eden区 分配的,在前面的文章我们提到,在Eden区中如果内存不够分配的话,就会进行一次 Minor GC 。同时,我们还知道年轻代中默认下 Eden:Survivor0:Survivor2 = 8:1:1 ,同时,还能通过参数 -XX:SurvivorRatio 来设置这个比例(关于这些参数的分析都可以查看这篇文章: 深入理解Java虚拟机-常用vm参数分析 )。 下面我们通过一个例子来分析是不是这样的。 1.1 实例 给定JVM参数:-Xms40M -Xmx40M

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat, hprof使用详解

假装没事ソ 提交于 2020-04-28 12:13:03
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。 A、 jps(Java Virtual Machine Process Status Tool) jps主要用来输出JVM中运行的进程状态信息。语法格式如下: 1 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: 1 -q 不输出类名、Jar名和传入main方法的参数 2 -m 输出传入main方法的参数 3 -l

《深入理解 Java 虚拟机》读书笔记:虚拟机性能监控与故障处理工具

点点圈 提交于 2020-04-25 13:29:28
正文 一、JDK 的命令行工具 JDK 的 bin 目录下提供了一些用于监视虚拟机和故障处理的命令行工具。 名称 主要作用 jps JVM Process Status Tool,显示正在运行的虚拟机进程 jstat JVM Statistics Monitoring Tool,收集虚拟机各方面的运行数据 jinfo Configuration Info for Java,显示虚拟机配置信息 jmap Memory Map for Java,生成虚拟机的内存转储快照(heapdump 文件) jhat JVM Heap Dump Browser,用于分析 heapdump 文件,它会建立一个 HTTP/HTML 服务器,可在浏览器上查看分析结果 jstack Stack Trace for Java,显示虚拟机的快照进程 1、jps:虚拟机进程状况工具 jps 作用: 列出正在运行的虚拟机进程,并显示虚拟机进程执行主类(main() 函数所在的类)名称以及进程的本地虚拟机唯一 ID(Local Virtual Machine Identifier,LVMID)。对于本地虚拟机进程,LVMID 与操作系统进程 ID(PID)一致。 jps 命令格式: jps [options] [hostid] options:选项,可多个。 hostid:jps 可以通过 RMI 协议查询开启了

JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、jinfo、jconsole使用详解

…衆ロ難τιáo~ 提交于 2020-04-25 08:29:05
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具,本博客希望能起抛砖引玉之用,让大家能开始对JVM性能调优的常用工具有所了解。 现实企业级Java开发中,有时候我们会碰到下面这些问题: OutOfMemoryError,内存不足 内存泄露 线程死锁 锁争用(Lock Contention) Java进程消耗CPU过高 ...... 这些问题在日常开发中可能被很多人忽视(比如有的人遇到上面的问题只是重启服务器或者调大内存,而不会深究问题根源),但能够理解并解决这些问题是Java程序员进阶的必备要求。本文将对一些常用的JVM性能调优监控工具进行介绍,希望能起抛砖引玉之用。本文参考了网上很多资料,难以一一列举,在此对这些资料的作者表示感谢!关于JVM性能调优相关的资料,请参考文末。 A、 jps(Java Virtual Machine Process Status Tool) jps主要用来输出JVM中运行的进程状态信息。语法格式如下: 1 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: 1 2 3 4 -q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l

Linux服务器Java进程突然消失排查办法

南笙酒味 提交于 2020-04-23 10:47:59
出处: JAVA进程突然消失的原因? 问题描述 在实际生产环境下,如果我们遇见Java进程突然消失,该如何去排查问题? 思路 可能有几种原因: ①、Java应用程序的问题:发生OOM导致进程Crash 最常见的是发生堆内存异常“java.lang.OutOfMemoryError: Java heap space”,排查步骤如下: Step1: 查看JVM参数 -XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath=*/java.hprof; Step2: 根据HeapDumpPath指定的路径查看是否产生dump文件; Step3: 若存在dump文件,使用Jhat、VisualVM等工具分析即可; ②、JVM出错:JVM或JDK自身的Bug导致进程Crash   当JVM发生致命错误导致崩溃时,会生成一个hs_err_pid_xxx.log这样的文件,该文件包含了导致 JVM crash 的重要信息,我们可以通过分析该文件定位到导致 JVM Crash 的原因,从而修复保证系统稳定。   默认情况下,该文件是生成在工作目录下的,当然也可以通过 JVM 参数指定生成路径: -XX:ErrorFile=/var/log/hs_err_pid<pid>.log 这个文件的内容他主要有如下内容 日志头文件 导致 crash 的线程信息