IBM Websphere 8.5.5.7中的内存不足

时间:2016-02-10 01:41:03

标签: websphere

我在IBM Websphere 8.5.5.7中向Out of Memory提出了一个问题....我们的应用程序主要是部署在IBM WAS 8.5.5.7中的Spring RestFull Webservices应用程序。在过去5天内获得以下Out of Memory错误

[2/3/16 13:12:51:651 EST] 000000ab BBFactoryImpl E   CWOBB9999E: Something unexpected happened; the data (if any) is <null> and the exception (if any) is java.lang.OutOfMemoryError: Java heap space at 
com.ibm.oti.vm.VM.getClassNameImpl(Native Method) at 
com.ibm.oti.vm.AbstractClassLoader.getPackageName(AbstractClassLoader.java:384) at 
com.ibm.oti.vm.BootstrapClassLoader.loadClass(BootstrapClassLoader.java:65) at 
java.lang.ClassLoader.loadClassHelper(ClassLoader.java:691) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:680) at 
java.lang.ClassLoader.loadClassHelper(ClassLoader.java:693) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:680) at 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:358) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:663) at 
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:502) at 
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at 
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) at 
org.eclipse.osgi.internal.loader.buddy.RegisteredPolicy.loadClass(RegisteredPolicy.java:79) at 
org.eclipse.osgi.internal.loader.buddy.PolicyHandler.doBuddyClassLoading(PolicyHandler.java:135) at 
org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:494) at 
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422) at 
org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410) at 
org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107) at 
java.lang.ClassLoader.loadClassHelper(ClassLoader.java:693) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:680) at 
java.lang.ClassLoader.loadClass(ClassLoader.java:663) at 
sun.reflect.DelegatingClassLoader.loadClass(DelegatingClassLoader.java:51) at 
sun.misc.Unsafe.defineClass(Native Method) at 
sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:57) at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:437) at 
java.security.AccessController.doPrivileged(AccessController.java:363) at 
sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:433) at 
sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:149) at 
sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:316) at 
java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1409) at 
java.io.ObjectStreamClass.access$1500(ObjectStreamClass.java:63) at 
java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:515) at 
java.security.AccessController.doPrivileged(AccessController.java:363) at 
java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:491) at 
java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:338) at 
java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:625) at 
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1619) at 
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514) at 
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1619) at 
java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1514) at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1768) at 
java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347) at 
java.io.ObjectInputStream.readObject(ObjectInputStream.java:364) at 
com.ibm.son.util.Util.deserialize(Util.java:434) at 
com.ibm.son.mesh.AbstractTCPImpl.procReceivedMessage(AbstractTCPImpl.java:478) at 
com.ibm.son.mesh.CfwTCPImpl.completedRead(CfwTCPImpl.java:1248) at 
com.ibm.son.mesh.CfwTCPImpl.complete(CfwTCPImpl.java:1061) at 
com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818) at 
com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) at 
com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at 
com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at 
com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at 
com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at 
com.ibm.io.async.ResultHandler.runEventProces

在堆转储的Introscope和堆分析器上进行分析据观察,IBM stax解析器与WAS使用的com/ibm/xml/xlxp2/scan/util/SimpleDataBufferFactory一致地消耗了大部分内存(> 60%)  Introscope分析可以发现OOM发生时线程数,内存使用率和连接数逐渐增加的突然峰值。

当检查com.ibm.xml.xlxp2.scan.util.Databuffer更多堆的问题时,可以看出IBM已经修复了类的内存问题属于com.ibm.xml.xlxp.scan.util / com.ibm。 WAS 6,WAS 7和WAS 8服务器中的xml.xlxp2.scan.util。

http://www-01.ibm.com/support/docview.wss?uid=swg1PM39346 http://www-01.ibm.com/support/docview.wss?uid=swg1PM08333

任何人都可以分享这个与IBM WAS 8.5.5.7相关的问题是否无法获得可靠的突破

1 个答案:

答案 0 :(得分:1)

许多与com.ibm.xml.xlxp2.scan.util.DataBuffer有关的内存不足问题都是通过系统属性解决的,用户可以配置这些属性以减少IBM StAX解析器使用的内存。

以下系统属性有助于解决IBM StAX解析器的内存不足问题。它们中的每一个都应该在WebSphere Application Server v8.5.5.7中可用。

com.ibm.xml.xlxp2.api.util.encoding.DataSourceFactory.bufferLength

控制StAX解析器数据缓冲区大小的系统属性。默认值为65536。

如果64KB缓冲区仅在使用时被InputStream部分填充,则将此属性设置为较小的值(如2048)可能会减少内存使用量。缓冲区缓存在StAX解析器中(在com/ibm/xml/xlxp2/scan/util/SimpleDataBufferFactory内),因此减少内存使用量会减少链接到每个StAX解析器对象的整体内存。

com.ibm.xml.xlxp2.api.util.Pool.STRONG_REFERENCE_POOL_MAXIMUM_SIZE

系统属性(由APAR PM42465引入),它限制将使用强引用缓存的XMLStreamReaders(和XMLStreamWriters)的数量。按照提供的链接中的说明设置此属性。

com.ibm.xml.xlxp2.api.util.encoding.DataSourceFactory.bufferLoadFactor

此系统属性的值是一个非负整数,它确定将加载到每个缓冲区的最小字节数(以百分比表示)。百分比使用以下公式1 /(2 ^ n)计算。

如果未设置系统属性,则其默认值为3.将属性设置为低于默认值的值可以提高内存使用率,但也可能会降低吞吐量。

com.ibm.xml.xlxp2.scan.util.SymbolMap.maxSymbolCount

系统属性(由APAR PI08415引入)。此属性的值是一个非负整数,它确定StAX解析器的符号映射的最大大小。按照提供的链接中的说明设置此属性。