JMAP

jmap查看内存使用情况与生成heapdump--转

自闭症网瘾萝莉.ら 提交于 2020-02-16 11:38:13
http://www.webspherechina.net/home/space.php?uid=191&do=blog&id=7572 如果想分析自己的JAVA Application时,可以使用jmap程序来生成heapdump文件。 例: jmap -heap 1234 (1234为进程号) jmap是JDK自带的一个工具,非常小巧方便,其支持参数如下: -heap 打印heap空间的概要,这里可以粗略的检验heap空间的使用情况。 例: jmap -heap 12345 输出: Attaching to process ID 2657, please wait... Debugger attached successfully. Client compiler detected. JVM version is 1.5.0_16-b02 using thread-local object allocation. Mark Sweep Compact GC Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 67108864 (64.0MB) NewSize = 655360 (0.625MB) MaxNewSize = 4294901760 (4095.9375MB)

Windows下jmap命令报错问题

為{幸葍}努か 提交于 2020-02-16 11:38:01
最近换了笔记本,新的工作环境下jmap命令居然在报错,而jps、jstat、jinfo、jstack都能正常使用,所以初步排除进程号的问题。 Attaching to core 17536 from executable heap, please wait... Error attaching to core file: Windbg Error: OpenDumpFile failed! sun.jvm.hotspot.debugger.DebuggerException: Windbg Error: OpenDumpFile failed! at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach0(Native Method) at sun.jvm.hotspot.debugger.windbg.WindbgDebuggerLocal.attach(WindbgDebuggerLocal.java:160) at sun.jvm.hotspot.HotSpotAgent.attachDebugger(HotSpotAgent.java:673) at sun.jvm.hotspot.HotSpotAgent.setupDebuggerWin32(HotSpotAgent.java:569) at sun.jvm

jmap 命令

老子叫甜甜 提交于 2020-02-16 11:37:21
NAME jmap - Prints shared object memory maps or heap memory details for a process, core file, or remote debug server. SYNOPSIS jmap [ options ] pid jmap [ options ] executable core jmap [ options ] [ pid ] server-id@ ] remote-hostname-or-IP 参数说明: options: executable Java executable from which the core dump was produced.(可能是产生core dump的java可执行程序) core 将被打印信息的core dump文件 remote-hostname-or-IP 远程debug服务的主机名或ip server-id 唯一id,假如一台主机上多个远程debug服务,用此选项参数标识服务器 基本参数: <no option> 如果使用不带选项参数的jmap打印共享对象映射,将会打印目标虚拟机中加载的每个共享对象的起始地址、映射大小以及共享对象文件的路径全称 -dump:[live,]format=b,file=<filename> 使用hprof二进制形式

jmap使用

天大地大妈咪最大 提交于 2020-02-16 11:36:40
今天写的服务在处理大文件是出现Java heap space错误,因此结识了jmap jmap是JDK自带的一个工具,可以做jvm性能调优 可以生成dump文件,查询finalize执行队列、Java堆和永久代的详细信息 命令格式 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) 参数: option:选项参数,不可同时使用多个选项参数 pid:java进程id,命令ps -ef | grep java获取 executable:产生核心dump的java可执行文件 core:需要打印配置信息的核心文件 remote-hostname-or-ip:远程调试的主机名或ip server-id:可选的唯一id,如果相同的远程主机上运行了多台调试服务器,用此选项参数标识服务器 <option>   <none> to print same info as Solaris pmap -heap to print java heap

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

安稳与你 提交于 2020-02-16 10:52:34
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中运行的进程状态信息。语法格式如下: 1 jps [options] [hostid] 如果不指定hostid就默认为当前主机或服务器。 命令行参数选项说明如下: 1 2 3 4 -q 不输出类名、Jar名和传入main方法的参数 -m 输出传入main方法的参数 -l

java 高内存排查

