<< Diagnosing java.lang.OutOfMemoryError ( 诊断Java内存溢出) | 首页 | 处理Java Out of Memory问题步骤 >>

何謂Java heap, Native memory and Process Size

一般在3-tier 架构下的应用系统,最常的问题就是Out of Memory(内存),或Memory leak(内存泄)况,最后往往导致Application

Server失效与系统Crash,让管人员必需常常守候在Server 旁边,注意它关心它系统况与运作情形避免它Crash。而本专题报导则是针对此型问题

的发生,从JVM 其基本架构开始明,并采用问答与实的方式进行說明解释,并且提供检查的项目明,可藉由这些项目自我检测,以避免发生Memory

leak 有效掌握Resource
 
何谓Out of MemoryMemory leak
Out of Memory
定义
 
内存不論Java heap Native Memory 足以提供给组件使用。
 
Memory leak
定义
 
组件的内存使用不論Java heap Native Memory 中持续成长,
最后导致发生Out of memory 的情况。
 
何谓Java heap, Native memory and Process Size
Memory leak 问题的发生,首先先解几个JVM 的内存管重要的名称:
 
Java heap
这是JVM 配置Java objects 的内存,Java heap 内存大小是透过命行列中下的參數-Xmx 设定的。假如最大的heap size 没有定义,那么它的

大小限制将由JVM 视当时情况如机器的物理内存与剩下可用的内存决定。因此一般都建议要设定最大的Java heap 的值。
 
Native Memory
这是JVM 它内部运作的内存,Native Memory Heap 将是会被JVM使用,而它的大小取决于产生的程序代码、产生的threadGC

时用于保存javaobject 信息与产生或优化程序代码时的暂存空间假如它是Third party native module,它将可能使用Native Memory.如:native

JDBC driver 就是配置Native Memory
Native Memory
的最大值是会受限于任何一OS virtual process size 与已经被參數-Xmx 指定给Java Heap 的内存大小。如:假如应用系统能够

总共配置3GB,并且假如最大的Java Heap 大小为1G,那么Native Memory 最大值可能接近2GB
 
Process Size
Process Size
将会是Java HeapNative Memory 与被用于已加载执与函式库的内存的加总,在32 位的操作系统,一个处程序虚拟寻址空间能

够到4GB超过4GB,操作系统的核心将会预一部份给它自己使用(一般是1~2GB)。那么剩下的就是给应用系统。Windows:假设有4GB 的内存,预

设给应用系统使用最大2GB 与而另外的2GB

是给核心使用。仅管如此,在一些同版本的Windows,可以用/3GB參數切换这个比值,让应用系统可以得到3GB 的内存。详细可Microsoft网站,

址址:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/bootini_1fcj.asp
Red Hat AS 2.1
:应用系统可以使用到最大内存大小为3GB其他的操作系统,请考该操作系统文件做设定。
 
Process
寻址空间与物理内存的
每一个Process 都拥有自己的寻址空间,在32 位操作系统,这个寻址空间是介于0 4GB 之间。这是机器上独RAM Swap Space,机器上全部

的物理内存是同一台机器上的RAM Swap Space 的加总,所有执中的Process 分享这个物理内存。Process 的内存寻址是虚拟的。操作系统

核心对应这虚拟地址到实体地址。实体地址指到物理内存中的某一个位置。在一台机器上任何特定时间所有被正在执Process 的虚拟内存,其

加总能超出在同一台机器上全部物理内存大小。
 
为何会Out of Memory 问题发生?在这个况发生
JVM
会做么处置?
 
Out of Memory in java heap
假如JVM 无法在java heap 取得内存配置多的java objectsJVM 会丢出java out of memory 错误,JVM 无法配置多的java objects 假如heap

正在使用的objects java heap 无法再扩展。在这个况下,在丢出java.lang.OutOfMemoryError 错误讯息后,JVM 会让应用系统决定要做

么。如:应用系统自监控这个错误并且决定在那一个的模式下停止执,或者管这个错误。假如应用系统这个错误,那么thread 会丢出这个错

误讯息并且停止执行離JVM(假如使用java threaddump,你将会看到这个thread)
WebLogic Server
在这个况,假如它是由一个execute thread 丢出,这个错误将会被监控并且会做记錄。假如这是断被丢出,那么core

healthmonitor thread 会停止WebLogic Server 运作。
 
Out of Memory in native heap
假如无法native memory 配置到内存空间,则JVM 丢出native out ofmemory,这通常发生在Process 达到操作系统Process size 的限制或是机器

超出RAM Swap Space 加总.当这个发生时,JVM 会处native out memory 情况,记錄讯息明它执 out of native memory 或无法取得内存

并且开。假如JVM 或任何被加载的module(像是libc 或是一个Third party module)无法处这个native out ofmemory 况,然后操作系统将会传

送一个sigabort 讯息给JVM,这样将会使JVM 停止开。通当JVM 将会产生程序代码文件当它取得sigabort 讯号。

 

 

标签 : ,



发表评论 发送引用通报