- 浏览: 276981 次
- 性别:
- 来自: 深圳
最新评论
-
highphd:
海量用户如何处理啊?缓存服务器?大数据?
面向海量服务的设计原则和策略总结 -
AKka:
看了这篇博文更感觉到自己要学的东西更多了。同时感谢博主的辛勤写 ...
[Java性能剖析]JVM Management API -
sswh:
非常不错,感谢分享!!
[Java性能剖析]Sun JVM Attach API -
muyexi:
请问在Android开发中的什么场景下,会用到ObjectWe ...
[字节码系列]ObjectWeb ASM构建Method Monitor -
zoutuo:
前辈可否告知其中的“吞吐量”指的是什么?谢谢!
[Java性能剖析]Sun JVM内存管理和垃圾回收
文章列表
我们知道,在
Sun
HotSpot JVM
的
debug
模式下,我们可以修改方法
body
的代码而不需要重启
JVM
,但是这种修改在当前的
JVM
版本中是有限制的,即不能动态增加
/
删除成员变量,也不能动态增加
/
删除
/
修改方法定义。
Dynamic
Code Evolution Virtual Machine (DCE VM)
是
HotSpot JVM
的一个
HotSwap
增强,允许无限制的修改类定义。需要注意的是,在
DCE VM
的文档中提醒到,该补丁目 ...
本周有同事反馈,IDC环境出现了CPU非常高的问题,如下图:
看一下HeapSpace的情况,如下图,很明显,HeapSpace已经到达了一个临界值:
看一下GC数据统计,短短1个小时,竟然FullGC了946次:
猜想:在HeapSpace逼近临界值的时候,分配小块内存(譬如创建一个对象,如果是分配大块内存,实际上JVM直接就报OutOfMemory了),JVM发现内存不足,会尝试去FullGC出空闲内存,每次还真能挤出一点点,但很快又得重新FullGC,我们知道,实际上FullGC是非常消耗CPU的操作 ...
最近有一个同事碰到一个很诡异的问题,一个JVM使用默认的启动参数(suse linux 64),内存竟然会一直增涨到4G,而通过jmap dump出来的heap空间只有80多M,jmap dump出来的Alive heap空间则竟然只有几M,到底内存是怎么被吃掉的呢? ...
设计模式无处不在,我们可以在各种开源框架中识别到各种设计模式是如何被巧妙地应用的。BlackStar,虽然并不刻意,但也使用到很多设计模式。我们来看看BlackStar的Reporter,看一些常用的设计模式是如何使其更加灵活和可扩展的。
1.什么是Reporter
BlackStar的JVM Monitor会进行JVM监控数据的采集,采集后的数据如何处理呢,就交个Reporter去进行数据的处理。
2.策略模式
数据处理可能记录到文件、也可能调用远端服务器接口进行记录、也可能存储到数据库,对于JVM Monitor来说,不会关心Repor ...
1.前言
当一个项目启动的时候,我们首先需要面向下面的问题:
实现策略分离
组件之间依赖绑定
生命期控制
需要发布一些事情告诉感兴趣的组件
(optional)组件隔离
第一个问题通过面向接口编程的方式,可 ...
1.什么是BlackStar
BlackStar将是一个高性能的JVM监控、性能监控和剖析的程序,目前BlackStar 具备如下功能:
自动发现JVM:通过定期扫描,自动识别同一台服务器上的所有JVM实例
JMX Proxy/JConsole接入的功能:支持在不重启应用 ...
互联网服务的特点就是面向海量级的用户,面向海量级的用户如何提供稳定的服务呢?这里,对这几年的一些经验积累和平时接触的一些理念做一个总结。
一、原则
1.Web服务的CAP原理
CAP指的是三个要素:一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。CAP原理指的是这三个要素最多只能同时实现两点,不可能三者兼顾,对于海量级服务,一般这是一条常记心中的基准准则。
如下是《Web服务的CAP
》关于CAP的定义:
一致性:可以参考数据库的一致性。每次信息 ...
理解JVM的指令的一个基础是理解JVM的栈内存,因此在开始之前最好先参阅一下《Java 栈内存介绍
》。本篇将结合例子对JVM的主要指令进行描述。
在开始之前,我们先了解一下如下的 “常识”:
字长是根据JVM不同而定的,一般(并非一定)在32位机上是4个字节,64位机上是8个字节(使用8个字节很可能会潜在地存在内存浪费的情况),JVM规范上要求1个字必须至少能容纳integer型的值(4字节),2个字必须至少能容纳long型的值(8个字节)。JVM有不少定义会以字为单位,譬如reference(引用)、本地变量和栈
JVM操作由操作码和操作数组成,操作码是1字节的 ...
1.常量池
在符号解析的过程当中,常量池扮演着非常重要的工作。JVM会在常量池中定义如下信息:
字符型数据:utf-8,包括使用常量定义、方法名称、类名称、属性名称等等,这个类型一般用于定义其他类型所关联的字串信息
数字型常量:long、integer、double、float,包括使用到的一些常量定义
String常量:string,包括字串常量定义
类和引用信息:包括Class、MethodRef、InterfaceMethodRef、Fieldref、NameAndType信息
关于常量池中的信息如何组织,看下面的例子就会明白
publ ...
如同讲汇编必先讲计算机组成原理,在开始字节码之前,我们先了解一下JVM的主要构成。 在JVM的内部,主要由如下几个部分构成:
1.数据区
方法区:存放类定义信息、字节码、常量等数据,在Sun HotSpot JVM中,这块也称为Perm Gen。
堆:创建的对象信息将放入堆中,堆内部如何实现各虚拟机各不相同,对于Sun HotSpot JVM来说又分为Young Gen和Tenured Gen,更详细描述参见《[Java性能剖析]Sun JVM内存管理和垃圾回收
》
Java栈:对于每个执行线程,会分配一个Java栈,JVM在执行过程当中,每执行一个方法,都会 ...
在前面的篇章中,我们看到Java Instrutment的强大能力,本篇,我们将介绍如何使用ObjectWeb ASM的字节码增强能力构建Method Monitor
1.什么是ObjectWeb ASM
ObjectWeb ASM是轻量级的Java字节码处理框架。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。 ASM 提供了与 BCEL和SERP相似的功能,只有22K的大小,比起350K的BCEL和150K的SERP来说,是相当小巧的,并且它有更高的执行效率,是BCEL 的7倍,SERP的11倍以上。
...
参考:
《Memory Management in the Java HotSpot™ Virtual Machine
》
《Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning
》
《Garbage Collector Ergonomics
》
一、 理论基础
参见《[Java性能剖析]Sun JVM内存管理和垃圾回收
》二、 配置说明(重要部分加粗)
1. Memory配置
1) Heap Space配置
–Xmsn:初始堆空间,譬如-Xms512M
...
TPTP(Test & Performance Tool Platform)是Eclipse的又一测试/性能剖析的力作,本篇重点关注远程JVM的性能剖析功能。
1.我们先看一下TPTP性能剖析的主要结构:
1)对于性能剖析,会有一个ProfileAgent伴随JVM一起启动
2)对于每台物理服务器,会有一个AgentControler,AgentController负责与ProfileAgent进行通信
3)客户端TPTP会与AgentControler进行联系,进而获得每个ProfileAgent的剖析信息
2.安 ...
主机不可达和端口不可达不都是连接不上嘛,会有什么区别呢?果真如此吗,我们来写个小程序来试试,在地址的位置上,我们第一次使用一个不存在的主机IP,第二次使用一个存在的主机IP,但端口不存在。
public static void main(String[] args) throws Exception
{
Socket socket = new Socket();
InetSocketAddress addr = new InetSocketAddress("121.14.0.29", 12345);
socket.connect( ...
Eclipse Memory Analyzer是一个非常棒的堆内存分析工具,是JDK自带的堆分析工具jhat的一个非常好的替代品,能够快速地定位Java内存泄露的原因。
可能有的同学会问,JVM不是号称自动内存管理,GC会自动垃圾回收,Java怎么会有内存泄露,不会搞错吧?当然不会^_^, Java的内存泄露不同于C/C++的内存泄露,C/C++的内存泄露是由于使用了堆内存(new/malloc)却没有释放(delete/free),导致无法再使用到该内存片,而Java的内存泄露是无谓地引用了一些垃圾的对象,譬如我们有一个Map对象,不断往里面放对象,实际的场景可能是这 ...