Weblogic内存溢出及常用参数配置
几种常见的内存溢出与解决办法

⼏种常见的内存溢出与解决办法引起内存溢出的原因有很多种,常见的有以下⼏种: 1.内存中加载的数据量过于庞⼤,如⼀次从数据库取出过多数据; 2.集合类中有对对象的引⽤,使⽤完后未清空,使得JVM不能回收; 3.代码中存在死循环或循环产⽣过多重复的对象实体; 4.使⽤的第三⽅软件中的BUG; 5.启动参数内存值设定的过⼩;1.堆设置jvm值的⽅法是通过-Xms(堆的最⼩值),-Xmx(堆的最⼤值)2.栈设置栈⼤⼩的⽅法是设置-Xss参数3.PermGen space第三个异常是关于perm的异常内容,我们需要的是设置⽅法区的⼤⼩,实现⽅式是通过设置-XX:PermSize和-XX:MaxPermSize参数4.DirectMemory第四个异常估计遇到的⼈就不多了,是DirectMemory内存相关的DirectMemoruSize可以通过设置 -XX:MaxDirectMemorySize参数指定容量⼤⼩,如果不指定的话,那么就跟堆的最⼤值⼀致内存使⽤监控⼯具jvmstat 解決辦法:【情况⼀】:ng.OutOfMemoryError:Javaheapspace:这种是java堆内存不够,⼀个原因是真不够(如递归的层数太多等),另⼀个原因是程序中有死循环; 如果是java堆内存不够的话,可以通过调整JVM下⾯的配置来解决: -Xms3062m -Xmx3062m【情况⼆】 ng.OutOfMemoryError:GCoverheadlimitexceeded 【解释】:JDK6新增错误类型,当GC为释放很⼩空间占⽤⼤量时间时抛出;⼀般是因为堆太⼩,导致异常的原因,没有⾜够的内存。
【解决⽅案】: 1、查看系统是否有使⽤⼤内存的代码或死循环; 2、通过添加JVM配置,来限制使⽤内存: -XX:-UseGCOverheadLimit【情况三】: ng.OutOfMemoryError:PermGenspace:这种是P区内存不够,可通过调整JVM的配置: -XX:MaxPermSize=128m -XXermSize=128m 【注】: JVM的Perm区主要⽤于存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace,这个区域成为年⽼代,GC在主程序运⾏期间不会对年⽼区进⾏清理, 默认是64M⼤⼩,当程序需要加载的对象⽐较多时,超过64M就会报这部分内存溢出了,需要加⼤内存分配,⼀般128m⾜够。
weblogic内存溢出解决方法

彻底解决Weblogic报出ng.OutOfMemoryError: PermGen space问题:打开域下面的bin目录(D:\Oracle\Middleware\user_projects\domains\base_domain\bin)。
编辑setDomainEnv.cmd文件,将以下蓝色的地方设置内存大小改成自己需要的。
set WLS_HOME=%WL_HOME%\serverif "%JA V A_VENDOR%"=="Sun" (set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512mset WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m) else (set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512mset 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=128mset MEM_PERM_SIZE_32BIT=-XX:PermSize=48mif "%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=256mset MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m我的修改后如下:set WLS_HOME=%WL_HOME%\serverif "%JA V A_VENDOR%"=="Sun" (set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512mset WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m) else (set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512mset 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=128mset MEM_PERM_SIZE_32BIT=-XX:PermSize=512mif "%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=256mset 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存放区域)区域内存最大值。
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 java_option 参数

weblogic java_option 参数WebLogic Server提供了一系列的Java选项参数,以控制Java 虚拟机的行为。
以下是一些常用的Java选项参数:1. -Xms: 初始Java堆大小2. -Xmx: 最大Java堆大小3. -XX:PermSize: 初始永久代大小4. -XX:MaxPermSize: 最大永久代大小5. -XX:NewSize: 初始新生代大小6. -XX:MaxNewSize: 最大新生代大小7. -XX:SurvivorRatio: 新生代中Eden区和Survivor区的比例8. -XX:NewRatio: 新生代和老年代的大小比例9. -XX:ParallelGCThreads: 并行垃圾回收线程数10. -XX:+UseParallelGC: 使用并行垃圾回收11. -XX:MaxGCPauseMillis: 最大垃圾回收暂停时间12. -XX:+HeapDumpOnOutOfMemoryError: 在发生OutOfMemoryError时输出堆转储文件13. -Dweblogic.security.SSL.ignoreHostnameVerification=true: 忽略SSL主机名验证14. -Dweblogic.security.SSL.protocolVersion=TLSv1.2: 使用TLSv1.2协议进行SSL/TLS通信15. -Dweblogic.MaxMessageSize: 设置WebLogic通信最大消息大小请注意,这只是一些常用的Java选项参数,您可以根据应用程序的需要进行调整。
对于一些高级调优参数,建议咨询WebLogic Server的官方文档。
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。
内存溢出工具使用方法培训

