1. WAS 버전 : WAS ND 6.1.0.31, 7.0.0.11 이전 버전
2. OS : All
3. Error 발생 시점 : WAS 를 시작하면 정상 시작되나 몇 몇 Application 이 java.lang.ArrayIndexOutOfBoundsException 과 함께 정상 시작되지 않는 경우
4. Error message :
[13. 7. 30 18:36:18:773 KST] 0000000a ContainerImpl E WSVR0501E: null [class com.ibm.ws.runtime.component.ApplicationServerImpl] 컴포넌트 작성 중 오류
com.ibm.ws.exception.RuntimeWarning: com.ibm.ws.exception.RuntimeError: java.lang.ArrayIndexOutOfBoundsException
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplications(ApplicationMgrImpl.java:809)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:563)
at com.ibm.ws.runtime.component.ContainerImpl.startComponents(ContainerImpl.java:977)
at com.ibm.ws.runtime.component.ContainerImpl.start(ContainerImpl.java:673)
at com.ibm.ws.runtime.component.ApplicationServerImpl.start(ApplicationServerImpl.java:197)
at com.ibm.ws.runtime.component.ContainerImpl.startComponents(ContainerImpl.java:977)
at com.ibm.ws.runtime.component.ContainerImpl.start(ContainerImpl.java:673)
at com.ibm.ws.runtime.component.ServerImpl.start(ServerImpl.java:526)
at com.ibm.ws.runtime.WsServerImpl.bootServerContainer(WsServerImpl.java:192)
at com.ibm.ws.runtime.WsServerImpl.start(WsServerImpl.java:140)
at com.ibm.ws.runtime.WsServerImpl.main(WsServerImpl.java:461)
at com.ibm.ws.runtime.WsServer.main(WsServer.java:59)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at com.ibm.wsspi.bootstrap.WSLauncher.launchMain(WSLauncher.java:183)
at com.ibm.wsspi.bootstrap.WSLauncher.main(WSLauncher.java:90)
at com.ibm.wsspi.bootstrap.WSLauncher.run(WSLauncher.java:72)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at com.ibm.wsspi.bootstrap.WSPreLauncher.launchEclipse(WSPreLauncher.java:329)
at com.ibm.wsspi.bootstrap.WSPreLauncher.main(WSPreLauncher.java:92)
Caused by: com.ibm.ws.exception.RuntimeError: java.lang.ArrayIndexOutOfBoundsException
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:955)
at com.ibm.ws.runtime.component.ApplicationMgrImpl$AppInitializer.run(ApplicationMgrImpl.java:2124)
at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:342)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1497)
Caused by: java.lang.ArrayIndexOutOfBoundsException
at java.util.ArrayList.ensureCapacity(ArrayList.java:196)
at java.util.ArrayList.add(ArrayList.java:377)
at com.ibm.ws.classloader.ClassLoaderDump.addApplication(ClassLoaderDump.java:774)
at com.ibm.ws.classloader.ClassLoaderManager.initialize(ClassLoaderManager.java:251)
at com.ibm.ws.classloader.ClassLoaderManager.<init>(ClassLoaderManager.java:176)
at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:762)
at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:921)
... 3 more
5. 예상 이유 :
여러 개의 Application 이나 module 이 한 꺼번에 시작될 때 non-synchronized list 에 대하여 동시 접근되게 되는 경우
ClassLoader 에서 ArrayIndexOutOfBoundsException 발생
6. 조치 방안 :
해당 부분은 Application 이나 module 의 list 를 non-synchronized 하게 관리하는 IBM WAS 의 bug 이며 이미 ifix 가 나와있음
WAS ND 6.1.0.31, 7.0.0.11 이상으로 fixpack 업데이트 필요
fixpack 을 올릴수 없는 상황이라면 WAS 서버 설정의 parallel start 옵션을 disable 하면 해당 exception 을 비껴갈 수 있습니다.
IBM - old/WAS 문제&해결
댓글