JMAP

Java进阶训练营

安稳与你 提交于 2021-02-15 17:11:30
Java进阶训练营 \/ itspcool 一起交流学习 案例分析 学习组合使用多种 JVM 工具,详细了解 JVM 的内部运行状态。 对运行中的 JVM 进行堆内存、线程、CPU、GC 和死锁情况进行分析。 通过动态运行数据,分析热点类和方法,查找性能瓶颈。 核心要点 使用 jstat/jmap/jstack 等命令,JConsole/JVisualVM/JMC 等可视化工具剖析 JVM 性能。 分析 JVM 的堆内存、线程、类加载、CPU 使用情况,诊断 JVM GC 情况,检测死锁。 使用飞行记录器,分析一段时间内的 JVM 运行状态,分析热点方法和性能瓶颈。 一、 JAVA。要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级) 工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您 对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经 了。 二、 设计模式。其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代 码往往要借助一些设计模式

性能优化系列三:JVM优化

断了今生、忘了曾经 提交于 2021-02-12 11:16:56
一、几个基本概念 GCRoots对象都有哪些 所有正在运行的线程的栈上的引用变量。所有的全局变量。所有ClassLoader。。。 1.System Class .2.JNI Local 3.JNI Global 4.Thread Block 5.Busy Monitor 6.Java Local 7.Native Stack 8.Unfinalized 9.Unreachable 10.Java Stack Frame 11.Unknown 栈帧的解释 Java虚拟机栈(Java Virtual Machine Stacks)是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。 简单地说,栈帧就是一个方法,里面有输入输出参数,局部变量表,返回值等信息,第一个参数一定是this 方法区说明 与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。 举例:有一个HelloWorld的类如下 import java.text.SimpleDateFormat; import java

How to run jcmd without the JDK?

你离开我真会死。 提交于 2021-02-10 14:55:22
问题 I'm trying to figure out how to drop jcmd.exe on a windows server installed at a client site so that we can troubleshoot heap and thread issues. Don't really want to install the full JDK since it complicates the environment. jcmd.exe definitely wants some components from the JDK to run, but I'm unable to determine which ones. If I can get it down to a small set that we unzip into a folder, use it to capture data, and then destroy, that would be perfect. Anybody know what JDK components jcmd

How to run jcmd without the JDK?

孤街浪徒 提交于 2021-02-10 14:50:23
问题 I'm trying to figure out how to drop jcmd.exe on a windows server installed at a client site so that we can troubleshoot heap and thread issues. Don't really want to install the full JDK since it complicates the environment. jcmd.exe definitely wants some components from the JDK to run, but I'm unable to determine which ones. If I can get it down to a small set that we unzip into a folder, use it to capture data, and then destroy, that would be perfect. Anybody know what JDK components jcmd

Java程序性能监控工具

﹥>﹥吖頭↗ 提交于 2021-02-10 02:27:35
系统性能监控: 确定系统运行的整体状态,基本定位问题所在 uptime 命令 [root@localhost ~]# uptime 23:19:38 up 244 days, 3:39, 34 users, load average: 7.36, 7.81, 7.79 ps,获取服务器有多少逻辑核心:grep 'model name' /proc/cpuinfo | wc -l,一般情况下load average除以逻辑核心数 < 0.7 认为CPU压力不大 系统时间 时间从开机到现在的运行时间 连接数:每一个终端算一个连接 1,5,15分钟内的系统平均负载:运行队列中的平均进程数。 top命令 第一行同uptime CPU、内存情况 每个进程占CPU的情况 可以知道哪个程序占用CPU最多 vmstat命令 可以统计系统的CPU,内存,swap,io等情况 CPU占用率很高,上下文切换频繁、说明系统中有线程正在频繁切换。 vmstat 1 4 指定采样频率和采样次数,每1秒采集1次,采集4次 [root@localhost ~]# vmstat 1 4 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi

JVM性能监控工具(一)-jdk命令行工具

人走茶凉 提交于 2021-02-09 20:03:52
转载:http://blog.csdn.net/top_code/article/details/51456186 当系统出bug需要定位问题的时候,知识、经验是关键基础,数据是依据,工具是运用知识处理数据的手段。这里所说的数据包括:运行日志,异常堆栈,GC日志,线程快照(threaddump/javacore文件),堆转储快照(heapdump/hprof文件)等。使用适当的虚拟机监控和分析工具可以加快我们分析数据、定位问题的速度。 JDK的命令行工具 JDK本身提供了很多方便的JVM性能监控工具,除了集成式的VisualVM和jConsole外,还有jps、jstack、jmap、jhat、jstat等小巧的工具。它们在JDK的bin目录之下: 1.jps 说明 jps(JVM Process Status Tool)用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。 命令格式 > jps [options] [hostid] 1 jps常用options如下表: 选项 作用 -q 只输出LVMID,省略主类的名称 -m 输出虚拟机进程启动时传递给主类main()函数的参数 -l 输出主类的全名,如果进程执行的是jar,输出jar路径 -v 输出虚拟机进程启动时JVM参数 示例 > jps -l 1 2.jstat 说明 jstat(JVM

