本文和大家重点讨论一下weblogic设置jvmheap大小问题,如果没有丢失任何WebLogic 线程,那么您需要判断应用程序创建的线程是否丢失。 在一些情况下,此问题通过在服务器启动时设置-XX:MaxPermSize JVM 选项得到了解决。
weblogic怎么去设置jvmheap大小
如果没有丢失任何WebLogic 线程,那么您需要判断应用程序创建的线程是否丢失。 在一些情况下,此问题通过在服务器启动时设置-XX:MaxPermSize JVM 选项得到了解决。
找到安装目录下的weblogic81\common\bin\commEnv.cmd文件,打开修改如下代码:
- sun
- if"%PRODUCTION_MODE%"=="true"gotosun_prod_mode
- setJAVA_VM=-client
- setMEM_ARGS=-Xms768m-Xmx1024m-XX:MaxPermSize=256m
- setJAVA_OPTIONS=%JAVA_OPTIONS%-Xverify:none
- gotocontinue
- :sun_prod_mode
- setJAVA_VM=-server
- setMEM_ARGS=-Xms768m-Xmx1024m-XX:MaxPermSize=256m
- gotocontinue
一般在文件中,有二处这样的代码存在,一个是使用weblogic自带的jrockitJDK,二是使用sun的JDK.这里是以sunJDK为例,通过修过二处的=-Xms768m-Xmx1024m可以达到修改JVM目的所在.修改后保存重启即可。
MaxPermSize=256m的介绍:
一般情况下,在分析服务器挂起问题、原因不明的超时或其它引起混乱的不明行为过程中会发现丢失线程问题。在缺省的WebLogicServer配置中,Default队列应当有15个执行线程(0到14)。下面是一个ThreadDump摘录,显示“Default”队列的ExecuteThread13、8、6、5和3丢失。在指示线程已经终结的服务器日志记录中没有任何异常、堆栈跟踪或通知。
为什么发生此问题?
线程在抛出未捕获的异常或错误时可能会消失。这种情况会导致服务器挂起,因为其它线程可能在永远不会调用notify()的监视器上等待(即,要调用notify()的线程已经消失了)。
如果设置MaxPermSize能够纠正此问题,有一种可能的解释是OutOfMemoryException在某些时候因为没有足够的MaxPermSize设置而被抛出。如果线程正在记录此异常,同时又发生另一个异常(例如,另一个OutOfMemoryException),则线程将不发出任何通知就结束。一直等待该线程调用notify()的其它线程将挂起。
如果设置MaxPermSize无法纠正此问题,则原因很可能是应用程序异常处理出现问题。您应当利用调试器执行代码审核或分析应用程序,以确定问题是否由未捕获的异常或错误引起的。“Hey,where'dmythreadgo?”一文解释了未捕获的异常和/或错误可能造成线程消失的各种情况。它还提供了如何纠正这些问题的示例。
排除丢失执行线程故障的检查清单
进行ThreadDump并判断是否有任何线程丢失。您应当参考config.xml文件以确定在ThreadDump中可以看到多少执行线程。如果没有丢失任何WebLogic线程,那么您需要判断应用程序创建的线程是否丢失。
在一些情况下,此问题通过在服务器启动时设置-XX:MaxPermSizeJVM选项得到了解决。MaxPermSize可以设置为最大堆分配(mx)的一半。尝试设置.XX:MaxPermSize=128m,并不断增大其值直至问题得到解决。
如果这种方法没有起到帮助作用,那么问题可能是应用程序的异常处理功能故障引起的,需要利用调试器进行代码审核或分析才能发现问题根源。有关详细信息,请参阅下列外部资源。
【编辑推荐】
- 解答WebLogic与JVM六大疑问
- 深入学习JVM内存设置原理和调优
- 处理jvm.cfg损坏行之有效的方法
- 全面认识Eclipse中JVM内存设置
- 解决JVM Terminated.ExitCode=-1问题行之有效的方法