使用Java Mission Control进行内存分配分析

标签: 基础技术 Java Mission Control Profiler | 发表时间:2014-10-16 08:00 | 作者:潘 凌霄
出处:http://www.importnew.com

jdk7u40自带了一个非常好用的工具,就是 Java Mission ControlJRockit Misson Control用户应该会对mission control的很多功能十分熟悉,JRockit也是一款很棒的工具。本篇文章将着重关注如何使用Java Flight Recorder进行内存分配分析。

jvm有着非常棒的小块内存虚拟化技术,这会让你产生一种拥有无限内存的错觉感,其实它的开销非常大。有时候jvm需要找出此刻堆上数据是如何被使用的,并把剩余的空间扩大——这就是垃圾回收。产生这种情况的原因是,jvm实际获得的物理内存是有限的,因此需要在不被使用时进行内存回收和复用。在一些时间敏感的应用中,比如交易系统和通信程序,这些暂停是不能容忍的。有很多GC调优方法可以避免这种暂停发生。貌似上面的讨论已经跑题了。让GC变少的方法当然是尽量减少分配内存。

有时候,你希望找出在你的程序中哪些地方导致了内存分配的压力。引起这种压力的原因有很多种。最普通的一种情况可能是jvm需要经常GC,并且时间远超过你认为的合理值。

JFR分配事件

在HotSpot7u40中实现的Java Flight Recorder(JFR)有两种内存分配事件可以帮助我们找出程序中进行内存分配的地方:TLAB中的内存分配和TLAB外的内存分配事件。

与JDK提供的其它大多数事件相类似,有一系列可在Mission Control中进行定制的分析接口。在进行分析之前,我们要花上几分钟来讨论下实际的事件。

首先,你需要确保事件已近被记录了。如果你使用默认的模板选项,你会发现内存分配分析选项默认是关闭的。要么打开它,或者使用分析模板而不要使用默认模板。内存分析选项默认关闭的原因是,它可能会产生太多的事件。并且对于不同的程序它的性能消耗是不确定的,因为不同的程序在内存分配的情况上是差别是很大的。

事件标签组中的Log标签是查看每个单独事件的绝佳地址。我们来看看这里包括了哪些内容:

这里包括已经分配的内存确切大小、导致内存分配的堆栈轨迹、分配内存的类和事件信息。在TLAB内存分配事件中,它们还包括分配的TLAB大小。

需要注意的是,TLAB的内存分配事件中并不是对应每一个地点的内存分配事件,那样太消耗资源了。取而代之的是,我们只在新的TLAB中第一次分配内存时进行事件上报。这意味着我们只获得了本地线程的内存分配一些排序后的样本。

此外,需要注意的是我们在JRockit中使用的TLA事件和在新生代中进行的分配是完全相同的,大对象分配事件和老生代内存分配时相同的。不过这些在HotSpot中有点复杂。TLAB外的内存分配事件既可以和年轻代内存回收分配相同,也可以和后续的Eden区及old区域的直接大对象分配相同。换句话说,如果你在TLAB事件外发现了一些少量的内存分配,你并不需要担心。正常来说,这种情况是非常的少见的。因此在实际情况中这些区分并不是那么明显。

使用Allocation标签页

Allocation(分配)标签页实际上包含三个子标签页:

  1. 通用
  2. 新TLAB分配
  3. TLAB外分配

通用标签页提供了一个总的视图和一些可用事件的统计信息,例如对于不同的事件类型分配的总内存。依据你首要目标的不同,对待这些信息的方式也会不同。下面的这个例子十分精简并且聚焦在内部TLAB分配,因为它更关注于总的内存分配压力。

新TLAB分配提供了三种以上专供于分析新TLAB分配事件的虚拟化类型:类级、线程级和分析级的分配。分析级分配是对这三种类型的一个简单的栈追踪集合。从下面的这个例子可以看出,Integer对象几乎占到整个系统的所有内存分配。在直方图中选择Integer类便会显示出对Integer对象的所有内存的栈轨迹集合,同时在这个例子中,所有的分配都来自同一个地点,正如下图展示的那样。

TLAB外分配的内存标签页和新TLAB标签页的工作原理相同,仅仅在这个时间点是一致的,当然这些是TLAB外的事件。

限制

因为新TLAB的内存分配事件仅仅只是总的线程本地内存分配的样本,仅仅只有一个事件是很难说明实际情况的。更多的事件才会有更精确的图片。此外,如果分配事件的行为在记录期间变化非常大,那么这样也很难建立一个十分有说服力本地内存分配视图。

可能感兴趣的文章

相关 [java mission control] 推荐:

使用Java Mission Control进行内存分配分析

