본문 바로가기
IBM - old/WAS 문제&해결

WAS 를 시작하면 정상 시작되나 몇 몇 Application 이 java.lang.ArrayIndexOutOfBoundsException 과 함께 정상 시작되지 않는 경우

by freeman98 2016. 5. 30.

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 을 비껴갈 수 있습니다.

댓글