Menu

  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay
  • Home
  • Work
    • Cloud
      • Virtualization
      • IaaS
      • PaaS
    • Java
    • Go
    • C
    • C++
    • JavaScript
    • PHP
    • Python
    • Architecture
    • Others
      • Assembly
      • Ruby
      • Perl
      • Lua
      • Rust
      • XML
      • Network
      • IoT
      • GIS
      • Algorithm
      • AI
      • Math
      • RE
      • Graphic
    • OS
      • Linux
      • Windows
      • Mac OS X
    • BigData
    • Database
      • MySQL
      • Oracle
    • Mobile
      • Android
      • IOS
    • Web
      • HTML
      • CSS
  • Life
    • Cooking
    • Travel
    • Gardening
  • Gallery
  • Video
  • Music
  • Essay

JProfiler学习笔记

22
Mar
2010

JProfiler学习笔记

By Alex
/ in Java
/ tags JVM, 学习笔记, 性能剖析
0 Comments
剖析视图
内存视图(Memory Views)

该视图专注于对象的内存分配情况,包含以下选项卡:

 All Objects 显示堆中实时的对象情况:显示某种类型(聚合级别可以是类、包等)对象的数量(Instance Count)、浅尺寸(Shallow size)关于浅尺寸的计算:

  1. 普通对象大小的计算不包括引用、类变量,由变量本身地址、基本类型的变量占用的内存等组成
  2. 数组整体计算,不分为单个元素计算大小/数量

注意,有些对象虽然没有引用,但是可能没被GC回收,可以手工Run GC

右击某一类型,可以转到Class Tracker或者Heaper Walker视图

Recorded Objects 显示已经进行记录的对象。与All Objects相比,可以查看对象分配调用树(Allocation Call Tree)、分配热点(Allocation Hot Sports)点击工具栏:Start Memory,可以录制对象分配
Allocation Call Tree 显示选中的、已录制对象类型的分配调用数,分析调用栈的哪些栈帧比较消耗资源。从线程执行开始处,一直追溯到对象被创建的地方,对象占用内存的大小被显示,效果如下图:
Allocation Hot Sports 显示选中的、已录制对象类型的分配热点:以创建对象的方法为根显示调用树,效果如下图:alloc-hotsopt
Class Tracker  显示选中类型对象的实例个数的曲线图(按时间)
堆遍历(Heap Walker)

该视图用于静态分析堆快照,在生成快照之前,会进行一次Full GC。包含以下选项卡:

Classes 类似于Memory Views的All Objects,可以显示快照中所有对象的数量、大小。右击选择Use Selected Instances,则可以显示单种类型的数据
Allocations 分析对象分配情况:包括4种显示方式:Cumulated Allocation Tree:累积调用树,显示对象分配调用树,包含对象sizeAllocation Tree:调用树,显示对象分配调用树,包含对象sizeAllocation Tree Map:以Tree Map形式显示调用树Allocation Hot spots:显示分配对象最多的方法
Biggest Objects 显示占用内存最多的对象
References 显示单种类型的引用情况包含4种显示方式:Incoming references:其它对象对每一个选中对象的引用Outcoming references:每一个选中对象对其它对象的引用Cumulated Incoming references:显示其它对象、字段对选中对象类型的总体引用统计Cumulated Outcoming references:显示选中对象类型对其它对象、字段的总体引用统计
Time 分析对象分配的消耗时间
Inspections 提供多种精细的对象分配分析方式
Graph 图形化方式显示对象的引用图
CPU视图(CPU Views)

该视图用于分析方法的CPU占用时间,包括以下选项卡:

 Call Tree 显示自顶而下的调用堆栈的树,树的根是线程开始处,树的分叉表示的不同的调用路径。暗红色显示当前节点及其子节点消耗的时间、高亮红色显示本级节点消耗的时间。

