JMAP

Java进程故障排查思路及步骤

吃可爱长大的小学妹 提交于 2020-05-02 14:27:49
目录 故障现象 原因分析 CPU使用率极低 CPU使用率持续极高 内存占用很高 解决思路及处理方式 常用工具 查看网络连接 线程堆栈日志分析 堆内存快照分析 线上问题诊断 故障现象 Java进程出现问题,通常表现出如下现象: 1.CPU使用率持续极高/低 2.内存占用持续极高,甚至出现OOM(例如:进程正常运行一段时间之后突然不再响应请求,但是进程依然存在) 3.Web应用响应时间很长/超时,甚至不响应直接出现502(使用nginx作为反向代理) 响应时间长、超时,甚至不响应,这是最直观的表现;而CPU使用率极高或极低,频繁出现Full GC甚至OOM,需要借助系统日志或者监控辅助发现。 原因分析 响应时间长、超时,甚至不响应,这是一个综合性的故障结果,可能并不单纯是应用程序本身的问题。 首先,需要排查网络连通性是否正常; 其次,如果后端还接了数据存储系统,除了排查应用程序本身的问题之外,还需要排查应用所依赖的第三方组件是否出现了性能瓶颈,这通常可以从应用程序日志中看到错误信息。 在直观的故障表象背后是对应的系统指标异常,排查思路如下。 CPU使用率极低 通常是线程Hang住了,或者是出现了死锁,通过线程堆栈日志可以进行定位。 CPU使用率持续极高 先使用jstack命令查看堆栈信息,结合线程堆栈信息分析可能的原因: 业务代码很忙,甚至出现了死循环,这个从线程堆栈日志中可以

服务器负载过高问题分析-不是cpu高负载也不是IO负载如何处理(阿里 几乎是必考题)

夙愿已清 提交于 2020-05-02 03:11:15
关于top命令 经常问load average 参考: load average 定义(网易面试) jvm dump的使用 参考: Jvm dump jstack jmap jstat 介绍与使用(内存与线程) 以及使用jstack定位问题 查看端口: 如何在Windows,Linux下查看JAVA端口占用情况(阿里) 问题现象: 1,top命令查询服务器负载达到2.0-5之间,tomcat的cpu使用率达到104% load average: linux系统中的Load对当前CPU工作量的度量。简单的说是 进程队列 的长度。 Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内平均 Load 。 问题分析过程: 1),磁盘使用率未超出正常范围 df -l 2),内存使用率未超出正常范围还有空闲 free free -m 查看linux系统内存使用量和交换区使用量,如图所示。 3),服务器流量未现明显峰值 4)jvm内存状态未现异常非GC原因 至于具体的jstat jmap jstack 的使用情况 参考: Jvm dump jstack jmap jstat 介绍与使用(内存与线程) 以及使用jstack定位问题 综合初步预估是tomcat有线程一直在运行占用cpu资源 问题引出:如何确定tomcat的100%的cpu使用率到底问题在哪? 问题定位方案:

Tomcat假死,不响应请求,hang住

梦想的初衷 提交于 2020-04-29 10:05:09
连续两天tomcat出现了假死的情况,不响应任何请求。但是日志里面没有看到任何相关异常。 调查方法,把当前内存堆栈和线程堆栈打印出来,然后进行分析。 #dump 方法栈信息 jstack $pid > /home/$pid/jstack.txt #dump jvm内存使用情况 jmap -heap $pid > /home/$pid/jmapheap.txt #dump jvm二进制的内存详细使用情况 (效果同在Tomcat的catalina.sh中添加 set JAVA_OPTS=%JAVA_OPTS% -server -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/heapdump 此文件需要借用内存分析工具如:Memory Analyzer (MAT)来分析) jmap -dump:format=b,file=/home/$pid/jmapdump.txt $pid    来源: oschina 链接: https://my.oschina.net/u/4258318/blog/4257839

【软件构造】第八章第二节 动态程序分析方法与工具

