JVMTI开发教程之带引用关系的class柱状图

第一节中介绍了如何搭建JVMTI开发环境,并实现了一个简单的打印所有已装载class签名的agent。
第二节中介绍了如何使用Heap系API来实现一个打印Class统计信息柱状图的小工具。

本节将在第二节基础上做一些增强,实现一个带引用关系的Class统计信息柱状图。
OK,我们先来看下上一节中的显示效果和本节例子的最终显示效果的异同:

Class统计信息柱状图
上图是上一节中例子中的显示效果。
带引用关系的Class统计信息柱状图
上图是本节例子中的最终显示效果。可以看到,我们不仅可以获知某个class的实例数量,实例的总占用空间,以及class name。还能观察到class及其整棵引用树上的class的实例数量,空间,name等。
Read more…

2011/03/17 | Posted in JVM

关于增强visualvm的一些想法

visualvm是jdk里自带的一款比较实用的可视化profiling工具。

想法1:远程连接通过ssh隧道穿透隔离网络访问生产环境

java有处理ssh协议的第三方包,ssh隧道只要对端安装有openssh server都能搞定。
所以,只需要开发一个visualvm的新远程连接插件,即可穿透隔离网络在visualvm的可视化界面下,profling生产环境主机。

当然,安全性和权限需要同时考虑。
Read more…

2011/03/16 | Posted in JVM

JVMTI开发教程之Class统计信息柱状图

JVMTI开发教程之一个简单的Agent 一文中介绍了如何搭建JVMTI开发环境,并实现了一个简单的打印所有已装载class签名的agent。

本文将主要介绍JVMTI的Heap系API,并利用这些API,实现一个类似 jmap -histo 的Class统计信息柱状图。

Class统计信息柱状图
在上图中,我们可以获知某个class的实例数量,实例的总占用空间,以及class name。

所用到的JVMTI Heap系API介绍

注意:下文中提及的函数定义,均以C++版作为参照。

Get/SetTag
函数定义如下:

jvmtiError
GetTag(jobject object,
            jlong* tag_ptr)
 
jvmtiError
SetTag(jobject object,
            jlong tag)

标签用于与某一个对象建立关联。之后,可通过标签来查找对象。
SetTag为对象添加标签,GetTag获取对象上的标签。
标签在Heap系API中得到了广泛使用。
Read more…

2011/03/16 | Posted in JVM

JVMTI开发教程之一个简单的Agent

概述

JVM TI是JDK提供的一套用于开发JVM监控, 问题定位与性能调优工具的通用编程接口(API)。
通过JVMTI,我们可以开发各式各样的JVMTI Agent。这个Agent的表现形式是一个以c/c++语言编写的动态共享库。

JVMTI Agent原理: java启动或运行时,动态加载一个外部基于JVM TI编写的dynamic module到Java进程内,然后触发JVM源生线程Attach Listener来执行这个dynamic module的回调函数。在函数体内,你可以获取各种各样的VM级信息,注册感兴趣的VM事件,甚至控制VM的行为。

JVMTI从功能上大致可以分为4类:
Read more…

2011/03/14 | Posted in JVM

Gentoo安装使用笔记整理

用gentoo至今有2年了。一直没时间整理我的安装和使用笔记。
今天终于下决心把全部记录整理好搬到blog。

安装前

我是在虚拟机中安装gentoo的。
我选择的虚拟机是virtualbox。用它的理由是免费,轻量级,并且它目前的东家是Oralce,后期更新维护不成问题。

装完virutalbox后,有几个设置心得:
1,多核CPU,需要启用IO APIC。Intel CPU的IO高级中断控制器,针对SMP系统。目前单核电脑不多了吧?
2,确认cpu支持虚拟化技术,启用硬件加速里的 vt-x/amd-v, nested paging。新版vb会自动探测并默认启用。
3,根据自己的需求,关闭usb, audio, 串口。
4,如果需要安装图形界面的,适当调大显存大小。我装gnome,物理显存大小是512m,所以我直接给到最高128m。

Read more…

2011/02/15 | Posted in Linux & Gentoo

更新Linux Kernel 2.3.36编译优化指南

Changlog
1,kernel version upgrades from 2.6.31 to 2.6.36.
2,加入了2.3.36最新选项及优化建议。
3,修正2.3.31时,部分描述笔误。
4,添加测试场景和数据。
5,添加新的参考资料链接。

Linux 2.6.36 内核优化指南

2011/02/15 | Posted in Linux & Gentoo, Performance Tuning

2010年北京JavaOne大会总结

4天,20场sessions,这是我2010年北京JavaOne大会的行程。

第一天
大会开幕式是下午3点,早晨我7点就起床了,这是我半年以来为数不多的几次早起。早起的目的是去逛北京天安门,这也是我生平第一次见老毛。
我的出行方式选择了坐地铁。

由于我是吃完早饭才出的门,到达地铁站时,差不多8点半这样子,发现人流没有想象中的那么多(晚上回来时,发现早晨太乐观了)
于是买了票,换乘了3条线后才到天安门东站(北京的地铁还是挺实惠的,一票可以随便坐。)。走出地铁站时,赫然发现一个白色的亭子。一开始以为是大学生志愿者搞什么活动。走近一看,原来是安检。
当时心里就想:“北京上访的人有这么多嘛,为啥天安门也要安检。”

不过心里不爽也没办法,还得过安检。走过安检,往前步行没多久,我和同事就到了宏伟的天安门广场。
站在伟大的烈士纪念碑前,我发出了一份来自内心的感叹,“好冷啊!”
当时的气温是零下3度,刮着4-5级大风。任何一个生物站在天安门广场的中央,我想都会跟一根风干的冰棍相差不多。

为了防止冻僵,我们几位结伴出行的同事都是匆匆拍了几张照片,就打道回府了。
冬天的北京,看来非常不适合旅行。

下午,达到会场。会场位于北京国家会议中心,紧邻鸟巢和水立方。进入会场时,我震惊了。又是安检?是的,天子脚下莫非黄土,我深深地被雷到了。

开幕式开始,按照会议的老规矩,几位Oracle的高管轮番向我们灌输思想,顺带推销。对于已经看过美国JavaOne照片和视频的我来说,差不多可以免疫。
开幕式么,还是一如既往的无聊。
Read more…

2010/12/20 | Posted in Others