显示未过滤类对过滤类的直接调用,不显示深入的调用,在被过滤类的左上角显示红三角。main方法、线程的run方法总是显示,不予过滤。
通过Profiling Settings可以选择CPU时间的度量方式:Elapsed time/Estimated CPU time,前者为Wall clock time(物理世界真实时间),后者为占用CPU的时间。由于操作系统的固有限制,10ms以下的时间可能不具有统计学意义。
界面右上角的Thread Status用于选择参与分析的线程状态,通常选择Runnable来分析性能问题,有时可以结合Net I/O、Blocked
工具栏Start Tracking,可以追踪某些任务在不同线程之间的传递(调用点/执行点Call site/Execution site)

效果如下图:
call-tree

 Hot Spots 显示耗时最高的方法调用,显示消耗时间、平均消耗时间、调用次数等字段,以耗时方法为根,可以追溯到线程启动处Filtered Classes设置:选择被过滤类占用时间,可以单独列出,或者算在调用它的元素上(main、线程run不能过滤)
每个方法可能被多个调用栈调用,百分比显示不同调用栈对此方法的固有时间的“贡献”
不显示Total time,只显示Inherent Time
Call Graph 显示方法调用的序列,包括某个方法的调用与被调用情况
Method Stat 点击工具栏图标,可以录制方法的统计信息并进行分析
Call Tracer 点击工具栏图标,可以对方法调用进行跟踪
线程视图(Thread Views)

该视图用于分析线程的状态和历史分析、检测死锁,并可以获取线程快照,包含以下选项卡:

Thread History 线程状态时间线,可以选择显示活着的或者死去的线程

绿色:Runnable:表示线程可以接受CPU调度,但不一定正在占用CPU,和线程优先级、调度算法、系统负载有关
黄色:Waiting:表示线程正在睡眠(java.lang.Thread.Sleep),或者在监视器上等待(java.lang.Object.wait),前者不会放弃占有的监视器
红色:Blocked:表示线程被阻塞,正在积极尝试进入同步区
浅蓝色:Net I/O:线程正在等待网络操作的完成,监听Socket或者读写Socket时产生此状态
效果图如下:
thread-history
Thread Monitor 显示线程的开始结束时间、父线程、状态等信息
Thread Dumps 获取线程快照,可以分析瞬时系统各线程的调用栈
监视器视图(Monitor Views)

该视图用于锁状态检测,包含以下选项卡:

 Current Locking Graph 当前锁状态图,显示监视器、以及在监视器上等待的线程。

黑色箭头表示当前拥有此监视器的线程

红色虚线表示被阻塞的线程(积极尝试获得锁)

黄色箭头表示在监视器上等待的线程(java.lang.Object.wait)

效果图如下:

current-monitor

Current Monitors 显示当前活动的监视器,包括监视器状态、监视器类、等待线程、拥有者线程等信息
Locking History Graph 可以录制监视器锁定的历史
Monitor History 可以显示所有监视器的历史
Monitor Usage Stat 以监视器、线程等方式分组,显示监视器的使用统计,包括阻塞次数、阻塞持续时间、等待次数、等待持续时间等
虚拟机遥感视图(VM Telemetry Views)

该视图可以显示时间线上的系统宏观信息,包括以下选项卡:

Memory 显示已有、空闲内存的区域图
Recorded Objects 显示堆中对象(数组、非数组)的数量
Recorded Throughput 显示已记录对象的创建和销毁数量
GC Activity 显示GC活动率百分比
Classes 显示加载的类的数量
Threads 显示处于各种状态的线程的数量
CPU Load 显示CPU负载百分比
JavaEE以及探针(JEE & Probes)

可以使用多种探针来检测不同的应用领域,包括:JDBC、JPA/Hibernate、JNDI、JMS、Servlet、RMI、Socket、WebServices、Files等。

剖析配置
触发器

用于在特定条件下触发剖析动作
触发条件:方法被调用、堆使用阈值、CPU使用率阈值、内存溢出异常、定时器、虚拟机启动、虚拟机关闭等
剖析动作:启/停录制、调用跟踪、监视器跟踪,触发堆dump、线程dump,启/停探针录制,保存快照,保存HPROF快照,运行脚本等

离线剖析

使用场景:脚本启动剖析、定期快照保存、剖析远程服务器

