weblogic内存溢出解决方法
排查内存溢出的方法和步骤

排查内存溢出的方法和步骤内存溢出是软件开发中常见的问题,它会严重影响程序的性能和稳定性。
为了确保软件的优质运行,及时排查和解决内存溢出问题至关重要。
本文将详细介绍排查内存溢出的方法和步骤。
一、了解内存溢出在排查内存溢出之前,我们需要了解什么是内存溢出。
内存溢出是指程序在运行过程中,申请的内存超过了系统能够提供的最大内存限制,导致程序无法正常运行。
内存溢出主要有以下几种类型:1.堆内存溢出:指程序在堆内存中申请的空间超过了限制。
2.栈内存溢出:指程序在栈内存中申请的空间超过了限制。
3.全局内存溢出:指程序在全局内存中申请的空间超过了限制。
二、排查内存溢出的方法1.分析程序代码(1)检查内存申请和释放的逻辑是否正确。
(2)检查是否存在内存泄露的情况,如已释放的内存还被程序使用。
(3)检查程序中是否存在大量临时对象创建和销毁,导致内存频繁申请和释放。
2.使用内存分析工具(1)Visual Studio Memory Profiler:适用于Windows平台的内存分析工具,可以监测程序运行过程中的内存使用情况,定位内存溢出问题。
(2)Valgrind:适用于Linux平台的内存分析工具,可以检测内存泄露、内存越界等问题。
(3)Xcode Memory Graph:适用于iOS和macOS平台的内存分析工具,可以查看内存使用情况,分析内存泄露等问题。
3.动态监测内存使用在程序运行过程中,实时监测内存使用情况,观察内存是否持续上升。
可以通过以下方法进行动态监测:(1)编写内存监控代码,定期输出程序内存使用情况。
(2)使用操作系统提供的命令行工具,如Windows的任务管理器、Linux的top和ps命令等。
三、排查内存溢出的步骤1.确定内存溢出的类型和范围。
2.使用分析工具或动态监测方法,定位内存溢出的问题代码。
3.修复问题代码,如优化内存申请和释放逻辑、消除内存泄露等。
4.重新运行程序,验证内存溢出问题是否已解决。
weblogic内存溢出

WEBLOGIC 内存溢出解决方案相关教程:很好听听听吧朱禹齐(原创)正文f-tuning)' has been busy for"697" seconds working on the request "Ht tp Request: aaa.do", which is more than the configured time (StuckThr eadMaxTime) of "600" seconds. Stack trace:后来在公司文档中发现以前所有weblogic的部署使用的JDK都是Sun的,于是没有进行具体的分析就进行了更换。
今天客户报告系统反应极慢,查看后台发现包内存溢出异常,导致整个系统没有反应,于是进行了重启才恢复。
------------------------------------------------------------------------以下内容转自其他Blog------------------------------------------------------------------------场景:用户培训需要培训环境,培训环境搭好后,由于不常更新跑的时间较长,考验系统稳定性的时候到了,很可惜稳定性这个问题与我们大家的美好愿望一直背道而驰,天天求神拜佛也不行很不给面子,发现了一个原因解决了又出现了其他引起当机的因素,弄得是焦头烂额,下面就是我们发现的一个引起当机的原因,请各位提高警惕。
9月16日系统当机,Weblogic报出ng.OutOfMemoryError: PermGen space 异常,10-15分钟后就会发生<[STUCK] ExecuteThread: '2'for queue: 'weblogic.kernel.Default (self -tuning)'> <<WLS Kernel>> <> <> <1221538218253> <BEA-000339> <[STUCK] ExecuteThread: '2'for queue: 'weblogic.kernel.Default (self-tuning)排查分析:1、参考tomcatFAQ: /tomcat/FAQ/Deployment中如下内容:Why does the memory usage increase when I redeploy a web application?Because the Classloader (and the Class objects it loaded) cannot be r ecycled. They are stored in the permanent heap generation by the JVM, and when you redepoy a new class loader is created, which loads anot her copy of all these classes. This can cause OufOfMemoryErrors event ually.Tomcat FAQ指出SUN JVM对处于permanent heap generation(默认4M)的内容不做垃圾回收会导致内存溢出错误。
Weblogic项目部署及相关问题解决

