JMAP

Java命令学习系列(三)——Jmap

人盡茶涼 提交于 2019-12-24 14:16:34
Java命令学习系列(三)——Jmap 2015-05-16 分类: Java 阅读(479) 评论(0) Jmap jmap是JDK自带的工具软件,主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。可以使用jmap生成Heap Dump。在 Java命令学习系列(零)——常见命令及Java Dump介绍 和 Java命令学习系列(二)——Jstack 中分别有关于Java Dump以及线程 Dump的介绍。 这篇文章主要介绍Java的堆Dump以及jamp命令 什么是堆Dump 堆Dump是反应Java堆使用情况的内存镜像,其中主要包括 系统信息 、 虚拟机属性 、 完整的线程Dump 、 所有类和对象的状态 等。 一般,在内存不足、GC异常等情况下,我们就会怀疑有 内存泄露 。这个时候我们就可以制作堆Dump来查看具体情况。分析原因。 基础知识 Java虚拟机的内存组成以及堆内存介绍 Java GC工作原理 常见内存错误: outOfMemoryError 年老代内存不足。 outOfMemoryError:PermGen Space 永久代内存不足。 outOfMemoryError:GC overhead limit exceed 垃圾回收时间占用系统运行时间的98%或以上。 jmap 用法摘要 Usage: jmap [option

JMap.java - Timed out while attempting to connect to debug server - SwDbgSrv.exe

最后都变了- 提交于 2019-12-24 04:12:35
问题 I'm trying to run and debug the utilies from sun.jvm.hotspot.tools and sun.jvm.hotspot.utilities (like JMap.java) in order to understand better what is going on. Unfortunately I get stuck very early with the following error message and don't even get to debug a lot: Attaching to process ID 5144, please wait... Error attaching to process: Timed out while attempting to connect to debug server (please start SwDbgSrv.exe) It seems like for whatever reason the tools are trying to connect to a

JMap.java - Timed out while attempting to connect to debug server - SwDbgSrv.exe

孤街醉人 提交于 2019-12-24 04:12:22
问题 I'm trying to run and debug the utilies from sun.jvm.hotspot.tools and sun.jvm.hotspot.utilities (like JMap.java) in order to understand better what is going on. Unfortunately I get stuck very early with the following error message and don't even get to debug a lot: Attaching to process ID 5144, please wait... Error attaching to process: Timed out while attempting to connect to debug server (please start SwDbgSrv.exe) It seems like for whatever reason the tools are trying to connect to a

[Java基础] 使用JMAP dump及分析dump文件

点点圈 提交于 2019-12-21 07:40:15
转载: http://blog.csdn.net/kevin_luan/article/details/8447896 http://liulinxia02.blog.163.com/blog/static/26868772009111861834942/ http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/ 其中jmap是java自带的工具 查看整个JVM内存状态 jmap -heap [pid] 要注意的是在使用CMS GC 情况下,jmap -heap的执行有可能会导致JAVA 进程挂起 查看JVM堆中对象详细占用情况 jmap -histo [pid] 导出整个JVM 中内存信息 jmap -dump:format=b,file=文件名 [pid] jhat是sun 1.6及以上版本中自带的一个用于分析JVM 堆DUMP 文件的工具,基于此工具可分析JVM HEAP 中对象的内存占用情况 jhat -J-Xmx1024M [file] 执行后等待console 中输入start HTTP server on port 7000 即可使用浏览器访问 IP:7000 eclipse Memory Analyzer Eclipse 提供的一个用于分析JVM 堆Dump文件的插件

记一次tomcat假死问题

好久不见. 提交于 2019-12-20 19:24:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 服务器用的tomcat突然发现运行缓慢。查看服务器 cpu:95% 硬盘:30%。整个服务卡的压根动不了。 故准备使用eclipse memory analyzer 分析一下,下面是使用的命令。 首先在服务器上使用命令简单查看一下: 1.使用top -Hp 进程号 查看一下占用高的进程,并选取其中占用资源高的线程 2.jstack 进程号> ./jstack.log 记录jstack日志到当前目录 --jstack命令需要在jdk的bin目录下执行,并且必须要以当前启动项目tomcat的用户身份运行 3.printf "%x\n" 线程号 打印出线程的16进制码 4.grep -rn 16进制码~/jvm.stack.log -A 100 查找该线程在日志中的记录 5.我这次问题查看到是gc出了问题 但是具体不知道是哪 故导出dump文件使用软件分析一下 jmap -head 10735 发现 年轻代和老年代都满了。 6. jmap -dump:format=b,file=10735.bin 10735 10735 是我的进程号 ,然后把文档当下来 7.打开mat ,内存最好调高点 最低要高过dump文件大小。 8.先用dominator_tree看了下哪些线程占用空间大 ,我这发现 有4个线程占用了几乎99

Garbage Collector First and JMap EOF bug

时光怂恿深爱的人放手 提交于 2019-12-20 14:13:32
问题 We are working over our client's production server heap to detect and solve memory leaks. For this we are using jmap periodically to collect the necessary information. But last week we couldn't take the dump, because it triggered a EOF error and shutdown the Tomcat instance. I searched on the internet but couldn't find any concrete information about this error. We detected that it only occurs when using the Gc First garbage collector algorithm. This is the command line we used to perform the

linux里查看最耗CPU的线程(full gc)

孤者浪人 提交于 2019-12-19 12:07:03
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、top后按c查看最耗cpu的进程,得到pid 2、top -Hp pid 查看该进程里的线程资源使用情况,找到最耗资源的线程的pid 3、jstack pid来查看进程的各个线程栈,注意这里的pid是第一步中进程的pid,不是第二步得到的线程id 4、将第二步得到的pid转成16进制之后在线程栈信息里查找nid等于pid16进制的,就找到最耗资源的线程的栈信息 话不多说了,先来看代码吧 public class Test{ public static void main(String args[]){ for(int i=0;i<10;i++){ new Thread(){ public void run(){ try{ Thread.sleep(100000); }catch(Exception e){} } }.start(); } Thread t=new Thread(){ public void run(){ int i=0; while(true){ i=(i++)/100; } } }; t.setName("Busiest Thread"); t.start(); } } 这个例子里新创建了11个线程,其中10个线程没干什么事,主要是sleep,另外有一个线程在循环里一直跑着

使用jmap和MAT分析JVM堆内存

雨燕双飞 提交于 2019-12-15 03:07:20
我的一台生产环境机器每次运行几天之后就会莫名其妙的宕机,分析日志之后发现在tomcat刚启动的时候内存占用比较少,但是运行个几天之后内存占用越来越大,通过jmap命令可以查询到一些大对象引用没有被及时GC,这里就要求解决内存泄露的问题。 Java的内存泄露多半是因为对象存在无效的引用,对象得不到释放,如果发现Java应用程序占用的内存出现了泄露的迹象,那么我们一般采用下面的步骤分析: 1. 用工具生成java应用程序的heap dump(如jmap) 2. 使用Java heap分析工具(如MAT),找出内存占用超出预期的嫌疑对象 3. 根据情况,分析嫌疑对象和其他对象的引用关系。 4. 分析程序的源代码,找出嫌疑对象数量过多的原因。 以下一步步的按照项目实例来操作,去解决内存泄露的问题。 1. 登录linux服务器,获取tomcat的pid,命令: ps -ef|grep java 2. 利用jmap初步分析内存映射,命令: jmap -histo:live 3514 | head -7 第2行是我们业务系统的对象,通过这个对象的引用可以初步分析出到底是哪里出现了引用未被垃圾回收收集,通知开发人员优化相关代码。 3. 如果上面一步还无法定位到关键信息,那么需要拿到heap dump,生成离线文件,做进一步分析,命令: jmap -dump:live,format=b,file

【JAVA】启动一个最简单的Java main程序时有多少个线程被创建

你。 提交于 2019-12-14 18:24:11
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>  在java中,启动一个简单的main程序,并不是只是单单创建了一个main线程而已,JVM会自动创建一些辅助用的线程,主要有以下几个:   Attach Listener:Attach Listener线程是负责接收到外部的命令,而对该命令进行执行的并且吧结果返回给发送者。通常我们会用一些命令去要求jvm给我们一些反 馈信 息,如:java -version、jmap、jstack等等。如果该线程在jvm启动的时候没有初始化,那么,则会在用户第一次执行jvm命令时,得到启动。   Signal Dispatcher:前面我们提到第一个Attach Listener线程的职责是接收外部jvm命令,当命令接收成功后,会交给signal dispather线程去进行分发到各个不同的模块处理命令,并且返回处理结果。signal dispather线程也是在第一次接收外部jvm命令时,进行初始化工作。   Finalizer:这个线程也是在main线程之后创建的,其优先级为10,主要用于在垃圾收集前,调用对象的finalize()方法;   Reference Handler:VM在创建main线程后就创建Reference Handler线程,其优先级最高,为10,它主要用于处理引用对象本身(软引用、弱引用、虚引用

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

∥☆過路亽.° 提交于 2019-12-14 05:43: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中运行的进程状态信息。语法格式如下: jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: -q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l 输出main类或Jar的全限名