Weblogic常见问题解决方案.docx
1. WebLOgiC频繁宕机故障处理环境描述AIX5308WebLogic9.2MP3集群(6应用节点,1管理节点,1集群分发节点)JDK:IB町ava564-bitJDK(ServiceRefreshSR6b+IZ08455)JVM:-Xms2048M-Xmx2048MPatchID:NGZ8PerformancePack:servernativeaixppc64libmuxer.so系统使用过程中,平均每一个月至少宕机一次,表现为WebLogiC服务节点呈挂死现象,业务系统不能使用,只能重启服务节点后系统方能使用,并且在业务系统使用过程中,速度达不到理想的效果。故障分析1、WebLOgiC服务节点挂机现象,经检查WebLogiC日志,发现在服务节点挂机之前有出“javalangOUtOfMemOryElTor”等报错,同时domains目录下也生成有javacoresheapdump等文件。JVM内存使用情况*WARNING*Javaheapisalmostexhausted:0%freeJavaheapDumpEventsysthrow”(00040000)Detail,zjavalangOutOfMemoryError,zreceivedFreeJavaheapsize:9,664bytesAllocatedJavaheapsize:4,294,967,296bytes目前分配给Server的4G内存已全部使用,但又未得到新的内存,出现了OutOfMemoryError线程使用情况:从线程使用情况看,只有个别线程正在运行,其它线程均在等待或被阻塞。而运行的线程正在进行数据据访问操作检查内存使用情况:在重新调整JVM为IG的情况下,分析了内存再次溢出的DUMP文件,从下图看出有存内存泄漏问题,而且情况较为严重,一个ClaSS共消耗内存670M,这个泄漏对象当前正在进行JDBC数据访问操作。在JVM为IG的条件下,根据分析结果表明,目前内存泄漏问题主要表现在两个地方:1)对象com.XXXX.XXXX.XXXX.XXXX.model.DefectQueryVO此对象分别创建了36414次、1239307次。2)一系列JDBC操作,这个操作说明在进行数库访问、数据交换。因此已建议开发商软件工程师检查程序并进行优化。故障处理结果将相应的表进行分区处理,优化了数据库,后来使用正常。2. WebLogicJVM内存泄漏主要表现为程序中存在许多对象占用内存不能被回收,特别是大对象,导致频繁FULLGC垃圾回收,而每次垃圾回收后又不能清理这些对象而回收占用空间,则系统的响应时间则越长,当新对象多次申请空间时又不能满足需求,最终出现内存溢出而WebLOgiC宕机。其中(a),(b),(c)均是使用XXXX页面期间产生的3个线程(189,193,194)占用情况,WebLogic自身及其它对象使用只占用了140M<)此问题经过多次分析,均是由XXXX页面的访问引起。3、应用服务器CPU占用比较高经检查,发现占用CPU高的进程主要是JaVa进程,即WebLogiCSerVer运行进程,通过分析JDKGC日志,发现在GC垃圾回收占用系统资源严重,而FULLGC垃圾回收又是整个垃圾回收的重点,而每次FULLGC垃圾回收都是对那些在年轻代区域中不能被回收的对象进行回收。同时结合观察,未进行FULLGC时,系统的CPU使用正常,但每次在FULLGC期间,系统CPU都在高位,说明CPU高与FULLGC垃圾回收有关,而FULLGC垃圾回收则是类似上图中的占用JVM内存较多的大对象。Oslash;首先解决运行环境的问题针对以上内存溢出和CPlJ的问题,首先从运行环境中寻找其解决方案。1、升级WebLogic8.1版本由SP3到SP62、升级SUNjdkl.4.2SR4到SUNjdk1.4.2SR19备注:在JDK每一个新版本都解决了这前版本许多的BUG,其中包含由JDK本身而引起的的JVMCrash、ThreadLock、CPUHigh等关键问题。经过以上处理及JDK运行参数的调整后,对业务进行了压力测试,当单节点并发用户在80个以上同时运行了20多分钟,数据库的CPU达到100%时,而且WebLogic进程占用CPU情况较正常,但越到最后,CPlJ使用情况就比较糟糕了,但最终未出现宕机情况,此时观察GC垃圾回收日志,主要表现为FULLGC频繁。再次处理环境外的问题根据分析FULLGC频繁的原因主要表现为大对象不能被回收,出现内存溢出,如附图中的状况。内存溢出问题是目前应用服务器宕机的普通表现,其彻底解决办法,也只能修改程序,调整相关参数只能起到缓解的作用。根据多次观察及分析GC日志,根据目前32位环境的情况,目前JvM参数配置如下:-XX:+PrintGCTimeStamps-XX:+PrintGCDetails-XX:+PrintGcApplicationStoppedTime*-XX:+PrintGCApp1icatiOnConcurrentTime-Xms768m-Xmx1024m-XX:NewSize=512m-XX:MaxNewSize=512m*-XX:NewRatio-2-XX:SurvivorRatio=4-XX:PermSize=128m-XX:MaxPermSize=256m-XX:MaxTenuringThreshold=20-XX:+Disab1eExpIicitGC-XX:+UseConcMarkSweepGC-XX:+UseParNewGC-XX:ParallelGCThreads=IS-XX:+CMSPermGenSweepingEnab1ed-XX:+CMSParaHelRemarkEnabled-XX:+UseCMSCompactAtFulIColIection*-XX:+UseFastAccessorMethods-XX:+UseCMSInitiatingccupancyn1y-XX:CMSInitiatingOccupancyFractiOn=70-XX:+CMSParaIlelRemarkEnab1ed复制代码,结果如下:9天的普通GC垃圾回收共计29,136次,平均间隔时间为23.4秒进行一次,每次普通GC垃圾回收时间平均为0.7秒;9天的FULLGC垃圾回收共计2,313,平均间隔时间为2.2秒进行一次,每次FULLGC垃圾回收时间平均为1.3秒,这个还是比较严重;根据结果分析,虽然通过调整使目前环境相比之前的环境会稳定一点,但根本的问题还是存在。NumberofFullGarbageCollections:2,313NumberofMinorGarbageCollections:29,136AverageFullGarbageCollectioninterval:2,268millisecondsAverageMinorGarbageCollectioninterval:23,408millisecondsAverageFullGarbageCollectionduration:1,324millisecondsAverageMinorGarbageCollectionduration:733milliseconds处理结果根据本次的处理,保障了XXXX业务系统在短时间不宕机的正常运行。经过多次分析及跟踪,宕机问题主要原因是因为程序中存在内存泄漏问题,而泄漏位置主要是XXXXX这个页面访问。4、配置weblogic时指定jdk版本问题javax.xml.stream.FactoryConfigurationError:Providerjavax.xml.stream.XMLTnputFactorycouldnotbeinstantiated:java.lang.InstantiationExceptionatjavax.xml.stream.XMLInputFactory.newlnstance(XMLInputFactory.java:158)atwebIogic.application,descriptor.BasicMunger2.<clinit>(BasicMunger2.java:76)atweblogic,application.ApplicationDescriptorSMyApplicatiOnDescriptor.creatGXMLStreamReader(ApplicationDescriptor.java:438)atweblogic,application,descriptor.AbstractDescriptorLoader2.CreateDescriptorBean(AbstractDescriptorLoader2.java:369)atweblogic,application,descriptor.AbstractDescriptorLoader2.IoadDescriptorBeanWithoutPlan(AbstractDescriptorLoader2.java:720)Truncated,seelogfileforcompletestacktrace>此问题己经解决,原来是在myeclipse中jdk版本的问题,我安装的是jdkl.6,而WeblOgiC的默认版本是1.5.06,又长了一志。但是在每次配置域的时候选择其它jdk版本,选择的版本比WeblOgiC的默认版本要高,报错,这可能是版本问题。5部署Web项目到WeblOgiC中,启动WebIOgiC出现异常:<Error><J2EE><BEA-160197><UnabletoloaddescriptorD:beauser_projectsdomainsbase_domain.autodeploydataSwitchingWEB-INF/web.xmlofmoduledataSwitching.Theerrorisweblogic,descriptor.DescriptorException:Unmarshallerfailedatweblogic,descriptor,internal.MarshallerFactorySl.CreateDescriptor(MarshaIlerFactory.java:147)atweblogic,descriptor.DescriptorManager.CreateDescriptor(DescriptorManager.java:280)atweblogic,descriptor.DescriptorManager.CreateDescriptor(DescriptorManager.java:248)atwebIogic.application,descriptor.AbstractDescriptorLoader2.getDescriptorBeanFromReader(AbstractDescriptorLoader2.java:749)原来是web.xml中web-app版本的原因,改回2.4即可tomcat向weblogic迁移注意事项!3、运行环境为:中文WindoWSXPSP2,Tomcat5.5,Weblogic9.2,JDKl.54、启动WeblOgiC报错已加锁的解决办法/base_domain/servers/AdminServer/data/store/diagnostics/WLS_DIAGNOSTICSO00000.DAT文件再启动weblogic一般就可以了6、连接池配置问题spring的datasource在tomcat里配置为:<beanid="dataSou:TCeClaSS="org.springframework.jndi.JndiobjeCtFaCtOryBean”><propertyname=*jndiName,z><value>java:comp/envdsName</value><property><bean>在WebIOgiC里需要配置为<beanid="dataSource”class=zzorg.springframework.jncli.JndiObjectFactoryBearT)<propertyname=zzjndiName,z><value>dsName<value><property><bean>润乾报表的reportDefine在tomcat下配置为:<config><name>JNDIPrefix<name><value>javarcompenv<vale><config><config><name>dataSource</name><value>dsName,oracle<vale><config>在weblogic里修改为:<config><name>JNDIPrefix<name><value><value><config>则weblogic里jndi连接池的jndi资源名称应该配置为:dsName并且必须指定targetserver,如:exmpleserver getServletContextO改为getServletConfig().getServletContext() NullPointerExceptionininitSessionInfo()仅在IE出现,在FF里没有问题,需要以下2步才能撤掉消除这个问题1 .设置SerVer,PrOtOCOIS页面里的HTTP,去掉EnabieKeePaliVeS的复选框2 .在WEB-INF目录下新建一个WebIOgiC.xml文件,内容如下:<?xmlversion=zzl.0encoding=z,GBKzz7><weblogic-web-appXnllnS=nsweblogic90,z><session-descriptor><cookie-name>jsessionid1</cookie-name><session-descriptor><web1ogic-web-app>7、围绕字符集的问题汇总web.xml问题描述:文件本身是UTF-8格式时,TOmCat能够解析,Weblogic启动失败,提示:VALIDATIONPROBLEMSWEREFOUND解决方法:用window的记事本打开web.xml,另存为ANSI格式(由于当前是中文操作系统,所以实际编码为GBK)同时修改第一行字符集信息:<?xmlVerSion=L0CnCoding="UTF-8"?由UTF-8改为GBK,否则WebIogiC还是解析失败.比较奇怪的是UltraEdit竟然也能识别encoding设置,如果文件是ANSI格式,而encoding设置为UTF-8,则中文显示为乱码!设成GBK就好了提示:ECIiPSe里所有XInl格式默认为UTF-8,并且不支持encoding设置,所以打开GBK的web.xml还是乱码所以Weblogic不支持web.xml为UTF-8格式是个缺陷?这个问题也许与web.xml的version=zz2.4有关?可以把相关的配置改成Servlet2.3的格式试试(待测试)总之用Weblogic有小麻烦jsp,include,与pageEncoding问题描述:在main.jsp中include另外一个part,jsp页面,这些文件都是UTF-8格式的,并且设置<%pagecontentType=,ztexthtml;charset=UTF-8,/%>,则pageEncoding应该默认与COntentTyPe里的CharSet相同,为UTF-8如果被include的part,jsp的文件格式是UTF-8的,则不管是哪种include方式,都会导致最终输出的页面里多出FFFE字节,这些不能显示的字符后面如果是<div><table>等html的块元素,会导致IE等浏览器先换行处理,再显示<div><table>最终的效果就是页面多出一些奇怪的空行.2个问题在Tomcat和Weblogic里都有.解决方法:把被include的Part.jsp文件改为GBK格式的(用记事本打开,另存为,指定ANSI即可)但是这样会引起中文乱码的问题,需要设置part,jsp的PageEnCOding="GBK"才行!设置pageEncoding又会引起下面的问题:main,jsp和part,jsp在Weblogic里,有些情况(还不太明确)不能同时配置pageEncoding解决方法:只在被include的part.jsp里配置PageEnCoding="GBK遗留问题:在Weblogic里,只需要设置被include的jsp页面为ANSI,并且设置pageEncoding即可解决问题.但是Tomcat里,如果JSP都是UTF-8格式,不用设置pageEncoding,大部分页面没有问题,只是某些页面有问题.但是这些有问题的页面必须都设置为GBK才能解决,包括main,jsp,part.jsp,如果用了strutstiles,则tiles相关的文件也要设置成GBK!由于在WebIOgiC下不能同时配置PageEnCOding,所以看项目情况,可以放弃Tomcat下的显示效果.部署Weblogic的问题,主要在数据库连接上,和一些中文乱码问题。