Weblogic项目部署1、使用weblogic部署项目时,首先要启动一下开始菜单中weblogic目录下的QuickStart添加一个项目名称。
2、创建完项目之后,在weblogic安装目录\Middleware\user_projects\domains下面就可以看到自己刚刚创建的项目了。
随后启动目录下面的startWebLogic.cmd,启动完成后,启动ie 浏览器在地址栏输入http://localhost:7001/console,然后会出现一个登陆窗口,用户名为创建项目最后输入的名称,默认是weblogic,密码即为自己输入的密码.3、登陆进去之后我们就可以对我们所创建的项目进行配置了:配置服务项中的数据源:名称和JNDI名称我们都要使用项目中app-config-context.xml 配置文件项目中的JNDI名称。
这里使用的是sinosoftDataSource。
数据源配置完成后的参数: url:jdbc:oracle:thin:@10.32.14.73:1521:personal驱动程序类名称:oracle.jdbc.xa.client.OracleXADataSource由于在倒数第二步测试连接成功之后我就直接点击完成,导致最后一步没有完成,最后在部署项目完成之后项目报错找不到数据源,Unable to resolve 'sinosoftDataSource'. Resolved ''; remaining name 'sinosoftDataSource'之后就是在weblogic中部署需要部署的项目,也就是将项目中的webapps目录加载到weblogic中,一切完成之后就可以在浏览器中输入访问路径访问这个项目了。
weblogic部署中遇到的问题:1、内存溢出:修改项目路径\bin\目录下的setDomainEnv.cmd文件,将其中的内容:set MEM_PERM_SIZE_64BIT=-XX:PermSize=128mset MEM_PERM_SIZE_32BIT=-XX:PermSize=48m修改为:set MEM_PERM_SIZE_64BIT=-XX:PermSize=512mset MEM_PERM_SIZE_32BIT=-XX:PermSize=512mMyeclipse中的内存溢出修改:-Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=128m-XX:MaxPermSize=512m -Xverify:none -daPaths中添加一个名称为antlr-2.7.6rc1.jar。
内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案内存溢出是指程序在运行过程中申请的内存超过了系统或者进程所能提供的上限。
导致内存溢出的原因可能是程序中存在内存泄漏、内存分配过多或者递归调用过深等。
下面将介绍三种常见的内存溢出情况及其系统配置解决方案。
1.程序内存泄漏导致内存溢出:内存泄漏指程序在运行过程中动态分配内存空间后,没有对其进行释放,导致一部分内存无法再次使用。
长时间运行的程序中,如果内存泄漏较为严重,系统可用内存会不断减少,直到最终耗尽所有内存资源。
解决方案:使用内存泄漏检测工具来检测和修复程序中的内存泄漏问题。
同时,可以考虑使用自动内存管理的编程语言,如Java和Python,在程序运行过程中自动回收未使用的内存。
2.内存分配过多导致内存溢出:解决方案:优化程序的内存使用,尽可能减小内存分配的数量和大小。
可以通过使用更高效的内存管理算法来减少内存碎片,或者使用内存池技术来提前分配一定量的内存供程序使用。
3.递归调用过深导致内存溢出:递归函数在每次调用时会将一定量的数据压入栈中,如果递归调用层数过深,栈的空间可能会超过系统的限制,从而导致内存溢出。
这种情况通常发生在没有设置递归终止条件或者递归层数过多的情况下。
解决方案:优化递归算法,设置合适的递归终止条件,避免递归调用过深。
如果无法避免使用递归算法,可以考虑使用尾递归或者迭代算法来替代递归调用,减少栈的压力。
在系统配置方面,可以采取以下措施来预防和解决内存溢出问题:1.增加系统内存容量:如果内存溢出是由于系统可用内存不足引起的,可以考虑增加系统的内存容量。
这可以通过增加物理内存条或者使用虚拟内存技术来实现。
虚拟内存技术会将部分磁盘空间用作缓存,并将一部分数据暂时存储在磁盘上,以释放内存空间。
2. 调整JVM参数:对于使用Java虚拟机(JVM)的应用程序,可以通过调整JVM的参数来控制内存的分配和管理。
例如,可以通过设置-Xmx参数来限制JVM使用的最大堆内存大小,或者通过设置-XX:MaxPermSize参数来限制JVM使用的最大持久代(PermGen)内存大小。
内存溢出的三种情况及系统配置解决方案