Session ID:需要指定id=xxx参数来激活相应的Profiling Settings,此ID显示在Session Settings - Application Settings的左上角,如果配置文件中只包含一个Session,则不需要配置。
配置文件位置:可以指定config=xxx.xml,来指明设置的存放位置,默认是~/.jprofiler7/config.xml
离线剖析命令行样例:
Shell
1
2
3
4
java
"-agentpath:D:\JavaEE\jprofiler\7.2.2\bin\windows-x64\jprofilerti.dll=offline,id=109,config=D:\JavaEE\Config\jprofiler-offline.xml"
"-Xbootclasspath/a:D:\JavaEE\jprofiler\7.2.2\\bin\agent.jar"
-classpath myapp.jar cc.gmem.demo.MyApp

 

← 原型模式
Eclipse知识集锦 →

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Related Posts

  • 使用Eclipse Memory Analyzer分析JVM堆Dump
  • 使用Oracle Java Mission Control监控JVM运行状态
  • JVM参数与性能调优
  • 使用Sysdig进行系统性能分析
  • 利用perf剖析Linux应用程序

Recent Posts

  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
  • A Comprehensive Study of Kotlin for Java Developers
  • 背诵营笔记
  • 利用LangChain和语言模型交互
  • 享学营笔记
ABOUT ME

汪震 | Alex Wong

江苏淮安人,现居北京。目前供职于腾讯云,专注容器方向。

GitHub:gmemcc

Git:git.gmem.cc

Email:gmemjunk@gmem.cc@me.com

ABOUT GMEM

绿色记忆是我的个人网站,域名gmem.cc中G是Green的简写,MEM是Memory的简写,CC则是我的小天使彩彩名字的简写。

我在这里记录自己的工作与生活,同时和大家分享一些编程方面的知识。

GMEM HISTORY
v2.00:微风
v1.03:单车旅行
v1.02:夏日版
v1.01:未完成
v0.10:彩虹天堂
v0.01:阳光海岸
MIRROR INFO
Meta
  • Log in
  • Entries RSS
  • Comments RSS
  • WordPress.org
