还剩6页未读,继续阅读
文本内容:
1.WebLogic频繁宕机故障处理环境描述AIX
5308.WebLogic
9.2MP3集群6应用节点,1管理节点,1集群分发节点JDKIBMJava564-bit JDKService RefreshSR6b+IZ08455JVM-Xms2048M-Xmx2048M PatchID:NGZ8Performance Packserver/native/aix/ppc64/1ibmuxer.so系统使用过程中,平均每一个月至少宕机一次,表现为WebLogic服务节点呈挂死现象,业务系统不能使用,只能重启服务节点后系统方能使用,并且在业务系统使用过程中,速度达不到理想的效果故障分析
1、WebLogic服务节点挂机现象,经检查WebLogic日志,发现在服务节点挂机之前有出u vjava/lang/OutOfMemoryError等报错,同时domains目录下也生成有javacore、heapdump等文件JVM内存使用情况***WARNING***Java heapis almostexhausted:0%free Java heap z/z/Dump Event〃systhrow〃00040000Detail java/lang/0ut0fMemoryError receivedFree Javaheap size:9,664bytes AllocatedJavaheapsize:4,294,967,296bytes目前分配给Server的4G内存已全部使用,但又未得到新的内存,出现了OutOfMemoryError线程使用情况从线程使用情况看,只有个别线程正在运行,其它线程均在等待或被阻塞而运行的线程正在进行数据据访问操作检查内存使用情况在重新调整JVM为1G的情况下,分析了内存再次溢出的DUMP文件,从下图看出有存内存泄漏问题,而且情况较为严重,一个class共消耗内存670M,这个泄漏对象当前正在进行JDBC数据访问操作在JVM为1G的条件下,根据分析结果表明,目前内存泄漏问题主要表现在两个地方1对象com.XXXX.XXXX.XXXX.XXXX.model.DefectQueryVO此对象分别创建了36414次、1239307次2一系列JDBC操作,这个操作说明在进行数库访问、数据交换因此已建议开发商软件工程师检查程序并进行优化故障处理结果将相应的表进行分区处理,优化了数据库,后来使用正常
2.WebLogic JVM内存泄漏主要表现为程序中存在许多对象占用内存不能被回收,特别是大对象,导致频繁FULL GC垃圾回收,而每次垃圾回收后又不能清理这些对象而回收占用空间,则系统的响应时间则越长,当新对象多次申请空间时又不能满足需求,最终出现内存溢出而WebLogic宕机其中而,b,c均是使用XXXX页面期间产生的3个线程189,193,194占用情况,WebLogic自身及其它对象使用只占用了140M此问题经过多次分析,均是由XXXX页面的访问引起
3、应用服务器CPU占用比较高经检查,发现占用CPU高的进程主要是Java进程,即WebLogic Server运行进程,通过分析JDK GC日志,发现在GC垃圾回收占用系统资源严重,而FULL GC垃圾回收又是整个垃圾回收的重点,而每次FULL GC垃圾回收都是对那些在年轻代区域中不能被回收的对象进行回收同时结合观察,未进行FULL GC时,系统的CPU使用正常,但每次在FULL GC期间,系统CPU都在高位,说明CPU高与FULL GC垃圾回收有关,而FULL GC垃圾回收则是类似上图中的占用JVM内存较多的大对象Oslash;首先解决运行环境的问题针对以上内存溢出和CPU的问题,首先从运行环境中寻找其解决方案
1、升级WebLogic
8.1版本由SP3到SP
62、升级SUN jdkl.
4.2SR4到SUN jdk
1.
4.2SR19//备注在JDK每一个新版本都解决了这前版本许多的BUG,其中包含由JDK本身而引起的的JVM CrashThread LockCPU High等关键问题经过以上处理及JDK运行参数的调整后,对业务进行了压力测试,当单节点并发用户在80个以上同时运行了20多分钟,数据库的CPU达到100%时,而且WebLogic进程占用CPU情况较正常,但越到最后,CPU使用情况就比较糟糕了,但最终未出现宕机情况,此时观察GC垃圾回收日志,主要表现为FULL GC频繁再次处理环境外的问题根据分析FULL GC频繁的原因主要表现为大对象不能被回收,出现内存溢出,如附图中的状况内存溢出问题是目前应用服务器宕机的普通表现,其彻底解决办法,也只能修改程序,调整相关参数只能起到缓解的作用根据多次观察及分析GC日志,根据目前32位环境的情况,目前JVM参数配置如下:[*]-XX:+PrintGCTimeStamps-XX:+PrintGCDetai1s-XX:+PrintGCApplicationStoppedTime[*]-XX:+PrintGCApplicationConcurrentTime-Xms768m-Xmx1024m-XX:NewSize=512m-XX:MaxNewSize=512m[*]-XX:NewRatio=2-XX:SurvivorRatio=4-XX:PermSize=128m-XX:MaxPermSize=256m-XX:MaxTenuringThreshold=20-XX:+Disab1eExp1icitGC-XX:+UseConcMarkSweepGC-XX:+UseParNewGC-XX:ParallelGCThreads=13-XX:+CMSPermGenSweepingEnabled-XX:+CMSParalleiRemarkEnab1ed-XX:+UseCMSCompactAtFullCollection[*]-XX:+UseFastAccessorMethods-XX:+UseCMSInitiatingOccupancyOnly-XX:CMSInitiatingOccupancyFraction=70-XX:+CMSParalleiRemarkEnab1ed复制代码,结果如下9天的普通GC垃圾回收共计29,136次,平均间隔时间为
23.4秒进行一次,每次普通GC垃圾回收时间平均为
0.7秒;9天的FULL GC垃圾回收共计2,313,平均间隔时间为
2.2秒进行一次,每次FULL GC垃圾回收时间平均为
1.3秒,这个还是比较严重;根据结果分析,虽然通过调整使目前环境相比之前的环境会稳定一点,但根本的问题还是存在Number ofFull Garbage Collections:2,313Number ofMinor GarbageCollections:29,136Average Full GarbageCollection interval:2,268milliseconds AverageMinor GarbageCollectioninterval:23,408milliseconds AverageFullGarbageCollection duration:1,324milliseconds AverageMinor GarbageCollection duration:733milliseconds处理结果根据本次的处理,保障了XXXX业务系统在短时间不宕机的正常运行经过多次分析及跟踪,宕机问题主要原因是因为程序中存在内存泄漏问题,而泄漏位置主要是XXXXX这个页面访问
4、:weblogic时指定jdk版本问题javax.xml.stream.FactoryConf igurationError:Provider javax.xml.stream.XMLInputFactory couldnot beinstantiated:java.lang.InstantiationException atjavax.xml.stream.XMLInputFactory.newlnstanceXMLInputFactory.java:158at weblogic,application,descriptor.BasicMunger
2.clinitBasicMunger
2.java:76at weblogic,application.ApplicationDescriptor$MyApplicationDescriptor.creat eXMLStreamReaderApplicationDescriptor.java:438at weblogic,application,descriptor.AbstractDescriptorLoader
2.createDescript orBeanAbstractDescriptorLoader
2.java:369at weblogic,application,descriptor.AbstractDescriptorLoader
2.loadDescriptor BeanWithoutPlanAbstractDescriptorLoader
2.java:720Truncated,see logfile forcomplete stacktrace此问题已经解决,原来是在myeclipse中jdk版本的问题,我安装的是jdkl.6,而weblogic的默认版本是
1.
5.06,又长了一志但是在每次配置域的时候选择其它jdk版本,选择的版本比weblogic的默认版本要高,报错,这可能是版本问题
5、部署web项目到weblogic中,启动weblogic出现异常Error J2EE BEA-160197Unable toload descriptorD:\bea\user_projects\domains\base_domain\.\autodeploy\dataSwitching/WEB-INF/web.xml ofmodule dataSwitching.The erroris weblogic.descriptor.DescriptorException:Unmarshaller failedat weblogic,descriptor,internal.MarshallerFactory$l.createDescriptorMarsha llerFactory.java:147at weblogic,descriptor.DescriptorManager.createDescriptorDescriptorManager.java:280at weblogic,descriptor.DescriptorManager.createDescriptorDescriptorManager.java:248at weblogic,application,descriptor.AbstractDescriptorLoader
2.getDescriptorB eanFromReaderAbstractDescriptorLoader
2.java:
749.....原来是web.xml中web-app版本的原因,改回
2.4即可tomcat向weblogic迁移注意事项!
3、运行环境为中文WindowsXP SP2,Tomcat
5.5,Weblogic
9.2,JDK
1.
54、启动weblogic报错已加锁的解决办法/base_domain/servers/AdminServer/data/store/diagnostics/WLS_DIAGNOSTICSO
00000.DAT文件再启动weblogic一般就可以了
6、连接池配置问题spring的datasource在tomcat里配置为:bean id二〃dataSource”class=〃org・springframework,jndi./z JndiObjectFactoryBeanproperty name二〃jndiName〃valuejava:comp/env/dsName/value/property/bean在web logic里需要配置为bean id=dataSource”z/class=〃org・springframework,jndi.JndiObjectFactoryBeanproperty name二〃jndiName〃valuedsName/value/property/bean润乾报表的reportDefine在tomcat下配置为:config nameJNDIPrefix/name valuejava:comp/env/value/config confignamedataSource/name valuedsName,oracle/value/config在weblogic里修改为config nameJNDIPrefix/name value/value/config则web logic里jndi连接池的jndi资源名称应该配置为:dsName并且必须指定target server,如exmple server★getServletContext改为getServletConfig.getServletContext★NullPointerException ininitSessionInfo仅在IE出现,在FF里没有问题,需要以下2步才能撤掉消除这个问题
1.设置Server,Protocols页面里的HTTP,去掉Enable Keepalives的复选框
2.在WEB-INF目录下新建一个weblogic,xml文件,内容如下xml version=〃
1.0〃encoding二〃GBK〃?〈weblogic-web-app z//z xmlns=http://ww.bea.com/ns/weblogic/90session-descriptor cookie-namejsessionidl/cookie-name/session-descriptor/weblogic-web-app
7、围绕字符集的问题汇总web.xml问题描述文件本身是UTF-8格式时,Tomcat能够解析,Weblogic启动失败,提示VALIDATION PROBLEMSWERE FOUND解决方法用window的记事本打开web.xml,另存为ANSI格式由于当前是中文操作系统,所以实际编码为GBK同时修改第一行字符集信息〈xml version=〃
1.0〃encoding二〃UTF-8〃?由UTF-8改为GBK,否则Weblogic还是解析失败.比较奇怪的是UltraEdit竟然也能识别encoding设置,如果文件是ANSI格式,而encoding设置为UTF-8,则中文显示为乱码!设成GBK就好了提示Eclipse里所有xml格式默认为UTF-8,并且不支持encoding设置,所以打开GBK的web.xml还是乱码所以Weblogic不支持web.xml为UTF-8格式是个缺陷?这个问题也许与web.xml的version=〃
2.4〃有关?可以把相关的配置改成Servlet
2.3的格式试试(待测试)总之用Weblogic有小麻烦jsp,include,与pageEncoding问题描述在main,jsp中include另外一个part,jsp页面,这些文件都是UTF-8格式的,并且设置%@/z zzpage contentType=text/html;charset=UTF-8%,则pageEncoding应该默认与contentType里的charset相同,为UTF-8如果被include的part,jsp的文件格式是UTF-8的,则不管是哪种include方式,都会导致最终输出的页面里多出〃FF FE〃字节,这些不能显示的字符后面如果是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,如果用了struts tiles,则tiles相关的文件也要设置成GBK!由于在Weblogic下不能同时配置pageEncoding,所以看项目情况,可以放弃Tomcat下的显示效果.部署weblogic的问题,主要在数据库连接上,和一些中文乱码问题。