引言
为了提高维护人员运维水平,以集中与分享日常运行维护经验为目的,现进行典型经验的编制。
现象描述
部分应用服务器出现宕机现象,在F5上查看时已经掉出集群状态。
处理过程
停止宕机应用服务器上的Weblogic进程。
/home/weblogic/bea/user_projects/domains/pms/bin/setDomainEnv.sh文件中的启动内存大小并添加垃圾回收机制,修改后如下:
MEM_ARGS="-Xms5248m -Xmx5248m -Xmn1536m?
-XX:SurvivorRatio=6
-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC
-XX:CMSFullGCsBeforeCompaction=20
-XX:+UseFastAccessorMethods
-XX:+AggressiveOpts"
3、修改完成后重启Weblogic服务。
在收到报警信息后,对后台日志进行查看,报错信息如下:
Exception in thread "CBM_正常处理任务线程" java.lang.OutOfMemoryError: Java heap space
at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:868)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1045)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:839)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1132)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3316)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3361)
经过对报错日志分析,状态检修的CBM处理进程内存溢出报错,导致服务器宕机。
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。为了解决Java中内存溢出问题,我们首先必须了解Java是如何管理内存的。Java的内存管理就是对象的分配和释放问题。在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(GarbageCollection,GC)完成的,程序员不需要通过调用GC函数来释放内存,因为不同的JVM实现者可能使用不同的算法管理GC,有的是内存使用到达一定程度时,GC才开始工作,也有定时执行的,有的是中断式执行GC。但GC只能回收无用并且不再被其它对象引用的那些对象所占用的空间。Java的内存垃圾回收机制是从程序的主要运行对象开始检查引用链,当遍历一遍后发现没有被引用的孤立对象就作为垃圾回收。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。