Recent Posts
  • Investigating and Solving the Issue of Failed Certificate Request with ZeroSSL and Cert-Manager
    In this blog post, I will walk ...
  • A Comprehensive Study of Kotlin for Java Developers
    Introduction Purpose of the Study Understanding the Mo ...
  • 背诵营笔记
    Day 1 Find Your Greatness 原文 Greatness. It’s just ...
  • 利用LangChain和语言模型交互
    LangChain是什么 从名字上可以看出来,LangChain可以用来构建自然语言处理能力的链条。它是一个库 ...
  • 享学营笔记
    Unit 1 At home Lesson 1 In the ...
  • K8S集群跨云迁移
    要将K8S集群从一个云服务商迁移到另外一个,需要解决以下问题: 各种K8S资源的迁移 工作负载所挂载的数 ...
  • Terraform快速参考
    简介 Terraform用于实现基础设施即代码(infrastructure as code)—— 通过代码( ...
  • 草缸2021
    经过四个多月的努力,我的小小荷兰景到达极致了状态。

  • 编写Kubernetes风格的APIServer
    背景 前段时间接到一个需求做一个工具,工具将在K8S中运行。需求很适合用控制器模式实现,很自然的就基于kube ...
  • 记录一次KeyDB缓慢的定位过程
    环境说明 运行环境 这个问题出现在一套搭建在虚拟机上的Kubernetes 1.18集群上。集群有三个节点: ...
  • eBPF学习笔记
    简介 BPF,即Berkeley Packet Filter,是一个古老的网络封包过滤机制。它允许从用户空间注 ...
  • IPVS模式下ClusterIP泄露宿主机端口的问题
    问题 在一个启用了IPVS模式kube-proxy的K8S集群中,运行着一个Docker Registry服务 ...
  • 念爷爷
      今天是爷爷的头七,十二月七日、阴历十月廿三中午,老人家与世长辞。   九月初,回家看望刚动完手术的爸爸,发

  • 6 杨梅坑

  • liuhuashan
    深圳人才公园的网红景点 —— 流花山

  • 1 2020年10月拈花湾

  • 内核缺陷触发的NodePort服务63秒延迟问题
    现象 我们有一个新创建的TKE 1.3.0集群,使用基于Galaxy + Flannel(VXLAN模式)的容 ...
  • Galaxy学习笔记
    简介 Galaxy是TKEStack的一个网络组件,支持为TKE集群提供Overlay/Underlay容器网 ...
TOPLINKS
  • Zitahli's blue 91 people like this
  • 梦中的婚礼 64 people like this
  • 汪静好 61 people like this
  • 那年我一岁 36 people like this
  • 为了爱 28 people like this
  • 小绿彩 26 people like this
  • 彩虹姐姐的笑脸 24 people like this
  • 杨梅坑 6 people like this
  • 亚龙湾之旅 1 people like this
  • 汪昌博 people like this
  • 2013年11月香山 10 people like this
  • 2013年7月秦皇岛 6 people like this
  • 2013年6月蓟县盘山 5 people like this
  • 2013年2月梅花山 2 people like this
  • 2013年淮阴自贡迎春灯会 3 people like this
  • 2012年镇江金山游 1 people like this
  • 2012年徽杭古道 9 people like this
  • 2011年清明节后扬州行 1 people like this
  • 2008年十一云龙公园 5 people like this
  • 2008年之秋忆 7 people like this
  • 老照片 13 people like this
  • 火一样的六月 16 people like this
  • 发黄的相片 3 people like this
  • Cesium学习笔记 90 people like this
  • IntelliJ IDEA知识集锦 59 people like this
  • 基于Kurento搭建WebRTC服务器 38 people like this
  • Bazel学习笔记 37 people like this
  • PhoneGap学习笔记 32 people like this
  • NaCl学习笔记 32 people like this
  • 使用Oracle Java Mission Control监控JVM运行状态 29 people like this
  • Ceph学习笔记 27 people like this
  • 基于Calico的CNI 27 people like this
Tag Cloud
ActiveMQ AspectJ CDT Ceph Chrome CNI Command Cordova Coroutine CXF Cygwin DNS Docker eBPF Eclipse ExtJS F7 FAQ Groovy Hibernate HTTP IntelliJ IO编程 IPVS JacksonJSON JMS JSON JVM K8S kernel LB libvirt Linux知识 Linux编程 LOG Maven MinGW Mock Monitoring Multimedia MVC MySQL netfs Netty Nginx NIO Node.js NoSQL Oracle PDT PHP Redis RPC Scheduler ServiceMesh SNMP Spring SSL svn Tomcat TSDB Ubuntu WebGL WebRTC WebService WebSocket wxWidgets XDebug XML XPath XRM ZooKeeper 亚龙湾 单元测试 学习笔记 实时处理 并发编程 彩姐 性能剖析 性能调优 文本处理 新特性 架构模式 系统编程 网络编程 视频监控 设计模式 远程调试 配置文件 齐塔莉
Recent Comments
  • qg on Istio中的透明代理问题
  • heao on 基于本地gRPC的Go插件系统
  • 黄豆豆 on Ginkgo学习笔记
  • cloud on OpenStack学习笔记
  • 5dragoncon on Cilium学习笔记
  • Archeb on 重温iptables
  • C/C++编程:WebSocketpp(Linux + Clion + boostAsio) – 源码巴士 on 基于C/C++的WebSocket库
  • jerbin on eBPF学习笔记
  • point on Istio中的透明代理问题
  • G on Istio中的透明代理问题
  • 绿色记忆:Go语言单元测试和仿冒 on Ginkgo学习笔记
  • point on Istio中的透明代理问题
  • 【Maven】maven插件开发实战 – IT汇 on Maven插件开发
  • chenlx on eBPF学习笔记
  • Alex on eBPF学习笔记
  • CFC4N on eBPF学习笔记
  • 李运田 on 念爷爷
  • yongman on 记录一次KeyDB缓慢的定位过程
  • Alex on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • will on Istio中的透明代理问题
  • haolipeng on 基于本地gRPC的Go插件系统
  • 吴杰 on 基于C/C++的WebSocket库
©2005-2025 Gmem.cc | Powered by WordPress | 京ICP备18007345号-2