Weblogic:内存溢出和内存泄漏问题的故障排查

本文详细探讨了Weblogic服务器中遇到的内存溢出和内存泄漏问题的故障排查方法。通过分析Java堆、本机内存和进程大小,以及故障排除步骤,包括收集和分析垃圾收集输出,确定是Java堆还是本机内存导致的问题。同时,文章提到了内存泄漏可能的原因,如应用程序中的缓存、长寿命对象和未关闭的JDBC资源,以及如何使用各种JVM工具和内存分析工具进行诊断和优化。
摘要由CSDN通过智能技术生成

OOM:由于java堆或本机内存中的内存耗尽而发生内存不足错误。在JVM中,当JVM由于堆内存不足而无法分配对象时,会抛出 OutOfMemoryError 错误,并且垃圾收集器无法提供更多的堆内存。

Weblogic:内存溢出和内存泄漏问题的故障排查

内存泄漏:如果应用程序正在使用内存,而应用程序在使用完内存后没有释放内存,则会发生内存泄漏。内存泄漏可能发生在java堆或本机内存中,并且最终会导致内存不足的情况。

故障排除

请注意,并非所有以下项目都需要完成。有些问题只能通过以下几个项目来解决。

故障排除步骤

Java堆、本机内存和进程大小

Java堆:这是JVM用来分配Java对象的内存。java堆内存的最大值是使用java命令行中的 -Xmx标志指定的。如果没有指定最大堆大小,那么这个限制是由JVM考虑机器中的物理内存量和此时可用的可用内存量等因素决定的。始终建议指定max java heap值。

本机内存:这是JVM用于自身内部操作的内存。JVM将使用的本机内存堆的数量取决于生成的代码数量、创建的线程数量、GC期间用于保存java对象信息的内存以及代码生成、优化等期间使用的临时空间。

如果有第三方本机模块,它也可以使用本机内存。例如,本机JDBC驱动程序分配本机内存。

本机内存的最大数量受任何给定操作系统上的虚拟进程大小限制以及已提交给带有 -Xmxflag的java堆的内存量的限制。例如,如果应用程序总共可以分配3 GB,如果最大java堆是1 GB,那么最大可能的本机内存大约是2 GB。

进程大小:进程大小将是java堆、本机内存以及加载的可执行文件和库所占用的内存的总和。在32位操作系统上,进程的虚拟地址空间最多可达4GB。在这个4GB中,OS内核为自己保留了一些部分(通常为1-2GB)。其余的可用于应用程序。

Windows:不同版本的Windows支持不同的进程大小。

redhat linux:RH-Linux上有不同的内核,这些不同的内核支持不同的进程大小。

对于其他操作系统,请参阅操作系统文档以了解您的配置。

有关为WebLogic服务器配置所有这些的更多信息,请参阅 调优Java虚拟机(jvm) 。

进程地址空间和物理内存之间的差异

每个进程都有自己的地址空间。在32位操作系统中,此地址空间的范围为0到4 GB。这与机器中可用的RAM或交换空间无关。由于jvm gc性能要求java堆的大部分位于RAM中,因此添加RAM比增加交换更有帮助尺寸。用于例如,对于一个使用8gig Java堆的Java应用程序,添加4gig的RAM加上12gig的swap并没有添加等量的纯RAM那么有用。

进程中的内存地址是虚拟的。内核将这个虚拟地址映射到物理地址。物理地址指向物理内存中的某个位置。在任何给定的时间,计算机中正在运行的进程使用的所有虚拟内存的总和都不能超过该计算机上可用的总物理内存。

为什么会出现OOM问题,JVM在这种情况下会做什么?

java堆内存不足

如果JVM不能在java堆中获得更多的内存来分配更多的java对象,JVM就会抛出java内存不足错误。如果java堆中充满了活动对象,并且JVM无法再扩展java堆,那么JVM将无法分配更多的java对象。

在这种情况下,JVM让应用程序决定在抛出
java.lang.OutOfMemoryError 错误. 例如,应用程序可能会处理此错误并决定以安全的方式关闭自身,或者决定忽略此错误运行。如果应用程序没有处理这个错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值