java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap
java-core P487 P515
chapter11,主要讲java的异常,里面很多内容收获良多,之前一直没注意过的。
一,Throwable类获得StackTraceElement ,可进行堆栈跟踪,用法如下:
- Throwable t = new Throwable();
- StackTraceElement [] frames = t.getStackTrace();
- for(StackTraceElement frame :frames)
- analyze frame
- Map<Thread,StackTraceElement[] map>=Thread.getAllStackTraces();
- for(Thread t :map.keySet()){
- StackTraceElement[] frames k= map.get(t);
- analyze frames
- }
示例:
- public class TestHeap {
public static void main(String[]args){
Throwable t = new Throwable();
StringWriter out = new StringWriter();
t.printStackTrace(new PrintWriter(out));
String description = out.toString();
System.out.println(description);
System.out.println("——————分割线——————");
StackTraceElement[]frames = t.getStackTrace();
for(StackTraceElement frame:frames){
System.out.println(frame);
}
System.out.println("——————分割线——————");
Map<Thread,StackTraceElement[]> map = Thread.getAllStackTraces();
for(Thread t1:map.keySet()){
StackTraceElement []fram=map.get(t1);
for(StackTraceElement element :fram){
System.out.println("--- "+element.getClassName()+"--- "
+element.getClass().getName()+" ---"+element.getFileName()
+",--- "+element.getMethodName()+",--- "+element.getLineNumber());
}- }
}
}
输出结果:
- java.lang.Throwable
- at enums.TestHeap.main(TestHeap.java:9)
- at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- at java.lang.reflect.Method.invoke(Method.java:498)
- at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
- ——————分割线——————
- enums.TestHeap.main(TestHeap.java:9)
- sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
- sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
- sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
- java.lang.reflect.Method.invoke(Method.java:498)
- com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
- ——————分割线——————
- --- java.lang.ClassLoader$NativeLibrary--- java.lang.StackTraceElement ---ClassLoader.java,--- load,--- -2
- --- java.lang.ClassLoader--- java.lang.StackTraceElement ---ClassLoader.java,--- loadLibrary0,--- 1941
- --- java.lang.ClassLoader--- java.lang.StackTraceElement ---ClassLoader.java,--- loadLibrary,--- 1845
- --- java.lang.Runtime--- java.lang.StackTraceElement ---Runtime.java,--- loadLibrary0,--- 870
- --- java.lang.System--- java.lang.StackTraceElement ---System.java,--- loadLibrary,--- 1122
- --- java.net.AbstractPlainSocketImpl$1--- java.lang.StackTraceElement ---AbstractPlainSocketImpl.java,--- run,--- 84
- --- java.net.AbstractPlainSocketImpl$1--- java.lang.StackTraceElement ---AbstractPlainSocketImpl.java,--- run,--- 82
- --- java.security.AccessController--- java.lang.StackTraceElement ---AccessController.java,--- doPrivileged,--- -2
- --- java.net.AbstractPlainSocketImpl--- java.lang.StackTraceElement ---AbstractPlainSocketImpl.java,--- <clinit>,--- 81
- --- java.net.ServerSocket--- java.lang.StackTraceElement ---ServerSocket.java,--- setImpl,--- 288
- --- java.net.ServerSocket--- java.lang.StackTraceElement ---ServerSocket.java,--- <init>,--- 230
- --- java.net.ServerSocket--- java.lang.StackTraceElement ---ServerSocket.java,--- <init>,--- 128
- --- com.intellij.rt.execution.application.AppMain$1--- java.lang.StackTraceElement ---AppMain.java,--- run,--- 77
- --- java.lang.Thread--- java.lang.StackTraceElement ---Thread.java,--- run,--- 748
- --- java.lang.Thread--- java.lang.StackTraceElement ---Thread.java,--- dumpThreads,--- -2
- --- java.lang.Thread--- java.lang.StackTraceElement ---Thread.java,--- getAllStackTraces,--- 1610
- --- enums.TestHeap--- java.lang.StackTraceElement ---TestHeap.java,--- main,--- 20
- --- sun.reflect.NativeMethodAccessorImpl--- java.lang.StackTraceElement ---NativeMethodAccessorImpl.java,--- invoke0,--- -2
- --- sun.reflect.NativeMethodAccessorImpl--- java.lang.StackTraceElement ---NativeMethodAccessorImpl.java,--- invoke,--- 62
- --- sun.reflect.DelegatingMethodAccessorImpl--- java.lang.StackTraceElement ---DelegatingMethodAccessorImpl.java,--- invoke,--- 43
- --- java.lang.reflect.Method--- java.lang.StackTraceElement ---Method.java,--- invoke,--- 498
- --- com.intellij.rt.execution.application.AppMain--- java.lang.StackTraceElement ---AppMain.java,--- main,--- 147
- --- java.lang.Object--- java.lang.StackTraceElement ---Object.java,--- wait,--- -2
- --- java.lang.ref.ReferenceQueue--- java.lang.StackTraceElement ---ReferenceQueue.java,--- remove,--- 143
- --- java.lang.ref.ReferenceQueue--- java.lang.StackTraceElement ---ReferenceQueue.java,--- remove,--- 164
- --- java.lang.ref.Finalizer$FinalizerThread--- java.lang.StackTraceElement ---Finalizer.java,--- run,--- 209
- --- java.lang.Object--- java.lang.StackTraceElement ---Object.java,--- wait,--- -2
- --- java.lang.Object--- java.lang.StackTraceElement ---Object.java,--- wait,--- 502
- --- java.lang.ref.Reference--- java.lang.StackTraceElement ---Reference.java,--- tryHandlePending,--- 191
- --- java.lang.ref.Reference$ReferenceHandler--- java.lang.StackTraceElement ---Reference.java,--- run,--- 153
- Process finished with exit code 0
二,jconsole和jmap
之前有了解过java的JVM性能监控工具,但是没有具体执行过,只是有个很模糊的概念。
jconsole原理:
java允许虚拟机中的代理装置跟踪内存消耗,线程使用,类加载等情况。jconsole就是一个展示这种功能的例子:用于显示虚拟机性能的统计结果。
jconsole 用法
- >cmd
- >jconsole
>jconsole pid
jconsole页面
jmap
可以使用jmap获得一个堆的存储,其中显示了堆中的每个对象,使用如下:
- jmap pid
结果如下
- C:\Users\user>jmap 3128
- Attaching to process ID 3128, please wait...
- Debugger attached successfully.
- Server compiler detected.
- JVM version is 25.144-b01
- 0x0000000053040000 36K C:\Program Files\Java\jdk1.8.0_144\jre\bin\attach.dll
- 0x0000000053050000 840K C:\Program Files\Java\jdk1.8.0_144\bin\MSVCR100.dll
- 0x0000000053130000 188K C:\Program Files\Java\jdk1.8.0_144\bin\jli.dll
- 0x0000000053160000 840K C:\Program Files\Java\jdk1.8.0_144\jre\bin\msvcr100.dll
- 0x0000000053240000 168K C:\Program Files\Java\jdk1.8.0_144\jre\bin\dcpr.dll
- 0x00000000532c0000 264K C:\Program Files\Java\jdk1.8.0_144\jre\bin\t2k.dll
- 0x0000000053390000 52K C:\Program Files\Java\jdk1.8.0_144\jre\bin\management.dll
- 0x00000000533a0000 68K C:\Program Files\Java\jdk1.8.0_144\jre\bin\nio.dll
- 0x00000000533c0000 104K C:\Program Files\Java\jdk1.8.0_144\jre\bin\net.dll
- 0x00000000533e0000 284K C:\Program Files\Java\jdk1.8.0_144\jre\bin\fontmanager.dll
- 0x0000000053430000 1632K C:\Program Files\Java\jdk1.8.0_144\jre\bin\awt.dll
- 0x00000000535d0000 88K C:\Program Files\Java\jdk1.8.0_144\jre\bin\zip.dll
- 0x0000000053620000 164K C:\Program Files\Java\jdk1.8.0_144\jre\bin\java.dll
- 0x0000000053650000 60K C:\Program Files\Java\jdk1.8.0_144\jre\bin\verify.dll
- 0x0000000053740000 8820K C:\Program Files\Java\jdk1.8.0_144\jre\bin\server\jvm.dll
- 0x0000000180000000 804K c:\program files (x86)\kingsoft\kingsoft antivirus\kwsui64.dll
- 0x00007ff6c24d0000 28K C:\Program Files\Java\jdk1.8.0_144\bin\jconsole.exe
另外,还有一个收费的工具,比较有名也直接,叫jprofiler。
可参考:
https://www.cnblogs.com/AmilyWilly/p/7272160.html?utm_source=itdadao&utm_medium=referral
java堆栈信息查看,以及JVM性能查看工具-jconsole+jmap的更多相关文章
- jstack查看Java堆栈信息
命令 jps 查看进程id jstack 1234 查看该进程的线程堆栈信息 对于每个线程,都有如下信息: 线程名,如“main”线程属性(如果是Daemon线程,会有Daemon标识,否则,什么都没 ...
- Java架构师面试题——JVM性能调优
JVM内存调优 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数. 1.Full GC 会对整个堆进行整理,包括Young.Tenured和Perm.Full GC因为需要对 ...
- 打印java堆栈信息
使用如下命令: kill -3 {pid} 可以打印指定线程的堆栈信息到tomcat的catalina.out日志中.在性能测试过程中,可以观察响应时间的曲线,如果突然出现波峰则抓取当前时间点tomc ...
- jstack与jmap分析java堆栈信息
首先确定要查询的服务进程pid,可用ps -ef|grep 进程名称 jstack -l pid >> stack_info.txt,将此进程的堆栈信息导出到txt文件中 其中" ...
- JVM性能分析工具详解--MAT等
获得堆转储文件 巧妇难为无米之炊,我们首先需要获得一个堆转储文件.为了方便,本文采用的是 Sun JDK 6.通常来说,只要你设置了如下所示的 JVM 参数: -XX:+HeapDumpOnOutOf ...
- java性能分析工具 jconsole.exe
通过 Java visualMv结合 jconsole.exe 工具即可查看如图所示(Jconsole在JDK文件夹内,非JRE文件夹) 在Java Visualvm工具里面安装JTA插件,分析线 ...
- 学习笔记——JVM性能调优之 jmap
jmap jmap(JVM Memory Map)命令可生成head dump文件,还可查询finalize执行队列.Java堆和永久代的详细信息. 通过配置启动参数:-XX:+HeapDumpOnO ...
- JVM性能监测工具——VisualVM
Java本身自带了有好几个jvm监测工具,其中jconsole和jvisualvm这两个工具具有图形化界面,可以监测到cpu.类.线程.堆等一些参数,而且具有远程监控的能力. 启动:打开cmd命令窗口 ...
- java命令--jstack 工具 查看JVM堆栈信息
介绍 jstack是java虚拟机自带的一种堆栈跟踪工具.jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息,如果是在64位机器上,需要指定选项" ...
随机推荐
- mysql数据恢复,binlog详解
个人博客:mysql数据恢复,binlog详解 binlog日志恢复数据,是挽救错误操作和数据损坏一根救命稻草,所以认识和使用binglog对于技术人员还是很有必要的 binlog一般用于 主从复制 ...
- EMR的fair-scheduler.xml
cat /etc/ecm/hadoop-conf/fair-scheduler.xml <?xml version="1.0"?> <allocations> ...
- 并发艺术--java并发机制的底层实现原理
前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一 ...
- 前端开发 — HTML
HTML HTML 超文本标记语言 HTML特征: 对换行和空格不敏感 空白折叠 1.1 HTML标签 标签也称为标记. 标签的种类: 1.双闭合标签 2.单闭合标签 1.1.1 head标签 met ...
- GPIO 输出—使用固件库点亮 LED
编程要点 1. 使能 GPIO 端口时钟: 2. 初始化 GPIO 目标引脚为推挽输出模式: 3. 编写简单测试程序,控制 GPIO 引脚输出高.低电平. LED的电路图 过程: 1.拷贝一个库函 ...
- TZOJ1294吃糖果
#include<stdio.h> int main() { ],mi,i,max,s; scanf("%d",&t); while(t--) { scanf( ...
- MogliFS与spring mvc结合简单示例
一.MogliFS 与Spring结合配置请参照上文 二.上传页面 <%@ page language="java" contentType="text/html; ...
- (三十一)web 开发基础项目
1. 编写index.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- (二)Redis之Jedis概念和HelloWorld实现以及JedisPool的使用
一.Jedis概念 实际开发中,我们需要用Redis的连接工具连接Redis然后操作Redis, 对于主流语言,Redis都提供了对应的客户端: 官网:https://redis.io/clients ...
- Java内存 模型理解
概述 在正式讲Java内存模型之前,我们先了解一些物理计算机并发问题,然后一点点的引出Java内存模型的由来. 多任务处理在现在计算机操作系统中几乎是一项必备的功能.这不单是因为计算机计算能力强大,更 ...