心不动则不痛 提交于 2020-04-28 12:15:22
第八章第二节 动态程序分析方法与工具 Outline Java性能调优工具: jstat jmap jhat Vistual VM MAT Memory dump Stack trace Notes ## Java性能调优工具 Jstat:获取JVM的Heap使用和GC的性能统计数据,命令如-gcutil Jmap:输出内存中的对象分布情况 如:jmap -clstats Jhat:导出heap dump,浏览/查询其中的对象分布情况 jstack:获取Java线程的stack trace 具体用途如下: 定位线程出现长时间停顿的原因,如多线程间死锁、死循环、请求外部资源 导致的长时间等待等。 线程出现停顿的时候通过jstack来查看各个线程的调用堆栈,就可以知道没 有响应的线程到底在后台做什么事情,或者等待什么资源。 Visual VM :提供了一个可视化界面,用于查看Java应用程序在JVM上运行时的详细信息,使用各种技术,包括jvmstat,JMX,Serviceability Agent(SA)和Attach API等 MAT :内存堆导出文件的分析工具,生成饼状图等,能够对问题发生时刻的系统内存状态获取一个整体印象,找到最有可能导致内存泄露的对象,进一步查看其是否有异常行为。 ## Memory Dump (堆转储文件) 转自 爪哇堂的博客   正如Thread

jdk(1.8)命令行工具(二)

南笙酒味 提交于 2020-04-28 11:27:33
2.3 jinfo:java配置信息工具    jinfo(Configuration Info for Java) 的作用是实时的查看和调整虚拟机的各项参数。使用jps -v 可以查看虚拟机启动时显示指定的参数列表,但如果想知道未被显示指定的参数的系统默认值,就只能使用jinfo -flag选项进行查看(jdk1.6以上也可以使用 java -XX:+PrintFlagsFinal进行查看)    命令格式:     jinfo [option] pid              jinfo工具主要选项 选项 作用 -flags 查看jvm参数 -flag 查看或修改(部分)某个jvm参数 -sysprops 查看系统参数 -h 查看jinfo命令帮助 2.4 jmap(Java内存映像工具)   jmap(Memery Map for JAVA) 主要用于生成堆转储快照(一般称为heapdump或dump文件),还可以用来查询finalize 执行队列、java堆和永久代的详细信息,如空间使用率、当前使用的是那种收集器等   命令格式:     jmap [option] vmid          jmap工具主要选项 选项 作用 -dump 生成java堆转储快照。格式为:-dump [live,] format=b,file=<filename>

jvm 性能调优工具之 jmap 命令详解

匆匆过客 提交于 2020-04-28 11:27:02
jmap名称: Java Memory Map(内存映射) 官方文档: https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jmap.html 功能描述: 内容太多,直接看前辈们的总结: java命令--jmap命令使用(这篇文章写得非常好) https://www.cnblogs.com/kongzhongqijing/articles/3621163.html Java虚拟机的内存组成以及堆内存介绍 http://www.hollischuang.com/archives/80 Java GC工作原理 http://www.hollischuang.com/archives/76 JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释 https://www.cnblogs.com/kxm87/p/7205414.html JDK,JRE,JVM区别与联系 http://www.hollischuang.com/archives/78 【JVM】12_空间分配担保(没看懂?) https://blog.csdn.net/u013295276/article/details/78468790?locationNum=1&fps=1 下面是我的一个小小实践: 1

【转】【JVM】jmap命令详解----查看JVM内存使用详情

廉价感情. 提交于 2020-04-28 09:27:06
1、jmap命令基本概述   jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。   打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。 64位机上使用需要使用如下方式: jmap -J-d64 -heap pid 2、命令格式 jmap [option] <pid> (to connect to running process) 连接到正在运行的进程 jmap [option] <executable <core> (to connect to a core file) 连接到核心文件 jmap [option] [server_id@]<remote server IP or hostname> (to connect to remote debug server) 连接到远程调试服务 3.参数说明 1) options: > pid: 目标进程的PID,进程编号,可以采用ps -ef | grep java 查看java进程的PID; > executable: 产生core dump的java可执行程序; > core: 将被打印信息的core dump文件; > remote-hostname-or-IP: 远程debug服务的主机名或ip; > server-id: 唯一id

