欢迎来到天天文库
浏览记录
ID:6131623
大小:63.00 KB
页数:7页
时间:2018-01-04
《探查内存不足内存泄漏问题》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、探查内存不足/内存泄漏问题问题描述内存不足(OOM)-由于java堆或本地内存中的内存耗尽,应用程序显示“内存不足”错误。内存泄漏-java堆或本地内存的持续内存增长,最终将导致内存不足状态。调试内存泄漏状态的技术与调试内存不足状态的技术相同。故障排除请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。快速链接:·Java堆、本地内存和进程大小·进程地址空间和物理内存之间的差异·为什么会发生OOM问题,JVM在这种情况下如何处理?·排除故障的步骤o确定是JavaOOM还是本地OOMoJava
2、OOMo本地OOM·Jrockit特定特性·参考文献Java堆、本地内存和进程大小Java堆-这是JVM用来分配java对象的内存。java堆内存的最大值用java命令行中的.Xmx标志来指定。如果未指定最大的堆大小,那么该极限值由JVM根据诸如计算机中的物理内存量和该时刻的可用空闲内存量这类因素来决定。始终建议您指定最大的java堆值。本地内存-这是JVM用于其内部操作的内存。JVM将使用的本地内存堆数量取决于生成的代码量、创建的线程、GC期间用于保存java对象信息的内存,以及在代码生成、优化等过程中使用的临
3、时空间。如果有一个第三方本地模块,那么它也可能使用本地内存。例如,本地JDBC驱动程序将分配本地内存。最大本地内存量受到任何特定操作系统上的虚拟进程大小限制的约束,也受到用.Xmx标志指定用于java堆的内存量的限制。例如,如果应用程序能分配总计为3GB的内存量,并且最大java堆的大小为1GB,那么本地内存量的最大值可能在2GB左右。进程大小-进程大小将是java堆、本地内存与加载的可执行文件和库所占用内存的总和。在32位操作系统上,进程的虚拟地址空间最大可达到4GB。从这4GB内存中,操作系统内核为自己保留一
4、部分内存(通常为1-2GB)。剩余内存可用于应用程序。Windows缺省情况下,2GB可用于应用程序,剩余2GB保留供内核使用。但是,在Windows的一些变化版本中,有一个/3GB开关可用于改变该分配比率,使应用程序能够获得3GB。有关/3GB开关的详细信息,可以在以下网址中找到:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ddtools/hh/ddtools/bootini_1fcj.aspRHLinuxAS2.1-3GB可
5、用于应用程序。对于其它操作系统,请参考操作系统文档了解有关配置。返回页首进程地址空间和物理内存之间的差异每个进程都获得其自有的地址空间。在32位操作系统中,此地址空间范围为0到4GB。此范围与计算机的可用随机存取内存(RAM)或交换空间无关。计算机中的可用物理内存总量是该计算机上的可用RAM和交换空间之和。所有运行的进程共享这些物理内存。进程内的存储地址是虚拟地址。内核将此虚拟地址映射到物理地址上。物理地址指向物理内存中的某个位置。在任一给定时间,计算机中运行进程所使用的全部虚拟内存的总和不能超过该计算机上可用物
6、理内存的总量。返回页首为什么会发生OOM问题,JVM在这种情况下如何处理?java堆中的内存不足如果JVM不能在java堆中获得更多内存来分配更多java对象,将会抛出java内存不足(javaOOM)错误。如果java堆充满了活动对象,并且JVM无法再扩展java堆,那么它将不能分配更多java对象。在这种情况下,JVM让应用程序决定在抛出java.lang.OutOfMemoryError后该执行什么操作。例如,应用程序可以处理此错误,并决定以安全方式自行关闭或决定忽略此错误。如果应用程序不处理此错误,那么抛
7、出此错误的线程将退出(如果您进行javaThreadDump,那么将看不到该线程)。在使用WeblogicServer的情况下,如果此错误是由某个执行线程抛出的,则会处理此错误并将其记录在日志中。如果连续抛出此错误,那么核心运行状况监视器线程将关闭WeblogicServer。本地堆中的内存不足如果JVM无法获得更多本地内存,它将抛出本地内存不足(本地OOM)错误。当进程到达操作系统的进程大小限值,或者当计算机用完RAM和交换空间时,通常会发生这种情况。当发生这种情况时,JVM处理本地OOM状态,记录说明它已用完
8、本地内存或无法获得内存的消息,然后退出。如果JVM或加载的任何其它模块(如libc或第三方模块)不处理这个本地OOM状态,那么操作系统将给JVM发送命令JVM退出的sigabort信号。通常情况下,JVM收到sigabort信号时将会生成一个核心文件。返回页首排除故障的步骤确定是JavaOOM还是本地OOM:·如果stdout/stderr消息说明这是一个java.lan
此文档下载收益归作者所有