Stuck 스레드는 단순하게 설명하면 설정되어 있는 StuckThreadMaxTime 값(단위는 초, 기본값 600초)보다 오래 수행되는 스레드를 의미함
설정 값은 아래 그림과 같이 확인할 수 있다.
웹로직 웹 관리자 콘솔에서 스레드 모니터링을 통해 Stuck 스레드가 존재하는 지 확인할 수 있다.
위의 모니터링은 실시간 분석 시에 유용하지만, 웹로직 서버가 장애 발생하는 경우에는 확인이 불가할 수 있다. 하지만, Stuck 스레드에 대해 WebLogic Server 로그 파일에 기록한다.
Stuck 스레드가 발생했다는 로그 메시지 예시는 아래와 같다.
<Sep 25, 2013 7:23:02 AM EST> <Error> <WebLogicServer> <Server1> <App1> < ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'> <BEA-000337> <[STUCK] ExecuteThread: '35' for queue: 'weblogic.kernel.Default (self-tuning)' has been busy for "608" seconds working on the request "Workmanager: default, Version: 0, Scheduled=true, Started=true, Started time: 608213 ms POST /App1/jsp/test.jsp HTTP/1.1 Accept: application/x-ms-application... Referer: http://.. Accept-Language: en-US User-Agent: Mozilla/4.0 .. Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate Content-Length: 539 Connection: Keep-Alive Cache-Control: no-cache Cookie: JSESSIONID= ]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace: <Application Execution Stack Trace> ................................... javax.servlet.http.HttpServlet.service(HttpServlet.java:727) javax.servlet.http.HttpServlet.service(HttpServlet.java:820) weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301) weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:184) weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.... weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run() weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2281) weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2180) weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491) weblogic.work.ExecuteThread.execute(ExecuteThread.java:256) weblogic.work.ExecuteThread.run(ExecuteThread.java:221) |
스레드 덤프는 Stuck 스레드 상태를 확인시켜준다. 아래는 스레드 덤프 예시이다. 예시에서 WebLogic의 스레드 상태는 [STUCK]으로 보여주지만, native 스레드 상태는 "RUNNABLE"임에 주의해야 한다.
또한 "RUNNABLE"은 JVM 관점에서는 온전한 상태이지만, WebLogic 즉, 컨테이너 관점에서는 "STUCK"으로 온전하지 않은 상태임에 명심해야 한다.
[글참조] https://dzone.com/articles/oracle-weblogic-stuck-thread
'WAS > WebLogic' 카테고리의 다른 글
[정보] Managed Server Independence(MSI) 모드 (0) | 2016.10.24 |
---|---|
[Tips] WebLogic Plugin Enabled 설정 (0) | 2016.10.20 |
[모니터링] JConsole로 WebLogic 모니터링 하기 (0) | 2016.10.05 |
[Tips] WebLogic KeepAlive 설정 (0) | 2016.09.30 |
[Tips] Admin 모드로 빠지는 방지 옵션 설정 (0) | 2016.08.12 |