应聘阿里,字节跳动美团90%会问到的JVM面试题! 史上最全系列!

痞子三分冷 提交于 2020-04-27 15:52:23
Java 内存分配 • 寄存器:程序计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码。 • 静态域:static 定义的静态成员。 • 常量池:编译时被确定并保存在 .class 文件中的(final) 常量值和一些文本修饰的符号引用(类和接口的全限定名,字段的名称和描述符,方法和名称和描述符)。 • 非 RAM 存储:硬盘等永久存储空间。 • 堆内存:new 创建的对象和数组,由 Java 虚拟机自动垃圾回收器管理,存取速度慢。 • 栈内存:基本类型的变量和对象的引用变量(堆内存空间的访问地址),速度快,可以共享,但是大小与生存期必须确定,缺乏灵活性。 串行(serial)收集器和吞吐量(throughput)收集器的区别是什么? 吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。 而串行收集器对大多数的小应用(在现代处理器上需要大概 100M 左右的内存)就足够了。 在 Java 中,对象什么时候可以被垃圾回收? 当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。 GC 是什么? 为什么要有 GC? GC 是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或 系统的不稳定甚至崩溃,Java 提供的 GC

Linux下快速分析DUMP文件

会有一股神秘感。 提交于 2020-04-27 03:51:18
dump文件传输到本地进行分析, 常常需要大量的等待时间。 使用IBM的eclipse的MAT工具可以直接在服务器上进行快速DUMP分析。 运行环境要求 linux操作系统 JDK8 以上 下载MAT的linux版本 Eclipse的MAT工具下载链接 MAT支持各种操作系统,找到Linux版本下载下来 # 运行uname -m 看一下linux是 x86_64还是 x86的帮助你选择下载那个版本。 uname -m # x86_64 http: //iso.mirrors.ustc.edu.cn /eclipse/mat /1.8/rcp /MemoryAnalyzer-1.8.0.20180604-linux.gtk.x86_64.zip 解压配置MAT基本参数 unzip MemoryAnalyzer-1 .8 .0 .20180604-linux .gtk .x86_64 .zip ## 修改 MAT的内存大小, 注意这个大小要根据你 dump文件大小来的,如果 dump文件是5 GB那么 这里最好配>5 GB 否则会报 MAT内存不足的异常 ## 修改 MemoryAnalyzer .ini 的 -Xmx6024m vi MemoryAnalyzer .ini jmap dump整个堆 想了解更详细的请看这篇博文

java虚拟机(八)--java性能监控与故障处理工具

两盒软妹~` 提交于 2020-04-25 13:29:46
问题定位:   除了个人经验,知识,工具也是很重要的,通过数据进行问题分析,包括:运行日志、异常堆栈、GC日志、线程快照(threaddump/javacore文件 )、堆转储快照 (heapdump/hprof文件)等。加上虚拟机监控和分析工具进行分析数据、定位解决问题 jdk所有命令参数详解: https://docs.oracle.com/javase/8/docs/technotes/tools/unix/ jdk命令行工具   在java_home的bin目录有很多重要的工具,除了常用的java.exe、javac.exe、javap.exe外,还有命令行工具和可视化工具,而且体积相对较小 jps:虚拟机进程状况工具,和Linux中ps功能相似 格式:jps [ options ] [ hostid ] 参数: - q 不输出类名、Jar名和传入main方法的参数 - m 输出传入main方法的参数 - l 输出main类或Jar的全限名 -v 输出传入JVM的参数 不指定hostid就默认为当前主机或服务器 jstat:虚拟机统计信息监控工具 jstat命令格式: jstat [ option vmid [ interval [ s | ms ] [ count ] ] ] vmid: 对于本地虚拟机进程而言,就是虚拟机ID,在Linux上面就是进程ID