- - ImportNew
jdk7u40自带了一个非常好用的工具,就是 Java Mission Control. JRockit Misson Control用户应该会对mission control的很多功能十分熟悉,JRockit也是一款很棒的工具. 本篇文章将着重关注如何使用Java Flight Recorder进行内存分配分析.

OS X Lion – Mission Control 『 你的 Mac 指揮中心 』

- Qiuwan - ApplePlan
平常我們使用電腦,總是會開上許多視窗,比方說 MSN、Facebook、整理照片、製作報表,. 以前我們可以利用 Exposé 秀出全部的視窗、Dashboard 顯示好用的小工具、Space 延伸更多的虛擬桌面來增加工作效率. 全新的 Mission Control 整合了這些好用的功能,三隻手指頭輕輕往上推,秀出了全部的桌面、視窗.

HTTP头的Expires与Cache-control

- - Web前端 - ITeye博客
Cache-control用于控制HTTP缓存(在HTTP/1.0中可能部分没实现,仅仅实现了Pragma: no-cache). cache-directive可以为以下:. response时用到:. Public  指示响应可被任何缓存区缓存. Private  指示对于单个用户的整个或部分响应消息,不能被共享缓存处理.

nginx 设置 expires and Cache-Control

- - 互联网 - ITeye博客
源:http://nginx.org/en/docs/http/ngx_http_headers_module.html. Adds the specified field to a response header provided that the response code equals 200, 201, 204, 206, 301, 302, 303, 304, or 307.

Launchpad Control 为你的 Launchpad 打补丁

- 火柴 - FeedzShare
来自: iFanr 爱范儿 ♂专注于拇指设备的小众讨论 - FeedzShare  . 发布时间:2011年07月31日,  已有 2 人推荐. Launchpad 作为 Mac OsX Lion 的重要特性融合了 iOs 上展现程序的方式:. 此外,它易于呼入呼出的形式也受到广泛好评. 不过在实际使用过程中用户们可能会遇到棘手的问题:Launchpad 将所有程序都展示出来,包括那些小型的菜单栏插件,或者虚拟机中某些软件.

oracle的控制文件(control file)

- - CSDN博客数据库推荐文章
1: 对oracle database  files进行说明. 2: oracle doc 对 control file的定义. 3:查找oracle数据文件的三种方式. 控制文件是一个小小的二进制文件,是oracle数据库的一部分,这个控制文件是用于记录数据库的状态和物理结构. 每个数据库必须要至少一个控制文件,但是强烈的建议超过一个控制文件,每个控制文件的备份应该放在不同的磁盘上.

Cache-control使用Cache-control:private学习笔记

- - Web前端 - ITeye博客
网页缓存由 HTTP消息头中的Cache-control控制,常见取值有private、no-cache、max-age、must- revalidate等,默认为private. 其作用根据不同的重新浏览方式,分为以下几种情况:. 值为private、no-cache、must-revalidate,那么打开新窗口访问时都会重新访问服务器.

Launchpad Control – 清理 LaunchPad 项 [Mac] | 小众软件 > Mac

- Chinaxingwei - 小众软件
Lion 现在的 LaunchPad 绝对是个失败,设计上为了像 iOS 而像 iOS,可用性极差. 密密麻麻有用无用的图标排满好几屏,不但摧残人类审美,还让密集恐惧症患者直接产生恐惧. Launchpad Control 是免费的系统偏好项,可以控制 LaunchPad 上图标显示与否,清理狂必备.

Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 区别使用

- - 小彰
本文主要讲解 web缓存的应用.. Expires / Cache-Control / Last-Modified / If-Modified-Since / ETag / If-None-Match 的区别以及使用详解. 为了演示体现缓存的作用,先删除所有的浏览器缓存,然后以如下四种方式访问baidu网站,期间使用 Pagetest作为测试软件,这是一个搭配IE使用的软件,功能上类似HttpWatch,不过它是免费的,有关Pagetest的用法可以参考官方文章提供的 教程:.

http协议:Web前端-HTTP Cache-control/浏览器缓存(转)

- - 互联网 - ITeye博客
HTTP协议分别在 1.0 / 1.1 两个时代推出了 Expires / Cache-control 两种cache策略,这里我们无需了解全部的细节,无需记住整个RFC内容,但是当我们需要使用HTTP cache策略时,我们需要注意以下细节:. Expires 是HTTP 1.0 那个时代的东西了,目前来看,可以不使用了,因为HTTP 1.0 的user agent占有率在 0.1% 以下(我们主要面向的web浏览器均默认使用HTTP 1.1),Cache-control 是 HTTP 1.1 的新特性,也是我们主要做文章使用cache策略的工具.