- 浏览: 341188 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (212)
- spring (21)
- design pattern(java) (12)
- linux-shell (28)
- java-thread (20)
- java-collection (6)
- java-reflect (9)
- mysql (11)
- java-io (7)
- java-util&lang&io (3)
- algorithm (3)
- interview (2)
- tools-eclipse (2)
- tools-maven (1)
- web-script (1)
- java组建 (13)
- 博客收藏 (1)
- 架构设计与实践 (10)
- active-mq (6)
- java-jvm&性能&原理 (27)
- tomcat (2)
- flume (1)
- serialization (2)
- git (1)
- cache&redis (8)
- guava (1)
- zookeeper (3)
- socket&tcp&udp&http (6)
- test (1)
最新评论
-
bbls:
有用有用有用
java-jvm-jstack-(监视器和锁的概念) -
王新春:
小侠有点帅哦 写道此流怎么关闭新春这个实现 可以不关闭的,哈哈 ...
源码剖析之java.io.ByteArrayOutputStream -
小侠有点帅哦:
此流怎么关闭新春
源码剖析之java.io.ByteArrayOutputStream -
cumt168:
写的很好为什么初始化参数,年轻代-Xmn10M def new ...
jvm之内存申请过程分析 -
ronin47:
应该是跟共享域名思路差不多,根据cookie的key作判断
跨域:一种通过服务端解决跨域的实现
功能:打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
1、-heap
打印当前heap的概要信息:heap的总量,年轻代,老年代,Perm Generation的量
GC使用的算法
heap的配置:总量
当前heap的使用情况:占用量,总量,百分比
.
输出:
2、-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
输出:
另外继续分析日志,每个对象存在的数量以及占用内存的大小:
输出:
从中不难看出,SpringUtil 等类都是单例的,所以只有一个对象,而AfareBlackList 是系统内的对象,数量存在较多
3、-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
输出到heap.bin文件里
eg
运行参数:
其他:
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
参考资料:
http://www.tuicool.com/articles/VzYziu
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
-finalizerinfo 打印正等候回收的对象的信息.
-heap 打印heap的概要信息,GC使用的算法,heap的配置及wise heap的使用情况.
-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
1、-heap
打印当前heap的概要信息:heap的总量,年轻代,老年代,Perm Generation的量
GC使用的算法
heap的配置:总量
当前heap的使用情况:占用量,总量,百分比
.
sudo jmap -heap 27409
输出:
Attaching to process ID 27409, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.45-b08 using thread-local object allocation. Parallel GC with 4 thread(s) Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 2147483648 (2048.0MB) NewSize = 268435456 (256.0MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 268435456 (256.0MB) MaxPermSize = 268435456 (256.0MB) G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 704643072 (672.0MB) used = 429546320 (409.6472930908203MB) free = 275096752 (262.3527069091797MB) 60.959418614705406% used From Space: capacity = 5767168 (5.5MB) used = 4327344 (4.1268768310546875MB) free = 1439824 (1.3731231689453125MB) 75.03412420099431% used To Space: capacity = 5767168 (5.5MB) used = 0 (0.0MB) free = 5767168 (5.5MB) 0.0% used PS Old Generation capacity = 1431830528 (1365.5MB) used = 574251648 (547.6490478515625MB) free = 857578880 (817.8509521484375MB) 40.106118480524536% used PS Perm Generation capacity = 268435456 (256.0MB) used = 72128064 (68.78668212890625MB) free = 196307392 (187.21331787109375MB) 26.869797706604004% used 31742 interned Strings occupying 3432376 bytes.
2、-histo[:live] 打印每个class的实例数目,内存占用,类全名信息. VM的内部类名字开头会加上前缀”*”. 如果live子参数加上后,只统计活的对象数量.
sudo jmap -histo 27409>a.log
输出:
Object Histogram: num #instances #bytes Class description -------------------------------------------------------------------------- 1: 164294 173445488 byte[] 2: 4426453 106234872 java.util.concurrent.ConcurrentSkipListMap$Node 3: 448524 74384360 char[] 4: 2215688 53176512 java.lang.Double 5: 96356 33816408 int[] 6: 965084 23162016 java.util.concurrent.ConcurrentSkipListMap$Index 7: 125211 18655880 * ConstMethodKlass 8: 733892 17613408 java.lang.Long 9: 125211 16039712 * MethodKlass 10: 444730 14231360 java.util.HashMap$Entry 11: 11617 13094656 * ConstantPoolKlass 12: 426560 10237440 java.lang.String 13: 11611 8346592 * InstanceKlassKlass 14: 115808 7411712 com.mysql.jdbc.ConnectionPropertiesImpl$BooleanConnectionProperty 15: 9526 7374880 * ConstantPoolCacheKlass 。。。。
另外继续分析日志,每个对象存在的数量以及占用内存的大小:
grep "qunar" data.txt |grep "afare"
输出:
17: 28137 4051728 com.gym.afare.dubbo.model.AfareBlackList 664: 30 1680 com.gym.afare.dubbo.model.AfareBlackListPlus 977: 10 720 com.gym.flight.afare.model.RefreshCmRequest 1055: 12 576 com.gym.flight.afare.model.ErrorEnum 1099: 6 528 com.gym.afare.dubbo.model.request.AfareResultRequest 1146: 12 480 com.gym.flight.afare.model.RefreshTask 1151: 10 480 com.gym.flight.afare.model.RefreshPriceRequest 1206: 13 416 com.gym.flight.afare.model.ApiResponse 1480: 4 224 com.gym.afare.dubbo.model.AfareBlackList$FlightType[] 1544: 5 200 com.gym.afare.dubbo.model.AfareBlackList$UnLockTypeEnum 1574: 3 192 com.gym.afare.dubbo.model.AfareBlackList$UnLockTypeEnum[] 1596: 4 192 com.gym.afare.dubbo.model.AfareBlackList$FlightType 1666: 3 168 com.gym.afare.dubbo.model.AfareBlackList$LockTypeEnum[] 1841: 4 160 com.gym.afare.dubbo.model.AfareBlackList$LockTypeEnum 2015: 3 120 com.gym.afare.dubbo.model.AfareBlackList$LockStatusEnum[] 2022: 1 120 com.gym.flight.afare.model.ErrorEnum[] 2305: 2 80 com.gym.afare.dubbo.model.AfareBlackList$LockStatusEnum 2669: 1 56 com.gym.flight.afare.task.DeleteUnlockBlackListTask 2713: 1 48 com.gym.flight.afare.dubbo.provider.AfareBlackListServiceImpl 2952: 1 40 com.gym.flight.afare.dao.impl.AfareBlackListDAOImpl 2961: 1 40 com.gym.flight.afare.service.impl.RefreshPriceServiceImpl 3012: 1 40 com.gym.flight.afare.service.impl.RefreshPriceServiceImpl$RefreshThreadFactory 3036: 1 40 com.gym.flight.afare.dao.impl.AfareBlackListPlusDAOImpl 3182: 1 32 com.gym.flight.afare.dubbo.provider.AfareResultQueryServiceImpl 3197: 1 32 com.gym.flight.afare.dao.CacheManager 3282: 1 32 com.gym.flight.afare.dao.impl.AfareResultDaoImpl 3289: 1 32 com.gym.flight.afare.dubbo.provider.AfareResultUpdateServiceImpl 3292: 1 32 com.gym.flight.afare.service.Qc 3297: 1 32 com.gym.flight.afare.web.RefreshPriceController 3476: 1 24 com.gym.flight.afare.model.TaskListener 3479: 1 24 com.gym.flight.afare.task.ReloadBlacklistCacheTask 3543: 1 24 com.gym.flight.afare.task.ArchiveAfareResultTask 3676: 1 24 com.gym.flight.afare.dao.CacheManager$1 3720: 1 24 com.gym.flight.afare.web.BackController 4058: 1 16 com.gym.flight.afare.web.interceptor.TraceInterceptor 4119: 1 16 com.gym.flight.afare.util.SpringUtil
从中不难看出,SpringUtil 等类都是单例的,所以只有一个对象,而AfareBlackList 是系统内的对象,数量存在较多
3、-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
sudo jmap -F -dump:live,format=b,file=heap.bin 27409
输出到heap.bin文件里
eg
class C{ byte b = 100; } class B { List<C[]> d = new ArrayList<C[]>(); public B() { for (int i = 0; i < 100000; i++) { d.add(new C[i]); } } } class A { List<B> bList = new ArrayList<B>(); public A() { for (int i = 0; i < 1000; i++) { bList.add(new B()); } } } public class Test { public static void main(String[] args) throws Exception { A a = new A(); new Thread() {}.start(); a.toString(); } }
运行参数:
-server -Xms1024m -Xmx1024m -Xmn512m -XX:+UseParallelOldGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=c:/heap.bin
其他:
-permstat 打印classload和jvm heap长久层的信息. 包含每个classloader的名字,活泼性,地址,父classloader和加载的class数量. 另外,内部String的数量和占用内存数也会打印出来.
-dump:[live,]format=b,file=<filename> 使用hprof二进制形式,输出jvm的heap内容到文件=. live子选项是可选的,假如指定live选项,那么只输出活的对象到文件.
参考资料:
http://www.tuicool.com/articles/VzYziu
发表评论
-
垃圾回收算法详解
2017-05-17 16:42 496可回收对象的判定【收藏,非原创】 讲算法之前,我们先要 ... -
垃圾回收算法&STOP The World
2017-05-15 11:50 658目前所有的新生代gc都是需要STW的: Seria ... -
java-jvm-jhat
2017-05-14 21:04 552功能:可以分析jmap dump下的hprof文件 一般 ... -
java-jvm-jinfo
2017-05-14 20:57 683jinfo: 1、输出 当前java进程启动的相关配置信息 ... -
jvm-gc 日志解读【转载】
2017-05-14 17:34 484转载自:http://ifeve.com/useful-j ... -
大量异常带来性能的影响
2017-05-09 19:08 669感受大量构造异常带来的性能影响: package com; ... -
iotop&iostat (load高 IO高的问题排查)
2017-04-27 20:40 2106目标:使用iotop&top&jstack ... -
java-jvm-jstack-(监视器和锁的概念)
2017-04-06 16:52 6494下面这段jstack的栈信息里,有一个死锁 其中: T ... -
java-jvm-jstack-线程状态
2017-03-31 14:42 2598常见的线程状态: RUNNABLE:正在执行的线程 注 ... -
java-jvm-cpu (cpu)高问题排查
2017-03-28 21:07 33301、通过top命令发现 cpu高的进程 根据top命令, ... -
java-jvm-jstack
2016-08-05 11:07 2193jstack用于打印出给定的java进程ID或core fi ... -
java-jvm好文收集
2016-08-05 10:50 467非常详细GC学习笔记http://blog.csdn.ne ... -
java-jvm-jstat
2016-08-05 10:30 652stat用于监控基于HotSpot ... -
java-jvm-jps
2016-07-29 13:42 469jsp -q 只显示pid,不显示class名称,jar文件 ... -
OutOfMemoryError溢出
2016-03-29 23:29 837Java堆溢出: java.lang.OutOfMemor ... -
垃圾回收器的分类
2016-03-29 22:23 731基础: 串行收集器: DefNew:是使用-XX:+UseSe ... -
ClassLoader-线程上下文类加载器
2015-04-16 10:54 1189线程上下文类加载器 :http://blog.csdn.net ... -
ClassLoader-热替换
2015-04-05 20:27 2745https://www.ibm.com/developer ... -
ClassLoader-学习
2015-04-05 19:03 1069相关文章:https://www.ib ... -
java-Runtime钩子回调
2015-03-09 22:09 2606----------~开篇分享一句话:【纸上得来终觉浅,绝知此 ...
相关推荐
在《实战Java虚拟机——JVM故障诊断与性能优化》一书中,作者深入探讨了如何对JVM进行故障排查和性能调优,通过源码分析来帮助读者理解其内部工作原理。下面我们将根据书中的主题,详细阐述相关的知识点。 1. **JVM...
在Java开发领域,JVM(Java Virtual Machine)是至关重要的组成部分,它负责解析并执行Java程序。JVM调优是一项核心技能,可以帮助我们优化应用程序的性能,减少内存消耗,提高响应速度,以及避免可能出现的垃圾收集...
了解JVM内存结构及其功能对于优化Java应用程序的性能和排查内存问题至关重要。 首先,我们来详细探讨JVM的内存结构。在Java中,内存主要分为以下几个区域: 1. **程序计数器(Program Counter Register)**:每个...
在日常的软件开发与维护过程中,针对JVM(Java虚拟机)的性能调优和问题排查是非常关键的一环。本手册旨在提供一套全面且实用的JVM问题排查方法和技术,帮助开发者快速定位并解决JVM相关的性能瓶颈或异常情况。 ###...
- **定义**:JVM(Java Virtual Machine)即Java虚拟机,是一种抽象的计算机,它提供了一个运行环境,使Java代码可以在任何安装了JVM的操作系统上运行,而无需重新编译。 - **作用**:通过字节码执行机制,实现了...
Java源代码被编译成字节码后,JVM将其加载到内存中,经过验证确保代码安全,解析方法表,初始化类变量,最后通过解释器或即时编译器(JIT)转化为机器码执行。 二、JVM内存模型 1. 堆内存:所有对象都在堆中创建,...
Java虚拟机(JVM)是Java程序运行的基础,它负责解释和执行字节码,管理内存,以及优化代码性能。JVM调优是一项关键技能,它涉及到调整JVM的配置参数,以达到最佳的程序运行效率,防止内存泄漏,以及确保应用程序的...
jmap是JDK自带的一个命令行工具,用于收集和分析JVM内存信息,主要包括堆内存、类加载器统计和对象 finalize 队列等。本文将详细介绍jmap的使用方法。 ### 前言 在Java性能调优过程中,开发者通常会使用各种开源...
JVM原理和调优是每个Java开发人员必须掌握的关键技能,这涉及到内存管理、垃圾收集、性能优化等多个方面。在深入理解JVM的工作机制后,我们可以更好地调整和优化应用程序,提升系统的性能和稳定性。 一、JVM结构与...
长期的内存泄露会导致Java虚拟机(JVM)的堆内存耗尽,引发OutOfMemoryError。 检查Java内存泄露的方法主要包括以下几个步骤: 1. **生成堆转储文件**:在Linux环境中,可以使用JVM提供的`jmap`命令生成堆转储文件...
Java虚拟机(JVM)是Java开发中的核心组成部分,它负责执行字节码,管理内存,以及优化程序性能。在Java应用的运行过程中,如果出现性能问题,JVM瓶颈定位就显得至关重要。本文将深入探讨如何理解和解决Java JVM的...
支持Java虚拟机监控:GC信息、内存使用情况、内存池信息、类加载器、线程堆栈 支持生成火焰图(采样事件包括CPU、内存分配、线程栈、Java方法调用栈等) 支持Java代码反编译生成 支持Java代码热更新(可指定...
《JVM日志解读——揭示Java虚拟机的秘密》 在Java开发中,JVM(Java Virtual Machine)扮演着至关重要的角色。它负责运行我们的代码,管理内存,执行垃圾收集等。当程序出现异常或者性能问题时,JVM生成的日志文件...
"JVM 基础知识点" JVM(Java Virtual Machine)是 Java 语言的运行环境,负责执行 Java 字节码。...排查 JVM 问题可以使用 jmap 查看 JVM 中各个区域的使用情况,可以使用 jstack 查看 JVM 中的线程信息。
在Java Web开发中,性能优化和问题排查是关键任务,特别是涉及到JVM(Java虚拟机)的线程和内存管理。本文将详细讲解如何利用`javacore`和`heapdump`分析工具来解决相关问题。 `javacore`文件是JVM在特定时刻生成的...
本手册主要介绍Java虚拟机(JVM)的调优和问题排查解决方案。该手册涵盖了JVM排查、数据库连接排查、堆栈快照排查等多方面的内容。 JVM排查 JVM排查是指通过各种命令和工具来排查JVM的状态和性能问题。常用的命令...
6. **jcmd**: jcmd是Java诊断命令工具,提供了大量用于性能分析和故障排查的命令,如GC日志、线程堆栈转储、JVM配置信息查看等。它是Java 7及更高版本引入的,大大增强了开发者对JVM的控制和调试能力。 7. **安全性...
总结来说,面对Java IBM WebSphere的内存溢出问题,我们需要结合`javacore`和`deapdump`等诊断工具,通过分析脚本和相关库文件,理解内存管理原理,调整JVM配置,并优化代码,才能有效地排查和解决问题。
【ha456.jar(IBMHeapAnalyzer)JVM内存分析工具】是一款由IBM开发的专业工具,主要用于诊断Java虚拟机(JVM)的内存问题。它能够解析和分析JVM生成的内存转储文件(通常称为heap dump或hprof文件),帮助开发者识别...
JDK自带了一系列强大的诊断工具,如jps(Java进程查看器)、jstat(统计信息工具)、jinfo(配置信息工具)、jmap(内存映射工具)、jhat(堆转储分析工具)和jstack(线程堆栈跟踪工具)。熟练掌握这些工具的使用,...