MAT常用功能页面介绍
Class Loader Explorer
按下图方式打开Class Loader Explorer页面,查看溢出时系统中存在哪些ClassLoader,每个 ClassLoader加载的类数量(Defined Classes)和类的实例数(No .Of instances)。
WebLogic、Tomcat的Javacore信息存放在控制台的输出信 息中。
WebSphere会在server目录(如 \IBM\WebSphere\AppServer\profiles\ AppSrv01\)下生成 独立的javacore文件。
Javacore可以通过以下方式手动获取:Linux下使用 kill -3 进程号,生成Javacore;Windows下通过选中java运行的命 令窗口,按组合键ctrl+break生成Javacore。
基本分析方法
根据heapdump提供的信息,找到javacore中可能出现 问题的代码段,然后进一步分析代码。
MAT安装
第一步:解压安装包
第二步:修改 MemoryAnalyzer.ini配置文件,将Xmx参数设置的足够大,以便能够打开大的 heapdump。
第三步:运行MemoryAnalyzer.exe 第四步:安装插件。
HeapDump生成比较慢,在文件生成过程中,一定不要杀掉进 程,当文件大小不再变化时,才可以杀毒进程。否则文件生成 的不完整,无法分析。
WebLogic、Tomcat需要在JVM参数中添加XX:+HeapDumpOnOutOfMemoryError,否则在内存溢出时, 是不会自动生成HeapDump的。WebSphere不需要添加该参数, 内存溢出时可自动生成heapdump文件。
内存溢出的三种情况及系统配置解决方案

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