Java Monitoring&Troubleshooting Tools

半世苍凉 提交于 2021-02-08 21:55:48
JDK Tools and Utilities Monitoring Tools You can use the following tools to monitor JVM performance statistics. The tools described in this section are unsupported and experimental, and should be used with that in mind. <font color='red'> They may not be available in future JDK versions </font>. These tools are supported on all platforms except Windows 98 and Windows ME. Tool Name Brief Description <font color='blue'>jps Experimental: JVM Process Status Tool - Lists instrumented HotSpot Java virtual machines on a target system. <font color='blue'>jstat Experimental: JVM Statistics Monitoring

JVM参数配置与应用测试

半腔热情 提交于 2021-02-01 01:55:37
JVM参数配置 在我们整个JVM调优中,JVM的参数配置也必不可少,当我们使用给定的一些参数启动JVM,就可以在系统运行时打印相关日志,有利于出现分析实际问题。 -XX:+PrintGC :使用这个参数,虚拟机启动后,只要遇到GC就会打印日志。其中 -XX 说明增加配置, + 代表启用配置,如果不写或者写减号代表不启用配置 -XX:+UseSerialGC :配置串行回收器,垃圾回收会有单独的一个线程去负责垃圾回收,串行垃圾回收器是垃圾回收中的一种。 -XX:+PrintGCDetails :打印GC详细信息,包括各个区的情况 -Xms :设置java程序启动时初始堆大小 -Xmx :设置java程序能获得的最大堆大小 -XX:+PrintCommandLineFlags :可以将隐式或者显示传给虚拟机的参数输出 -XX:+HeapDumpOnOutOfMemoryError :发生OOM时生成dump文件 -XX:HeapDumpPath=/You/path :生成的dump文件存放路径 在实际工作中,我们可以直接 将初始的堆大小与最大堆大小设置相等 , 这样的好处是可以 减少程序运行时的垃圾回收次数,从而提高性能 。 1. Heap内存分配测试 编写测试类 public class JvmMemoryDistributeDemo { public static void

Java虚拟机--常用Java命令(一)

纵饮孤独 提交于 2021-01-31 23:49:53
1.Java常用命令    jps :查看本机的Java进程信息。    jstack :打印线程的栈信息,制作线程Dump。    jmap :打印内存映射,只做堆Dump。    jstat :性能监控工具。    jhat :内存分析工具。   jconsole:简易的可视化控制台。   jvisualvm:功能强大的控制台。 2.什么是Java Dump?有什么用?   Java Dump就是虚拟机的运行时快照,其将Java虚拟机运行时的状态和信息保存到文件中去。作用:可以了解程序运行时,虚拟机中的运行时状态信息;针对非业务逻辑性的BUG,如内存泄漏、内存溢出等。 3.制作Java Dump   ■ 使用Java虚拟机制作Dump     -xx:+HeapDumpOnOutOfMemoryError 指示虚拟机在发生内存不足错误时,自动生成堆Dump。   ■ 使用图形工具制作Dump     使用JDK 1.6 自带的工具:Java VisualVM   ■ 使用命令行制作Dump     jstack:制作线程Dump     jmap:制作堆Dump 4.常用命令之jps    作用   显示当前所有Java进程pid的命令。    使用   想要学习一个命令,先来看看帮助,使用 jps -help 查看帮助:      -q 只显示pid,不显示class名称

后浪,谈谈你对jvm性能调优的理解

人走茶凉 提交于 2021-01-27 09:47:01
在我们日常的研发工作中, 经常会遇到系统的性能问题,这时我们必须进行系统的性能调优。系统调优分好多种,比如架构和代码优化、jvm调优、操作系统调优、数据库调优、tomcat调优、网络调优等。架构和代码优化是效率最高的调优手段,但是并不能解决所有的性能问题。今天我们要回顾的是一个老生常谈的话题,jvm调优。 本文主要包括以下内容 Java内存模型回顾 什么时候需要JVM调优 常见的OOM异常及案例 JVM自带监控工具 JVM常用调优参数 JVM第三方监控工具 调优案例 Java内存模型回顾 首先,我们以HotSpot回顾一下JVM的内存模型,见下图: HotSpot内存模型分为3个部分: 类加载器 类加载器用于加载java编译后的.class文件,提取其中的类信息以某种数据结构存放在方法区。 运行时数据区 线程栈和本地方法栈用于存放线程运行时方法调用等相关信息,程序计数器记录字节码指令在主内存中的地址,这3个模块都是线程私有的。 堆中存放程序运行时创建的对象。 对于jvm规范中的方法区,java8以前,HotSpot对方法区的实现是在永久代。从java7开始,HotSpot开始移除永久代,符号引用迁移到native heap,字面量和类静态变量移动到java堆。Java8中HotSpot彻底废弃了永久代,用元空间来取代永久代实现jvm规范中的方法区。元空间用来专门存储类的元数据