内存溢出的三种情况及系统配置解决方案内存溢出是指程序在运行过程中申请的内存超过了系统所分配的内存空间,导致程序崩溃或出现异常。
内存溢出通常是由于程序设计或系统配置问题引起的。
以下是三种常见的内存溢出情况及相应的系统配置解决方案。
1.单个进程占用内存过大:当一些进程在运行过程中占用的内存超过系统分配的限制时,就会导致内存溢出。
这种情况通常发生在大型应用程序或者后台服务运行时。
解决方案:-增加物理内存:在服务器或计算机中增加物理内存,以满足进程运行所需的内存空间。
-调整虚拟内存:将物理内存和虚拟内存结合使用,允许操作系统使用虚拟内存作为物理内存的扩展,从而提供更大的内存容量。
-优化应用程序:通过优化程序代码、降低内存使用、合理管理资源等方法,减少进程对内存的占用。
2.长时间运行的应用程序产生泄露:有些应用程序在长时间运行后会产生内存泄露的问题,即分配并使用内存后没有将其释放,导致内存占用逐渐增加,最终导致内存溢出。
解决方案:-使用垃圾回收机制:在一些支持垃圾回收的编程语言中,通过垃圾回收机制可以自动释放未使用的内存。
开发人员可以使用这些机制来解决内存泄露问题。
-引入内存监控工具:使用内存监控工具来检测应用程序中的内存泄露,定位并解决导致内存泄露的代码问题。
-定期重启应用程序:定期重启应用程序可以清理内存,防止内存泄露导致内存溢出。
3.大规模并发请求导致内存压力增加:在高并发的情况下,当系统同时处理大量的请求时,每个请求所占用的内存可能累积增加,导致整体内存压力增加,最终出现内存溢出。
解决方案:-加大系统负载均衡能力:通过增加负载均衡器、引入缓存机制等方式,将请求分散到多台服务器上,减少单台服务器的内存压力。
-优化数据库访问:对于一些频繁读写数据库的操作,可以通过合理的数据库设计、使用索引、缓存查询结果等方法,减少对数据库的访问,降低内存压力。
-调整服务器配置:合理设置服务器的最大并发连接数、线程池大小等参数,根据实际需求分配内存资源。
资源溢出解决方法

资源溢出解决方法
资源溢出的解决方法主要包括以下几个方面:
1. 代码审查和优化:通过仔细审查代码,找出可能导致溢出的源头,如大量数据的处理、循环引用等。
优化这些代码段,减少内存使用。
2. 调整内存参数:调整JVM的启动参数,如-Xms和-Xmx参数,可以动态调整内存分配。
这可以帮助避免内存溢出。
3. 使用内存分析工具:使用内存分析工具(如MAT)来分析内存使用情况,找出并解决内存泄漏问题。
4. 避免大对象分配:大对象的分配可能会导致频繁的垃圾回收,进而影响程序的性能。
如果可能,尽量避免一次性分配大对象。
5. 优化数据结构和算法:有时候,资源溢出的问题可以通过优化数据结构和算法来解决。
例如,使用更有效的数据结构或算法来替代原有的,可以减少内存使用和提高处理速度。
6. 资源管理:对于系统资源,如数据库连接、线程等,需要进行有效的管理。
避免资源的过度申请和释放,以减少资源浪费和冲突。
7. 监控和预警:建立系统的监控和预警机制,及时发现资源溢出的迹象,并采取相应的措施进行解决。
8. 分布式处理:对于一些大型的计算或存储任务,可以采用分布式处理的方式,将任务分解到多个节点上并行处理,以减少单个节点的资源负载。
以上是一些常见的资源溢出解决方法,具体实施时需要根据实际情况进行选择和调整。
weblogic日常维护总结与故障诊断