关于中间件内存(缓存)溢出的情况分析及解决办法因为系统运行时间过程中,weblogic内存中积累了过量的垃圾文件,导致jta资源不足、jdbc找不到连接资源,最后系统崩溃,无法运行。
后台会有如下显示:类似于这样的错误,可以通过修改C:\bea\weblogic81\common\bin\commEnv.cmd 这个脚本文件。
修改内容如下:goto continue:beaif "%PRODUCTION_MODE%" == "true" goto bea_prod_modeset JA V A_VM=-jrockitset MEM_ARGS=-Xms128m -Xmx512mset JA V A_OPTIONS=%JA V A_OPTIONS% -Xverify:nonegoto continue:bea_prod_modeset JA V A_VM=-jrockitset MEM_ARGS=-Xms256m -Xmx512mgoto continue修改为:goto continue:beaif "%PRODUCTION_MODE%" == "true" goto bea_prod_modeset JA V A_VM=-jrockitset MEM_ARGS=-Xms768m -Xmx768m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=384m -XX:PermSize=384m -XX:SurvivorRatio=6 -XX:+DisableExplicitGC set JA V A_OPTIONS=%JA V A_OPTIONS% -Xverify:none goto continue:bea_prod_modeset JA V A_VM=-jrockitset MEM_ARGS=-Xms768m -Xmx768m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:MaxPermSize=384m -XX:PermSize=384m -XX:SurvivorRatio=6 -XX:+DisableExplicitGC goto continue下文摘自/caimaohua/archive/2009/06/09/4254686.a spxWebLogic用了一段時間之後,偶爾總是會出現OutOfMemory,這對測試環境來說,還只要Restart Server 就可以解決,但是在正式環境上出現可就麻煩大了,因為一Restart Server 所有User就都無法使用系統,所以MEM_ARGS這個參數的設定就很重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
同时,可以在/bea/user_projects/domains/{domain_name}/bin/setDomainEnv.sh中设置GC日志的打印参数分析:
MEM_ARGS=”-Xms2048m –Xmx2048m –verbosegclog:gc.log”
Extension-Name: wls-commonslogging-bridge, Specification-Version: 1, Implementation-Version: 1.0, exact-match: false.'
weblogic.management.DeploymentException:J2EE:160149Error while processing library references.
(address=(host=scdb2_vip)
(protocol=tcp)(port=1521))
(load_balance=yes)
(failover=yes))
(connect_data=(service_name=scdb)))
Weblogic.xml中的参数:
集群环境部署参数(集群单机环境都可用):
Export MEM_ARGS
该参数会在/bea/user_projects/domains/{domain_name}/下输出gc.lgo
二、Portal Domain调整
Domain目录/bin/setDomainEnv中,如下参数:
标志
生产模式设置
说明
DOMAIN_PRODUCTION_MODE
False
是否向屏幕输出error日志
verboseLogginFlag
False
是否输出Debug日志
PointbaseFlag
False
是否自动启动Pointbase
三、Weblogic常用参数配置
序号
项目
内容
描述
参考值
附图
1
Domain>
Environment>
Cluster>
General>
</wls:container-descriptor>
图一
图二
图三
三、集群项目部署报错及解决
集群环境项目部署,总会出现版本不一致,造成的部署失败或部署非常慢,部署报错信息:
Failure occured in the execution of deployment request with ID '116857440499' for task '2'.
true
该参数决定Domain是否在生产环境下运行,可以在创建Domain时选择运行模式,也可以手工调整这个参数
IterativeDevFlag
false
是否自动编译
DebugFalg
false
是否启用调试器
TestConsoleFlag
False
支持JMS测试工具
LogErrorsToConsoleFlag
<wls:session-descriptor>
<wls:persistent-store-type>replicated_if_clustered</wls:persistent-store-type>
<wls:sharing-enabled>true</wls:sharing-enabled>
</wls:session-descriptor>
Extension-Name: beehive-controls-1.0, Specification-Version: 1, Implementation-Version: 1.0, exact-match: false,
Extension-Name: weblogic-controls-1.0, Specification-Version: 1, Implementation-Version: 1.0, exact-match: false,
Default Load Algorithm:
设置集群负载均衡策略
Round-robin:循环
Weight-based:权重(配置此种策略要针对没各Server配置想用的权重,见2)
Random:随机
Round-robin-affinity/
Weight-based-affinity/
Random-affinity这三个参数针对硬件做前端负载均衡设置
限制保留的日志文件数
要保留的日志文件个数
选择
10
4
Domain>
Connection Pools>
Configuration>
Connections
Initial Capacity:
Maximum Capacity:
设置初始容量
最大容量
建议初始容量和最大容量设置成相等值,并要考虑并发访问数据库的线程数来调整参数
Error is: 'weblogic.management.DeploymentException:J2EE:160149Error while processing library references.
Unresolved application library references, defined in weblogic-application.xml:
Unresolved application library references, defined in weblogic-application.xml:
Extension-Name: beehive-controls-1.0, Specification-Version: 1, Implementation-Version: 1.0, exact-match: false,
5
Domain>
Connection Pools>
Configuration>
Connections
URL
集群数据库URL设置方法
例如:jdbc:oracle:thin:@
(description=
(address_list=(address=(host=scdb1_vip)
(protocol=tcp)(port=1521))
......
解决办法:
将weblogic上所有的类库不仅发不到Cluster中还要同时发布到AdminServer上,改变所有类库的Target,如图:
自动编译检测时间
<wls:jsp-descriptor>
<wls:page-check-seconds>60</wls:page-check-seconds>
</wls:jsp-descriptor>
<wls:container-descriptor>
<wls:servlet-reload-check-secs>60</wls:servlet-reload-check-secs>
Extension-Name: weblogic-controls-1.0, Specification-Version: 1, Implementation-Version: 1.0, exact-match: false,
Extension-Name: wls-commonslogging-bridge, Specification-Version: 1, Implementation-Version: 1.0, exact-match: false.
该文件地址:/bea/user_projects/domains/{domain_name}/servers/{Server_name}/data/store/diagnostics/*.DAT
(注:AdminServer下该诊断文件为1M左右正常)
但是该文件还会继续生成增大,我们的域中并没有配置相关启动诊断文件的设置,Bea售后也无法解释,但可以通过尝试增加启动参数(ui.disableInstrumentation=true
${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} ${JAVA_OPTIONS}ui.disableInstrumentation==${SERVER_NAME} -Djava.security.policy=${WL_HOME}/server/lib/weblogic.policy ${PROXY_SETTINGS} ${SERVER_CLASS}
标题:
Weblogic内存溢出及常用参数配置
分类:
EIP
提交人:
冯亚俊
提交时间:
2009-07-09 15:21:00.0
摘要描述:
Weblogic内存溢出及常用参数配置
详细内容
一、WebLogic内存溢出
最近访问量门户访问量突然增大,总是内存溢出,频繁宕机,调整了很多参数没起作用,偶然发现Weblogic域在不断增大,罪魁祸首竟然是Weblogic的诊断文件,也是造成Weblogic内存溢出的主要原因。当Weblogic启动时就加载了每个Server上的诊断文件,占用了大部分内存分配,用户访问量越大这个文件也随之越大,将他删除后重新启动服务,八个Server竟然也只用了6分钟,部署项目也只需7,8分钟,一直平稳运行,再无内存溢出现象。
)来控制该诊断文件的增长,在/bea/user_projects/domains/{domain_name}/bin/startWebLogic.sh中: