- 博客(54)
- 收藏
- 关注
DCE VM HotSwap增强
我们知道,在SunHotSpot JVM的debug模式下,我们可以修改方法body的代码而不需要重启JVM,但是这种修改在当前的JVM版本中是有限制的,即不能动态增加/删除成员变量,也不能动态增加/删除/修改方法定义。 DynamicCode Evolution V...
2011-03-13 19:16:17
443
JVM Java HeapSpace到达临界值的高CPU问题
本周有同事反馈,IDC环境出现了CPU非常高的问题,如下图: 看一下HeapSpace的情况,如下图,很明显,HeapSpace已经到达了一个临界值: 看一下GC数据统计,短短1个小时,竟然FullGC了946次: 猜想:在HeapSpace逼近临界值的时候,分配小块内存(譬如创建一个对象,如果是分配大块内存...
2010-08-08 18:50:28
296
JNI——小心,内存怪兽出没
最近有一个同事碰到一个很诡异的问题,一个JVM使用默认的启动参数(suse linux 64),内存竟然会一直增涨到4G,而通过jmap dump出来的heap空间只有80多M,jmap dump出来的Alive heap空间则竟然只有几M,到底内存是怎么被吃掉的呢? 惯例,在目标JVM上启动BlackStar的JMX Proxy(维持现场,不需要重启动目标JVM),我们...
2010-07-29 06:55:14
716
BlackStar与设计模式
设计模式无处不在,我们可以在各种开源框架中识别到各种设计模式是如何被巧妙地应用的。BlackStar,虽然并不刻意,但也使用到很多设计模式。我们来看看BlackStar的Reporter,看一些常用的设计模式是如何使其更加灵活和可扩展的。 1.什么是ReporterBlackStar的JVM Monitor会进行JVM监控数据的采集,采集后的数据如何处理呢,就交个Re...
2010-07-01 13:12:31
120
面向事件编程
1.前言 当一个项目启动的时候,我们首先需要面向下面的问题:实现策略分离组件之间依赖绑定生命期控制需要发布一些事情告诉感兴趣的组件 (optional)组件隔离 第一个问题通过面向接口编程的方式,可以让服务使用者不必关心服务是如何实现的,第二和第三个问题则是一个良好的IOC容器能够解决的,譬如Spring,第四个问题当然是一个事件通知机制,Sprin...
2010-06-29 13:33:16
405
BlackStar功能预览
1.什么是BlackStar BlackStar将是一个高性能的JVM监控、性能监控和剖析的程序,目前BlackStar 具备如下功能:自动发现JVM:通过定期扫描,自动识别同一台服务器上的所有JVM实例JMX Proxy/JConsole接入的功能:支持在不重启应用JVM、并且只有一个JMX端口,访问同一台服务器上多个JVM的JMX服务,同时支持JConsole的接入,计划...
2010-06-27 11:41:05
202
面向海量服务的设计原则和策略总结
互联网服务的特点就是面向海量级的用户,面向海量级的用户如何提供稳定的服务呢?这里,对这几年的一些经验积累和平时接触的一些理念做一个总结。 一、原则 1.Web服务的CAP原理 CAP指的是三个要素:一致性(Consistency)、可用性(Availability)、分区容忍性(Partition tolerance)。CAP原理指的是这三个要...
2010-05-27 07:05:12
147
[字节码系列]JVM字节码初探——字节码
理解JVM的指令的一个基础是理解JVM的栈内存,因此在开始之前最好先参阅一下《Java 栈内存介绍》。本篇将结合例子对JVM的主要指令进行描述。 在开始之前,我们先了解一下如下的 “常识”:字长是根据JVM不同而定的,一般(并非一定)在32位机上是4个字节,64位机上是8个字节(使用8个字节很可能会潜在地存在内存浪费的情况),JVM规范上要求1个字必须至少能容纳in...
2010-05-22 11:37:02
167
[字节码系列]JVM字节码初探——常量池和符号解析
1.常量池 在符号解析的过程当中,常量池扮演着非常重要的工作。JVM会在常量池中定义如下信息:字符型数据:utf-8,包括使用常量定义、方法名称、类名称、属性名称等等,这个类型一般用于定义其他类型所关联的字串信息数字型常量:long、integer、double、float,包括使用到的一些常量定义String常量:string,包括字串常量定义类和引用...
2010-05-20 13:18:07
189
[字节码系列]JVM字节码初探——JVM主要组成
如同讲汇编必先讲计算机组成原理,在开始字节码之前,我们先了解一下JVM的主要构成。 在JVM的内部,主要由如下几个部分构成: 1.数据区方法区:存放类定义信息、字节码、常量等数据,在Sun HotSpot JVM中,这块也称为Perm Gen。堆:创建的对象信息将放入堆中,堆内部如何实现各虚拟机各不相同,对于Sun HotSpot JVM来说又分为Young G...
2010-05-19 21:59:39
162
[字节码系列]ObjectWeb ASM构建Method Monitor
在前面的篇章中,我们看到Java Instrutment的强大能力,本篇,我们将介绍如何使用ObjectWeb ASM的字节码增强能力构建Method Monitor 1.什么是ObjectWeb ASM ObjectWeb ASM是轻量级的Java字节码处理框架。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改...
2010-05-18 13:47:36
448
原创 Sun JVM Memory&GC参数配置
参考:《Memory Management in the Java HotSpot™ Virtual Machine》《Java SE 6 HotSpot[tm] Virtual Machine Garbage Collection Tuning》《Garbage Collector Ergonomics》一、 理论基础参见《[Java性能剖析]Sun...
2010-05-06 05:56:38
235
[Java性能剖析] TPTP性能剖析介绍
TPTP(Test & Performance Tool Platform)是Eclipse的又一测试/性能剖析的力作,本篇重点关注远程JVM的性能剖析功能。 1.我们先看一下TPTP性能剖析的主要结构: 1)对于性能剖析,会有一个ProfileAgent伴随JVM一起启动 2)对于每台物理服务器,会有一个AgentControler,A...
2010-05-01 23:00:04
1022
主机不可达和端口不可达
主机不可达和端口不可达不都是连接不上嘛,会有什么区别呢?果真如此吗,我们来写个小程序来试试,在地址的位置上,我们第一次使用一个不存在的主机IP,第二次使用一个存在的主机IP,但端口不存在。public static void main(String[] args) throws Exception{ Socket socket = new Socket(); ...
2010-05-01 21:48:14
3771
[Java性能剖析]Eclipse Memory Analyzer介绍
Eclipse Memory Analyzer是一个非常棒的堆内存分析工具,是JDK自带的堆分析工具jhat的一个非常好的替代品,能够快速地定位Java内存泄露的原因。 可能有的同学会问,JVM不是号称自动内存管理,GC会自动垃圾回收,Java怎么会有内存泄露,不会搞错吧?当然不会^_^, Java的内存泄露不同于C/C++的内存泄露,C/C++的内存泄露是由于使用了堆内...
2010-05-01 08:48:56
168
Java 栈内存介绍
本篇我们了解一下Java的栈内存空间。 1.我们首先从Intel80386架构下的Linux汇编开始,看看会把什么东西存放在栈中。在开始之前,需要注意一点,Intel80386架构下的linux系统的堆是从高位地址往低位地址增长的。 我们看一个简单的例子,计算从1加到100,文件存储为test.cint sum(int max);int test(){...
2010-04-30 23:01:06
168
[Java性能剖析]Sun JDK可视化性能剖析工具介绍
除了一些基础的工具,随Sun JDK一起发布的还有一些可视化的分析工具,包括JConsole和在JDK6.0.7版本中引入的Visual VM。 1.JConsole:JConsole可以说是前面介绍的所有功能性JDK工具的一个可视化版本,几乎实现了JVM Manage API中提供的所有的功能。 1)连接 JConsole在JDK6中有两...
2010-04-29 22:51:23
120
[Java性能剖析]Sun JDK基本性能剖析工具介绍
Sun JDK随版本同时发布了一些性能剖析的工具,这些工具基本上都是基于JVM MangeAPI和Sun JVM Attach API实现,所以其能提供什么样的功能可以参见JVM Manage API的说明。我们来了解一下: 一、功能性工具 1.jps:列出所有的JVM进程的进程ID和进程名字,实现原理可见Sun JVM Attach API 2.jin...
2010-04-29 13:40:31
110
[Java性能剖析]Sun JVM Attach API
Sun JVM Attach API是Sun JVM中的一套非标准的可以连接到JVM上的API,从JDK6开始引入,除了Solaris平台的Sun JVM支持远程的Attach,在其他平台都只允许Attach到本地的JVM上。 一、Sun JVM Attach API功能上非常简单,仅提供了如下几个功能:列出当前所有的JVM实例描述(知道JDK工具jps吗,列出所有的...
2010-04-29 07:11:27
343
[Java性能剖析]JPDA 4)Java Instrutment
在前面的介绍中,我们看到JVM TI的强大功能,然而,对于不熟悉C/C++语言的Java程序员来说,这扇门是不是真的就完全关闭了呢?还好,在关上了门的同时,JVM为我们提供了另一扇窗——Java Instrutment。其实Java Instrutment只提供了JVM TI中非常小的一个功能子集,一个是允许在类加载之前,修改类字节(ClassFileTransformer)(JDK5...
2010-04-28 21:42:13
230
[Java性能剖析]JPDA 3)JDI/Debuger
参考:http://java.sun.com/javase/6/docs/jdk/api/jpda/jdi/index.html JDI(Java Debug Interface)为Java调试器的开发提供了标准的接口,我们可以通过此构建标准的Java调试器。如JPDA架构图所示,通过Front-end、Transport(交互机制)和Back-end的交互,JDI对外使...
2010-04-28 13:17:47
200
[Java性能剖析]JPDA 2)JVM TI
参考:http://java.sun.com/javase/6/docs/platform/jvmti/jvmti.html JVM通过JVM TI为外部访问JVM内部状态定义了标准的服务,基本上各种性能剖析工具都是基于JVM TI及其前身JVM DI/JVM PI开发的,包括Visual VM、Eclipse TPTP(Test and Performance Tool...
2010-04-28 07:03:09
214
[Java性能剖析]JPDA 1)总体结构
JPDA(Java Platform Debugger Architecture)提供了JVM内部的访问接口,让我们可以方便地了解JVM内部的状态,可以在此基础上构建调试、性能剖析的平台。 JPDA包括2个接口定义和1个通信协议:JVM TI(JVM Tool Interface):定义了JVM提供给外部可以访问的服务,此接口以C/C++的方式提供。利用JDK5开始...
2010-04-27 06:31:15
126
[Java性能剖析]JVM Management API
JVM本身提供了一组管理的API,通过该API,我们可以获取得到JVM内部主要运行信息,包括内存各代的数据、JVM当前所有线程及其栈相关信息等等。各种JDK自带的剖析工具,包括jps、jstack、jinfo、jstat、jmap、jconsole等,都是基于此API开发的。本篇对这部分内容进行一个详细的说明。 参考:http://java.sun.com/javas...
2010-04-26 13:52:29
263
[Java性能剖析]Sun JVM内存管理和垃圾回收
内存管理和垃圾回收是JVM非常关键的点,对Java性能的剖析而言,了解内存管理和垃圾回收的基本策略非常重要。本篇对Sun JVM 6.0的内存管理和垃圾回收做大概的描述。 1.内存管理 在程序运行过程当中,会创建大量的对象,这些对象,大部分是短周期的对象,小部分是长周期的对象,对于短周期的对象,需要频繁地进行垃圾回收以保证无用对象尽早被释放掉,对于长周期对...
2010-04-24 18:39:06
101
[Java性能剖析]前言
最近在学习Java性能剖析方面的主题,理论方面涉及Sun JVM内存管理和垃圾回收、JPDA技术、JVM manage API和Sun JVM Attach API(非标准),并熟悉了一些常用的JVM 剖析工具,包括Sun JDK自带的jps/jinfo/jstat/jstack/jmap/jhat/jconsole/VisualVM,以及一些开源的剖析工具包括Eclipse Memo...
2010-04-24 06:01:41
80
几个重要的TCP/IP选项解析(Java Socket)
1. SO_LINGER/ SO_REUSEADDR TCP正常的关闭过程如下(四次握手过程):(FIN_WAIT_1) A ---FIN---> B(CLOSE_WAIT)(FIN_WAIT_2) A <--ACK-- B(CLOSE_WAIT) (TIME_WAIT)A <--FIN----...
2010-04-18 21:34:45
128
Tomcat Context reloadabled 与 OutOfMemory(PermSpace)
我们知道,Sun JVM分代垃圾回收器把堆空间分成3块:Young Gen:年轻代,包括1个Eden区和2个Suvivor区,新创建的对象(大部分为短周期的对象)将进入这个区,虚拟机会频繁地对这个区进行垃圾回收。Old Gen:年老代,当对象在Young Gen呆地足够久(经过几次的垃圾回收仍然存在)或Young Gen空间不足时,对象将进入Old Gen,由于一般是生命周期...
2010-04-17 13:24:28
111
[读书笔记]图解TCP/IP(概览)
注:本篇基于以太网0.准备工作1)工具Ethereal 0.99.0 : 抓包wget : 避免多个HTTP产生干扰,使用wget来访问网页2)准备/运行关闭其他可能会产生网络请求的程序(如QQ)清除ARP高速缓存:arp –d清除本地dns缓存:ipconfig /flushdns打开ethereal,去掉混编模式选项(把如下打勾去掉),开始抓包...
2010-04-12 23:05:29
142
[Tomcat源码系列] 扩展
一、 Realm/ HTTP认证1)RealmRealm提供了Web认证用户和角色信息的存储机制,如下是Tomcat关于Realm的说明A Realm is a read-only facade for an underlying security realm used to authenticate individual users, and identify the secu...
2010-04-06 22:09:30
112
[Tomcat源码系列] Tomcat 类加载器结构
一、从类加载器(ClassLoader)结构说起1.基本介绍(此部分可参见<<Core Java 2 Volume II>> Chapter9. Security) 顾名思义,类加载器是用于加载Java的类定义信息(.class)。需要注意的是类加载器仅在需要的才加载类定义信息,参见<<Core Java 2 Volume II>>...
2010-04-02 22:33:09
156
[Tomcat源码系列]结构解析 3)请求处理控制结构
一、请求处理控制结构基础 与生命期结构类似,请求处理也是一个两层的结构1.Valve:Valve是最小的处理单元,我们看看Valve的定义A Valve is a request processing component associated with a particular Container. A series of Valves are generally assoc...
2010-03-28 22:38:49
120
[Tomcat源码系列]结构解析 2)生命期控制结构
一、生命期控制结构基础Tomcat的生命期控制是一个两层的结构1)Lifecycle(org.apache.catalina.Lifecycle): 在前一篇中看到的各组件(Service、Connector、Engine、Host、Context、Wrapper)都会实现这个接口,我们看看这个接口的定义public interface Lifecycle {publ...
2010-03-28 07:37:51
80
[Tomcat源码系列]结构解析 1)总体结构预览
一、从范例开始 在开始分析之前,我们先使用Tomcat组件来组装一个完整的WebContainer。1)准备好目录结构 准备好如下目录结构BaseDir(C:/tomcattest/) --conf --webapps从{tomcat目录}/conf目录下的...
2010-03-27 08:14:23
88
Linux C/C++常用工具汇总
1.ltrace/strace:ltrace用于跟踪库调用的情况,strace用于系统调用的情况,strace是ltrace的一个功能子集,使用方式: strace/ltrace [options] -p {PID} //attach到某个进程上 strace/ltrace [options] {command} //运行某个程序并用ltrace跟踪常用的选项[o...
2010-03-22 13:42:11
176
[Tomcat源码系列] Tomcat Connector
Connector是Tomcat最核心的组件之一,负责处理一个WebServer最核心的连接管理、Net IO、线程(可选)、协议解析和处理的工作。一、连接器介绍在开始Connector探索之路之前,先看看Connector几个关键字NIO:Tomcat可以利用Java比较新的NIO技术,提升高并发下的Socket性能AJP:Apache JServ Protocol...
2010-03-20 07:15:52
115
[读书笔记]Linkers and Loaders初探
1.编译 编译分成3个阶段: *预编译阶段(g++ -E选项):这个阶段主要完成预编译指令(#)的处理,包括处理include、define、ifdef等等,譬如如果希望看到宏展开后的结果,可以使用该命令进行预编译处理。如下将test.cpp预编译后的结果存入test.ig++ -E -o test.i test.cpp 像include的文件找不到等错误会在...
2010-03-19 13:40:18
287
原创 [转载]VRRP协议介绍
来自:http://blog.chinaunix.net/u/12313/showart_235796.html 本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn: yfydz_no1@hotmail.com来源:http://yfydz.cublog.cn参考资料: RFC ...
2009-06-16 13:03:45
134
SpringMVC源码解析(下)
4.请求-处理链映射(HandlerMapping) HandlerMapping定义了请求与处理链之间的映射的策略,见如下接口。 public interface HandlerMapping { String PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE = HandlerMapping.class.getName() + ".pathW...
2009-05-22 12:11:54
117
SpringMVC源码解析(上)
1.从DispatcherServlet开始 与很多使用广泛的MVC框架一样,SpringMVC使用的是FrontController模式,所有的设计都围绕DispatcherServlet为中心来展开的。见下图,所有请求从DispatcherServlet进入,DispatcherServlet根据配置好的映射策略确定处理的Controller,Controller处理完成返回M...
2009-05-22 10:03:19
125
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人