JVM-故障分析及性能调优
文章平均质量分 94
Jvm-故障分析及性能调优
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
性能优化必备——火焰图
火焰图(),因其形似火焰而得名。如上就是一个典型的火焰图,它由各种大小/颜色的方块组成,每个方块内部还标识了文字,整个图片顶部凹凸不平,形似一簇簇“火苗”,因此得名火焰图。火焰图是 SVG 生成,因此可以与用户互动,鼠标悬浮在某个方块时,会详细展示内部文字。点击后,即会以当前被点击方块为底向上展开。特征使用火焰图分析之前,我们得首先了解火焰图的基本构造每一列代表一个调用栈,每一格代表一个被调用函数方块上的字符标识调用方法,数字表示当前采样出现次数。转载 2023-03-07 13:21:12 · 1325 阅读 · 0 评论 -
jvm 性能调优工具之 jcmd
实践jcmd是jdk自带的一个神器,能够很方便的对java程序进行profiling。jcmd其实可以替代很多常用的工具,比如jstak,jmap。接下来让我们了解下什么是jcmd,jcmd能够帮助我们定位什么问题?工作中我们如何使用jcmd。从jdk7开始,jcmd就是jdk自带的一个工具。在正确配置了JDK的PATH的情况下,我们可以直接在命令行中执行jcmd:[root@vincent-testing ~]# jcmd -hUsage: jcmd <pid | main clas转载 2020-07-06 17:15:00 · 1725 阅读 · 0 评论 -
JVM 堆内存溢出后,其他线程是否可继续工作
最近网上出现一个美团面试题:“一个线程OOM后,其他线程还能运行吗?”。我看网上出现了很多不靠谱的答案。这道题其实很有难度,涉及的知识点有jvm内存分配、作用域、gc等,不是简单的是与否的问题。由于题目中给出的OOM,java中OOM又分很多类型;比如:堆溢出(“java.lang.OutOfMemoryError: Java heap space”)、永久带溢出(“java.lang.OutOfMemoryError:Permgen space”)、不能创建线程(“java.lang.OutOfMem转载 2020-06-29 15:16:37 · 828 阅读 · 0 评论 -
解密Java内存溢出之持久代
垃圾回收是Java程序员了解最少的一部分。他们认为Java虚拟机接管了垃圾回收,因此没必要去担心内存的申请,分配等问题。但是随着应用越来越复杂,垃圾回收也越来越复杂,一旦垃圾回收变的复杂,应用的性能将会大打折扣。所以,Java程序员了解垃圾回收的机制并且知道怎样解决“内存溢出”问题会有很大的益处。在Java中,有两个非常普遍的内存溢出问题。一个是堆内存溢出,另一个是持久代内存溢出。持久代和类加载器 Java对象是java 类的实例。每当创建一个Java对象时,Java虚拟机都会创建该对象...转载 2020-06-20 20:01:41 · 903 阅读 · 0 评论 -
JAVA 线上故障排查完整套路
线上故障主要会包括 CPU、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如 jstack、jmap 等工具也是不囿于一个方面的问题的,基本上出问题就是 df、free、top 三连,然后依次 jstack、jmap 伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查 CPU 方面的问题。CPU 异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁 gc 以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导转载 2020-05-31 18:59:35 · 772 阅读 · 0 评论 -
JVM 优化经验总结
开始之前Java 虚拟机有自己完善的硬件架构, 如处理器、堆栈、寄存器等,还具有相应的指令系统。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 Java 虚拟机上运行的目标代码 (字节码), 就可以在多种平台上不加修改地运行。Java 虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。注意:本文仅针对 JDK7、HotSPOT Java...转载 2020-03-18 23:03:13 · 614 阅读 · 0 评论 -
JVM优化系列之一(-Xss调整Stack Space的大小)
http://blog.csdn.net/zhuyijian135757/article/details/38025339Java程序中,每个线程都有自己的Stack Space(堆栈)。这个Stack Space不是来自Heap的分配。所以Stack Space的大小不会受到-Xmx和-Xms的影响,这2个JVM参数仅仅是影响Heap的大小。Stack Space用来做方转载 2018-02-01 14:34:06 · 10968 阅读 · 0 评论 -
JVM故障分析及性能优化系列之七:使用MAT的Histogram和Dominator Tree定位溢出源
上一篇文章概括的介绍了JVM Heap Dump文件生成的方式以及内存分析工具MAT的概要功能,今天讲解如何使用MAT的Histogram和Dominator Tree两个视图,定位到内存溢出源。目录基础概念Shallow Heap 和 Retained Heap对象引用(Reference)GC Roots和Reference ChainHistogram(直方图)视图...转载 2020-01-14 14:13:49 · 1004 阅读 · 0 评论 -
Java线上应用故障排查之一:高CPU占用(方法论简介)
近期java应用,CPU使用率一直很高,经常达到100%,通过以下步骤完美解决,分享一下。方法一:转载:http://www.linuxhot.com/java-cpu-used-high.html1.jps 获取Java进程的PID。2.jstack pid >> java.txt 导出CPU占用高进程的线程栈。3.top -H -p PID 查看对应进程的哪个线...转载 2020-01-14 11:43:59 · 752 阅读 · 0 评论 -
JVM故障分析及性能优化系列之六:JVM Heap Dump(堆转储文件)的生成和MAT的使用
前面的文章详细讲述了分析Thread Dump文件,实际在处理Java内存泄漏问题的时候,还需要分析JVM堆转储文件来进行定位。目录JVM Heap Dump(堆转储文件)的生成使用 jmap 命令生成使用 JConsole 生成在JVM中增加参数生成常见的Heap Dump文件分析工具jhatEclipse Memory Analyzer(MAT)IBM He...转载 2020-01-14 11:25:10 · 999 阅读 · 0 评论 -
JVM故障分析及性能优化系列之五:常见的Thread Dump日志案例分析
我们在上篇文章中详细描述了Thread Dump中Native Thread和JVM Thread线程的各种状态及描述,今天总结分析的一些原则,并详细列举一些案例进行说明。目录症状及解决方案CPU占用率很高,响应很慢CPU占用率不高,但响应很慢关注点概况系统线程状态为deadlock系统线程状态为waiting for monitor entry 或 in Obje...转载 2020-01-13 11:42:09 · 1195 阅读 · 0 评论 -
JVM故障分析及性能优化系列之四:jstack生成的Thread Dump日志线程状态
前面文章中只分析了Thread Dump日志文件的结构,今天针对日志文件中Java EE middleware, third party & custom application Threads部分线程的状态进行详细的分析。目录Thread Dump日志的线程信息系统线程状态 (Native Thread Status)deadlockrunnableblock...转载 2020-01-13 11:25:39 · 739 阅读 · 0 评论 -
JVM故障分析及性能优化系列之三:jstat命令的使用及VM Thread分析
前面提到了一个使用jstack的shell脚本,通过命令可以很快地定位到指定线程对应的堆栈信息。目录使用jstat命令JVM内存模型JVM内存参数设置堆内存设置非堆内存设置日志分析使用jstat命令当服务器CPU100%的时候,通过定位占用资源最大的线程定位到VM Thread:"VM Thread" prio=10 tid=0x00007fbea80d...转载 2020-01-13 11:23:58 · 962 阅读 · 0 评论 -
JVM故障分析及性能优化系列之二:jstack生成的Thread Dump日志结构解析
这篇文章首先对Thread Dump日志文件的结构进行分析。目录第一部分:Full thread dump identifier第二部分:Java EE middleware, third party & custom application Threads第三部分:HotSpot VM Thread"Attach Listener""DestroyJavaVM"...转载 2020-01-13 11:01:03 · 1339 阅读 · 0 评论 -
JVM故障分析及性能优化系列之一:使用jstack定位线程堆栈信息
前一段时间上线的系统升级之后,出现了严重的高CPU的问题,于是开始了一系列的优化处理之中,现在将这个过程做成一个系列的文章。目录基本概念 {#basic-info}使用jstack生成thread dump生成shell文件基本概念 {#basic-info}在对Java内存泄漏进行分析的时候,需要对jvm运行期间的内存占用、线程执行等情况进行记录的dump文件,常用的主要...转载 2020-01-13 10:55:55 · 606 阅读 · 0 评论 -
使用JMAP dump及分析dump文件
https://blog.csdn.net/kevin_luan/article/details/8447896查看整个JVM内存状态 jmap -heap [pid]要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起查看JVM堆中对象详细占用情况jmap -histo [pid]导出整个JVM 中内存信息jmap -dump:format=b,file...转载 2018-06-28 14:49:30 · 2261 阅读 · 0 评论 -
Java应用性能分析工具:async-profiler
https://www.jianshu.com/p/9364028cca4e厉害的内容及时对项目进行性能检测,并且分析检测结果数据,发现热点代码是一项充满意义的工作,因为可能因为某一段热点代码会拖慢整个系统的运行,这是不可忍受的,发现热点代码之后需要及时进行代码优化,并且重复检测,多多角度检测,来360无死角的发现项目的性能瓶颈,让运行着的项目是最优化的。这也是每一位开发者的义务。发现...转载 2019-07-17 13:38:08 · 1307 阅读 · 0 评论 -
反射导致的sun.reflect.inflationThreshold - jvm参数优化
http://hanzheng.github.io/tech/jvm/2013/10/25/last-time-with-jvm.htmlhttps://wujc.cn/archives/90https://www.jianshu.com/p/9f814df5252e简单来说,由于使用太多反射,并且该参数设置的阈值较小导致触发 JVM 的反射优化操作,反射调用时会根据每个方法生成一个包...转载 2019-08-13 11:43:57 · 7992 阅读 · 3 评论 -
JVM最大线程数
JVM最大创建线程数量由JVM堆内存大小、线程的Stack内存大小、系统最大可创建线程数(Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响。具体如下:-Xms 最小堆内存-Xmx 最大堆内存-Xss 设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M操作系统限制系统最大...转载 2019-08-27 14:23:27 · 4253 阅读 · 0 评论 -
如何读懂火焰图
软件的性能分析,往往需要查看 CPU 耗时,了解瓶颈在哪里。火焰图(flame graph)是性能分析的利器。本文介绍它的基本用法。一、perf 命令让我们从 perf 命令(performance 的缩写)讲起,它是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)。通常,它的执行频率是 99Hz(每秒99次),如果99次都返回...转载 2019-09-24 18:23:23 · 901 阅读 · 0 评论 -
java程序性能优化
一、避免在循环条件中使用复杂表达式在不做编译优化的情况下,在循环中,循环条件会被反复计算,如果不使用复杂表达式,而使循环条件值不变的话,程序将会运行的更快。例子:import java.util.vector;class cel { void method (vector vector) { for (int i = 0; i < vector.si...转载 2013-03-22 14:26:23 · 2387 阅读 · 0 评论 -
MAT - Memory Analyzer Tool 使用进阶
#前言#尽管Java虚拟机可以帮我们对内存进行回收,但是其回收的是Java虚拟机不再引用的对象。很多时候我们使用系统的IO流,Cursor,Receiver如果不及时释放,就会导致内存泄漏,这些场景是常见的,一般开发人员也都能够避免。但是,很多时候内存泄漏的现象不是很明显,比如内部类,Handler相关的使用导致的内存泄漏,或者你使用了第三方library的一些引用,比较消耗资源,但又不是像系统...转载 2019-06-06 19:50:14 · 986 阅读 · 0 评论 -
使用Eclipse Memory Analyzer进行内存泄漏分析三部曲
一、准备工作 分析较大的dump文件(根据我自己的经验2G以上的dump文件就需要使用以下介绍的方法,不然mat会出现oom)需要调整虚拟机参数 找个64位的系统在MemoryAnalyzer.ini设置-Xmx2g 如果是32位的xp可以使用下面的方法进行尝试:安装jrockit 6.0的JDK mat使用jrockit的jdk来启动 Java代码 -vm D:/P...转载 2015-09-22 14:16:57 · 2171 阅读 · 0 评论 -
利用MemoryAnalyzer进行OutOfMemoryError的诊断分析
这篇帖子只介绍利用MemoryAnalyzer进行简单的JVM的堆的分析,至于JVM的内部结构是怎么样的,这里不进行分析。好吧,废话不多说;首先如果我们要分析JVM某个时刻的Heap的对象分配情况,我们就必须要dump这个时刻的JVM的heap(堆);有以下几个办法进行dump某个时刻JVM的heap内容: 1、 使用$JAVA_HOME/bin/jmap -dump...转载 2015-09-22 14:14:35 · 1872 阅读 · 0 评论 -
MAT(Memory Analyzer Tool)工具入门介绍
1、MAT是什么? MAT(Memory Analyzer Tool),一个基于Eclipse的内存分析工具,是一个快速、功能丰富的JAVA heap分析工具,它可以帮助我们查找内存泄漏和减少内存消耗。使用内存分析工具从众多的对象中进行分析,快速的计算出在内存中对象的占用大小,看看是谁阻止了垃圾收集器的回收工作,并可以通过报表直观的查看到可能造成这种结果的对象。 2.为什么...转载 2015-09-22 13:43:27 · 1033 阅读 · 0 评论 -
top+jstack分析cpu过高原因
1、用ps -ef | grep tomcat-v3 查出tomcat运行的进程id2、用top -Hp pid 查询进程下所有线程的运行情况(shift+p 按cpu排序,shift+m 按内存排序)top -Hp 303163、找到cpu最高的pid,用printf ‘%x\n’ pid 转换为16进制printf ‘%x\n’ 305064、用jstack 进程id ...转载 2018-08-03 17:59:13 · 12962 阅读 · 0 评论 -
windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码
https://blog.csdn.net/baidu_18607183/article/details/62235657http://blog.csdn.net/hexin373/article/details/8846919我的一个Java程序偶尔会出现cpu占用很高的情况一直不知道什么原因今天终于抽时间解决了系统是win2003jvisualvm 和 jconsole貌似都只能看到总共占用的...转载 2018-06-26 10:49:42 · 783 阅读 · 0 评论 -
java dump文件怎么生成和分析-JMAP用法
https://blog.csdn.net/hemin1003/article/details/71425209jmap是java自带的工具1. 查看整个JVM内存状态 jmap -heap [pid]pid 为 java 进程号,可使用jps 或者 linux 命令行查看,通过 ps -ef | grep java 得到如上线程将某线程终止时用 kill -9 XXXXX XXXXX为...转载 2018-06-26 10:49:09 · 14321 阅读 · 0 评论 -
又一次线上OOM排查经过
https://my.oschina.net/flashsword/blog/265442最近线上一个服务又出现了频繁Full GC的情况,导致提供的业务经常超时。问题出现非常不稳定,经过两周的时候,终于又捕捉到了一次Full GC,于是联系运维做Heap Dump之后,经过一系列分析,终于解决问题。这次的问题稍微复杂一点,但是也比较有代表性,用到了VisualVM和MAT两个工具,继续记录如下。...转载 2018-06-26 10:41:47 · 1053 阅读 · 0 评论 -
jps 命令使用
https://www.cnblogs.com/vinozly/p/5068077.htmljps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。很多人都是用过unix系统里的ps命令,这个命令主要是用来显示当前系统...转载 2018-06-26 10:30:52 · 1632 阅读 · 0 评论 -
JVM性能调优监控工具jps、jstack、jstat、jmap、jinfo使用详解
jps查看所有的jvm进程,包括进程ID,进程启动的路径等等。我自己也用PS,即:ps -ef | grep javajstack观察jvm中当前所有线程的运行情况和线程当前状态。系统崩溃了?如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发...转载 2016-06-13 14:44:52 · 2772 阅读 · 0 评论 -
java可视化监控工具
1.JConsole JConsole工具在JDK/bin目录下,启动JConsole后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定。双击其中一个jvm进程即可开始监控,也可使用“远程进程”来连接远程服务器。 进入JConsole主界面,有“概述”、“内存”、“线程”、“类”、“VM摘要”和"Mbean"六个页签:内存页签相当于jstat...转载 2017-09-25 12:52:11 · 2670 阅读 · 0 评论 -
Eclipse MAT内存分析工具(Memory Analyzer Tool)
https://www.cnblogs.com/yueshutong/p/9824772.htmlMAT内存分析工具MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器。可以用于查找内存泄露以及查看内存消耗情况。MAT是基于Eclipse开发的,是一款免费的性能分析工具。读者可以在http://www.eclipse.org/mat/下载并使用MAT。1...转载 2019-06-06 19:33:54 · 9142 阅读 · 1 评论 -
通过jstack与jmap分析一次线上故障
https://blog.csdn.net/lengyue309/article/details/80590119一、发现问题 下面是线上机器的cpu使用率,可以看到从4月8日开始,随着时间cpu使用率在逐步增高,最终使用率达到100%导致线上服务不可用,后面重启了机器后恢复。二、排查思路简单分析下可能出问题的地方,分为5个方向:1.系统本身代码问题2.内部下游系统...转载 2019-05-30 16:44:11 · 774 阅读 · 0 评论 -
jvm 性能调优工具之 jstat
https://www.jianshu.com/p/213710fb9e40概述Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。jst...转载 2019-05-30 09:42:15 · 582 阅读 · 0 评论 -
JVM调优命令-jmap
https://www.cnblogs.com/myna/p/7573843.htmljmapJVM Memory Map命令用于生成heap dump文件,如果不使用这个命令,还可以使用-XX:+HeapDumpOnOutOfMemoryError参数来让虚拟机出现OOM的时候自动生成dump文件。jmap不仅能生成dump文件,还可以查询finalize执行队列、Java堆和永...转载 2019-04-04 17:49:34 · 774 阅读 · 0 评论 -
java命令--jmap命令使用
参考:1、http://blog.csdn.net/fenglibing/article/details/64119532、http://www.cnblogs.com/o-andy-o/category/488695.html3、性能问题的查找4、Java命令学习系列(三)——Jmap jdk安装后会自带一些小工具,jmap命令(Java Memory Map)是其中之一。主要用...转载 2019-01-26 19:24:47 · 1652 阅读 · 1 评论 -
Linux下查看消耗CPU的线程
https://blog.csdn.net/qq_24949727/article/details/70738723 javaweb 项目部署后发现很耗cpu,需要查出问题所在写个测试程序,记相关步骤:故意写个死循环 public class TestCpu { public static void main(String[] args) {...转载 2018-08-03 18:04:09 · 2170 阅读 · 0 评论 -
JProfiler 的使用
一、安装JProfiler 从http://www.ej-technologies.com/下载5.1.2并申请试用序列号 二、主要功能简介1.内存剖析 Memory profilerJProfiler 的内存视图部分可以提供动态的内存使用状况更新视图和显示关于内存分配状况信息的视图。所有的视图都有几个聚集层并且能够显示现有存在的对象和作为垃圾回收的对象。所有对...转载 2017-09-25 12:52:54 · 3037 阅读 · 0 评论 -
用jvisualvm分析dump文件
https://blog.csdn.net/lkforce/article/details/60878295最近有一个java服务的堆内存溢出,然后僵死了,在重启服务之前用jmap命令生成了一份dump文件便于后面分析。生成dump文件的命令:jmap -dump:format=b,file=20170307.dump 16048file后面的是自定义的文件名,最后的数字是进程的pid。使用jvi...转载 2018-06-26 10:30:18 · 12063 阅读 · 1 评论