中间件故障诊断总结一、步骤:1、准确描述现象:客户说的和自己查看到的:平台、版本、操作、信息等。
特别是,故障前是否有做过什么操作:网络调整、设备调整、主机参数调整、配置文件修改……反正将这一切都列入排查的对象。
2、使用工具收集数据,收集配置文件、日志、dump文件等等。
3、使用分析数据,根据问题或收集的数据,使用适当的工具分析数据,当然包括了在网上和在官方支持站点搜索类似的问题的解决办法。
4、尝试解决问题,根据找到的问题点,尝试解决。
如修改错的,复原正确的;运行有问题的,适当调整运行的环境和运行的参数等等。
5、给出最佳解决方案,一般就是继续观察了。
6、总结经验并加以重用,知识积累。
二、通过前台收集基本的信息:1、重点是故障前做过的操作2、比对运行平台是否在官方的兼容性列表中,一般就是关注各个版本,特别是一些比较怪异的问题3、检查环境和参数,如能打开控制台,就在控制台中初步观察,一般进入控制台的格式是http://ip地址:端口/console如:http://192.168.0.89:7001/console/。
常用的留意点如下:A、域运行状态(域-监视-健康状况);一般为running状态,如果不是running,那这些界面就没有了。
B、服务器运行状态(域-环境-服务器),正常的为running。
C、各个server性能(JVM)状态(域-环境-服务器,点击具体的serve后进入,监视-健康状况);留意JVM 堆中当前可用的内存量。
不同的JVM,所显示的内容可能不一样,以下为sun的:D、各个server线程状态(域-环境-服务器,点击具体的serve后进入,监视-线程);一般来说,空闲线程要多;健康状况为ok如下图health状态为:Warning,这个是有线程阻塞的。
阻塞线程的内容为:####<2011-8-13 上午02时42分35秒 GMT+08:00> <Error> <WebLogicServer> <dataweb1> <dc_admin1> <[ACTIVE] ExecuteThread: '15' for queue:'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <><1313174555613> <BEA-000337> <[STUCK] ExecuteThread: '19' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "2,492" seconds working on the request"weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl@12035ed", which is more than the configured time (StuckThreadMaxTime) of "2,400" seconds. Stack trace:.SocketOutputStream.socketWrite0(Native Method) .SocketOutputStream.socketWrite(SocketOutputStream.java:97).SocketOutputStream.write(SocketOutputStream.java:141).ns.DataPacket.send(Unknown Source)E、JDBC(域-环境-服务器,点击具体的serve后进入,监视-JDBC);活动连接数合理。
内存溢出解决方案