…衆ロ難τιáo~ 提交于 2020-02-13 20:54:35
搞Java开发的,经常会碰到下面两种异常: 1、java.lang.OutOfMemoryError: PermGen space 2、java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模型。 Java内存模型 是描述Java程序中各变量(实例域、静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存取出变量这样的低层细节。 在Java虚拟机中,内存分为三个代:新生代( New )、老生代( Old )、永久代( Perm )。 (1)新生代New:新建的对象都存放这里 (2)老生代Old:存放从新生代New中迁移过来的生命周期较久的对象。新生代New和老生代Old共同组成了堆内存。 (3)永久代Perm:是非堆内存的组成部分。主要存放加载的Class类级对象如class本身,method,field等等。 如果出现java.lang.OutOfMemoryError: Java heap space异常,说明Java虚拟机的堆内存不够 。原因有二: (1)Java虚拟机的堆内存设置不够,可以通过参数-Xms、-Xmx来调整。 (2)代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)。 如果出现java.lang.OutOfMemoryError:

JVM参数配置

心不动则不痛 提交于 2020-02-13 20:45:52
新生代配置 新生代大小配置参数的优先级: 高: -XX:NewSize/MaxNewSize 中间 -Xmn ( NewSize= MaxNewSize ) 低: -XX:NewRatio 表示比例,例如 =2 ,表示 新生代:老年代 = 1:2 -XX:SurvivorRatio 表示 Eden 和 Survivor 的比值, 缺省为 8 表示 Eden:From Survivor:ToSurvivor= 8:1:1 同样的代码情况下: -Xms20M -Xmx20M -XX:+PrintGCDetails –Xmn2m -XX:SurvivorRatio=2 没有垃圾回收 数组都在老年代 -Xms20M -Xmx20M -XX:+PrintGCDetails -Xmn7m -XX:SurvivorRatio=2 发生了垃圾回收 新生代存了部分数组,老年代也保存了部分数组,发生了晋升现象 -Xms20M -Xmx20M -XX:+PrintGCDetails -Xmn15m -XX:SurvivorRatio=8 新生代可以放下所有的数组 老年代没放 -Xms20M -Xmx20M -XX:+PrintGCDetails -XX:NewRatio=2 发生了垃圾回收 出现了空间分配担保,而且发生了 FullGC JDK 为我们提供的工具 jps 列出当前机器上正在运行的虚拟机进程

JVM监控命令详解

荒凉一梦 提交于 2020-01-10 14:48:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> JVM监控命令基本就是 jps、jstack、jmap、jhat、jstat 几个命令的使用就可以了 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]

性能优化 = 改改代码?

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-10 10:52:28
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这里是Z哥的个人公众号 每周五11:45 按时送达 当然了,也会时不时加个餐~ 我的第「124」篇原创敬上 大家好,我是Z哥。 好久没写技术文章了,最近正好有进行一些思考,顺手写出来分享给大家。 上了一定规模的系统,特别是To C的系统,性能优化或多或少都会被逼着去做一下。否则,系统便无法支撑业务的发展,技术成了拖后腿,不是引领业务了。 一旦线上出现了性能问题,就会很棘手。因为它和业务功能上的Bug不同,后者的分析和解决思路更清晰,只要日志记录到位,沿着一条已知的业务逻辑线,很容易就能找到问题根源。 而性能问题就会复杂的多,导致的因素有很多,甚至会是多种因素共同作用下的结果。比如,代码质量低下、业务发展太快、架构设计不合理等等。 而且一般情况下,性能问题处理起来比较耗时,涉及到的分析链路可能会很长,特别是自己小组之外的上下游系统,很多人不愿意干,或者说有心无力。最多采用一些临时性的补救手段,碰碰运气。比如,扩容增加机器、重启大招、……。 有些临时性的补救措施,有时候不但不能解决问题,还会埋下新的隐患。 比如,从表象上看到某个程序因为给的资源不足导致产生性能问题。临时增加更多资源给它,可能从表面上看,问题是解决了。但是实则可能是因为程序内部对资源的使用上存在不合理的地方,增加资源只是延缓问题发作的时间

Is a JVM stopped while executing jmap?

我的未来我决定 提交于 2020-01-09 19:46:07
问题 Does my java application continue running while jmap is taking its memory dump? 回答1: Your application is stopped. The only practical way to get an accurate heap dump would be to stop all application activity while the dump is being created. Whether this is a "brief" pause or a "long" pause depends on how much is dumped. If you use "-dump" then you will dump the entire heap, including unreachable objects. If you use "-dump:live" you will only dump reachable objects ... but that also entails