内存溢出解决方案内存溢出是指程序在运行过程中申请的内存超过了系统能够提供的最大内存空间,导致程序无法正常运行或崩溃。
内存溢出是常见的程序错误之一,解决内存溢出问题需要从以下几个方面入手:1. 内存泄漏:内存泄漏是指程序申请的内存没有被正确释放,导致内存使用量不断增加。
解决内存泄漏的方法是在程序开发过程中养成良好的编程习惯,及时释放不再使用的内存。
可以使用Java的垃圾回收机制自动回收无用内存,也可以手动管理内存,确保每次申请内存都能正确释放。
2.内存分配:合理地管理内存分配是避免内存溢出的重要方法之一、在编程过程中,应该避免过多地申请大块的内存空间,可以考虑分配多个小内存块来替代大内存块的申请。
此外,还应充分利用内存缓存,例如使用缓存池来减少频繁的内存分配和释放操作。
3.代码优化:优化代码可以减少内存的占用,并提高程序的执行效率。
可以采用以下方法进行代码优化:a.避免重复创建对象:重复创建对象会占用大量的内存空间,可以使用对象池或单例模式避免重复创建。
b.尽量使用基本数据类型:基本数据类型占用的内存空间较小,可以减少内存的使用量。
c.优化集合的使用:避免使用过多的集合对象,可以使用数组或自定义数据结构来代替。
d.内存重用:在需要重复使用内存的地方,可以考虑使用对象池来重复利用已经申请的内存空间。
4.资源管理:及时释放和关闭资源也是避免内存溢出的重要方法之一、在程序运行过程中,应该及时释放不再使用的资源,例如数据库连接、文件句柄等。
5.增加内存:如果程序中存在大量的数据处理或者内存消耗大的操作,可以考虑增加系统的内存大小。
增加内存可以提高程序的性能,并避免因内存不足而导致的溢出问题。
6. 使用内存管理工具:可以使用一些内存管理工具来检测和解决内存溢出问题。
例如,Java开发中可以使用JVM的内存分析工具来分析内存使用情况,如jmap、jhat、jconsole等。
总之,解决内存溢出问题需要从程序开发的各个方面入手,包括内存泄漏的排查和修复、合理的内存分配、代码的优化、资源的及时释放、增加内存等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
彻底解决Weblogic报出ng.OutOfMemoryError: PermGen space问题:
打开域下面的bin目录(D:\Oracle\Middleware\user_projects\domains\base_domain\bin)。
编辑setDomainEnv.cmd文件,将以下蓝色的地方设置内存大小改成自己需要的。
set WLS_HOME=%WL_HOME%\server
if "%JA V A_VENDOR%"=="Sun" (
set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512m
set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m
) else (
set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512m
set WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m
)
set MEM_ARGS_64BIT=%WLS_MEM_ARGS_64BIT%
set MEM_ARGS_32BIT=%WLS_MEM_ARGS_32BIT%
if "%JA V A_USE_64BIT%"=="true" (
set MEM_ARGS=%MEM_ARGS_64BIT%
) else (
set MEM_ARGS=%MEM_ARGS_32BIT%
)
set MEM_PERM_SIZE_64BIT=-XX:PermSize=128m
set MEM_PERM_SIZE_32BIT=-XX:PermSize=48m
if "%JA V A_USE_64BIT%"=="true" (
set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%
) else (
set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%
)
set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m
我的修改后如下:
set WLS_HOME=%WL_HOME%\server
if "%JA V A_VENDOR%"=="Sun" (
set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512m
set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m
) else (
set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512m
set WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m
)
set MEM_ARGS_64BIT=%WLS_MEM_ARGS_64BIT%
set MEM_ARGS_32BIT=%WLS_MEM_ARGS_32BIT%
if "%JA V A_USE_64BIT%"=="true" (
set MEM_ARGS=%MEM_ARGS_64BIT%
) else (
set MEM_ARGS=%MEM_ARGS_32BIT%
)
set MEM_PERM_SIZE_64BIT=-XX:PermSize=128m
set MEM_PERM_SIZE_32BIT=-XX:PermSize=512m
if "%JA V A_USE_64BIT%"=="true" (
set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%
) else (
set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%
)
set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m
set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=1024m
注:暂时解决内存溢出问题
在D:\Oracle\Middleware\wlserver_10.3\common\bin\commEnv.sh中配置MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"
-Xms:内存初始值 -Xmx:内存最大值(不要超过内存的80%)
MaxPermSize:PermGen(Class和Meta存放区域)区域内存最大值。
可调整为: MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m" -XX:MaxPermSize改为256或512。