2012-03-16 2 views
6

우리는 클러스터 된 Weblogic 환경에서 Hibernate를 사용하여 SpringMVC를 실행한다. 우리의 응용 프로그램은 데이터베이스 공간 문제가 발생할 때까지 잘 작동했습니다. 이로 인해 DB 제공 업체는 데이터베이스 스토리지를 확장했습니다.Weblogic and Oracle : Stuck ExecuteThread

변경 후 Weblogic 시스템 상태가 스레드 풀 "스레드 풀에 스레드가 고착되었습니다"에 대해 불만을 표시합니다. 우리는 이미 웹 로직, 데이터베이스 서버를 다시 시작하고 새 배포를 만든

<Error> <WebLogicServer> <BEA-000337> <[STUCK] ExecuteThread: '12' for queue: 'weblogic.ke 
rnel.Default (self-tuning)' has been busy for "641" seconds working on the request "weblogic.servlet.internal.ServletReq 
[email protected][ 
GET /default/default/applicationPreloader/load.do?_=1331887527968 HTTP/1.1 
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 
Accept: */* 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip, deflate 
x-requested-with: XMLHttpRequest 
Referer: http://novintegweb01.eu.acme.net:9136/default/default/applicationPreloader.do 
Cookie: JSESSIONID1=NhBdPv9Hx8Wj5lnr5vnGhLSbR2GGM1DPhqT2YGzWCGFvhN3WJWVH!700169023!1391220923 
Connection: Keep-Alive 
Proxy-Client-IP: 192.168.1.1 
X-Forwarded-For: 192.168.1.1 
X-WebLogic-KeepAliveSecs: 30 
X-WebLogic-Request-ClusterInfo: true 
x-weblogic-cluster-hash: G4kGT1kfuDBbtj5w//SYNt6hlVo 

]", which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace: 
     java.net.SocketInputStream.socketRead0(Native Method) 
     java.net.SocketInputStream.read(SocketInputStream.java:129) 
     oracle.net.ns.Packet.receive(Packet.java:293) 
     oracle.net.ns.DataPacket.receive(DataPacket.java:104) 
     oracle.net.ns.NetInputStream.getNextPacket(NetInputStream.java:315) 
     oracle.net.ns.NetInputStream.read(NetInputStream.java:260) 
     oracle.net.ns.NetInputStream.read(NetInputStream.java:185) 
     oracle.net.ns.NetInputStream.read(NetInputStream.java:102) 
     oracle.jdbc.driver.T4CSocketInputStreamWrapper.readNextPacket(T4CSocketInputStreamWrapper.java:124) 
     oracle.jdbc.driver.T4CSocketInputStreamWrapper.read(T4CSocketInputStreamWrapper.java:80) 
     oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1136) 
     oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1113) 
     oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:288) 
     oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191) 
     oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523) 
     oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) 
     oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1009) 
     oracle.jdbc.driver.OraclePreparedStatement.executeForRowsWithTimeout(OraclePreparedStatement.java:10117) 
     oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10221) 
     oracle.jdbc.driver.OracleStatementWrapper.executeBatch(OracleStatementWrapper.java:216) 
     weblogic.jdbc.wrapper.PreparedStatement.executeBatch(PreparedStatement.java:210) 
     org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:48) 
     org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:247) 
     org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:93) 
     org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:88) 
     org.hibernate.jdbc.AbstractBatcher.prepareBatchStatement(AbstractBatcher.java:223) 
     org.hibernate.persister.collection.AbstractCollectionPersister.recreate(AbstractCollectionPersister.java:1119) 
     org.hibernate.action.CollectionRecreateAction.execute(CollectionRecreateAction.java:39) 
     org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279) 
     org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263) 
     org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:171) 
     org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298) 
     org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27) 
     org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1001) 
     org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:339) 
     org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106) 
     org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:656) 
     org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) 
     org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) 
     org.springframework.transaction.interceptor.TransactionAspectSupport.commitTransactionAfterReturning(TransactionAspectSupport.java:393) 
     org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:120) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
     com.acme.superproject.dao.CertificationDaoImpl$$EnhancerByCGLIB$$bf3135a5.getById(<generated>) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.determineTargetDateFromWs(UserProfileSabaServiceImpl.java:436) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.determineTargetDate(UserProfileSabaServiceImpl.java:401) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.createCertificationRelationObject(UserProfileSabaServiceImpl.java:373) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.getRequiredLearning(UserProfileSabaServiceImpl.java:334) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.extractUserProfile(UserProfileSabaServiceImpl.java:203) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.getUserProfile(UserProfileSabaServiceImpl.java:73) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl.getUserProfile(UserProfileSabaServiceImpl.java:114) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl$$FastClassByCGLIB$$e48c61c9.invoke(<generated>) 
     net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) 
     org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
     org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80) 
     com.acme.superproject.techarch.TracingAspect.trace(TracingAspect.java:31) 
     sun.reflect.GeneratedMethodAccessor5382.invoke(Unknown Source) 
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     java.lang.reflect.Method.invoke(Method.java:597) 
     org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) 
     org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) 
     org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
     com.acme.superproject.integration.UserProfileSabaServiceImpl$$EnhancerByCGLIB$$5d7b85df.getUserProfile(<generated>) 
     com.acme.superproject.service.UserProfileServiceImpl.getUserProfile(UserProfileServiceImpl.java:26) 
     com.acme.superproject.service.UserProfileServiceImpl$$FastClassByCGLIB$$70cfe815.invoke(<generated>) 
     net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149) 
     org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
     org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80) 
     com.acme.superproject.techarch.TracingAspect.trace(TracingAspect.java:31) 
     sun.reflect.GeneratedMethodAccessor5382.invoke(Unknown Source) 
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     java.lang.reflect.Method.invoke(Method.java:597) 
     org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621) 
     org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) 
     org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89) 
     org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
     org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621) 
     com.acme.superproject.service.UserProfileServiceImpl$$EnhancerByCGLIB$$5bcb212b.getUserProfile(<generated>) 
     com.acme.superproject.web.session.SessionDataProvider.fetchUserProfile(SessionDataProvider.java:97) 
     com.acme.superproject.web.session.SessionDataProvider.getUserProfile(SessionDataProvider.java:78) 
     com.acme.superproject.web.session.SessionDataProvider.fetchUserRegistrationCollection(SessionDataProvider.java:155) 
     com.acme.superproject.web.session.SessionDataProvider.getUserRegistrationCollection(SessionDataProvider.java:141) 
     com.acme.superproject.web.ApplicationPreloaderController.loadAction(ApplicationPreloaderController.java:84) 
     sun.reflect.GeneratedMethodAccessor6506.invoke(Unknown Source) 
     sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
     java.lang.reflect.Method.invoke(Method.java:597) 
     org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:426) 
     org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:414) 
     org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) 
     org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) 
     org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644) 
     org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549) 
     javax.servlet.http.HttpServlet.service(HttpServlet.java:707) 
     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:300) 
     weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) 
     weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
     org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368) 
     org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) 
     org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) 
     org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
     org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) 
     org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
     org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
     org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
     org.springframework.security.web.authentication.preauth.AbstractPreAuthenticatedProcessingFilter.doFilter(AbstractPreAuthenticatedProcessingFilter.java:89) 
     org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
     org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
     org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380) 
     org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169) 
     org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
     org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
     weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
     org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) 
     org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) 
     weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56) 
     weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715) 
     weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681) 
     weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
     weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
     weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277) 
     weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183) 
     weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454) 
     weblogic.work.ExecuteThread.execute(ExecuteThread.java:207) 
     weblogic.work.ExecuteThread.run(ExecuteThread.java:176) 
> 

다음과 같이

로그 파일의 스택 추적이 보인다. 문제는 항상 동일합니다. 응용 프로그램의 로그인 페이지에 액세스하려고하면 DB 트랜잭션을 수행하는 동안 볼 수있는 한 끊습니다.

"Oracle SQL Developer"를 사용하여 데이터베이스에 연결하려고하면 "ORA-00257 : 아카이버 오류 : 내부 연결 만 해제 될 때까지"오류가 발생합니다. 불행히도 우리는 SYSDBA 권한이 없습니다 (외부 공급자가 관리하기 때문에).

내 질문은 다음과 같습니다

  • 당신의 사람이 전에 비슷한 문제가 있었나요?
  • 이러한 문제의 근본 원인은 응용 프로그램 측면 이상입니까, 아니면 DB 측면입니까?
  • 적어도 붙어있는 스레드를 제거하려면 어떻게해야합니까?
+0

DB 서버의 연결이 끊어져있는 것으로 보입니다. – Zaki

답변

2

데이터베이스 저장소가 가득 차거나 아카이버가 새 보관 로그를 이동하거나 만들 수 없을 가능성이 있습니다. 이것은 거의 확실히 데이터베이스 레벨의 문제이며 앱 서버 레벨의 문제는 아닙니다. 이 메시지를 받으면 데이터베이스에 이미 연결되어 있으므로 연결되어 있지 않고 기다리는 중입니다.

WebLogic의 스턱 스레드가 반드시 '고정'될 필요는 없으며 항상 문제가되는 것은 아닙니다. 스턱 스레드 메커니즘의 목적은 스레드가 비정상적으로 오랜 시간 (데이터베이스 액세스와 같은) 작업을 수행 할 때 사용자에게 알려주는 것입니다. 막힌 스레드 알림은 바로 그 것입니다. 즉, 뭔가 올바르지 않을 수도 있다는 알림이며,이 경우에는 그 용도로 사용됩니다.

일을하기 위해 일상적으로 20 분이 걸리는 스레드가 있는데 25 분 이상 걸리는 경우 알림을 받으려면 Stuck Thread Limit을 25 분으로 늘려야하고 그 시점에 알림을 받아야합니다. 600 초 ~ 1500 초 (25 * 60)로 제한하십시오.

weblogic admin base_domain> 환경> 서버> 관리 서버> 구성/조정에서 중단 된 스레드 제한을 편집 할 수 있습니다.

은 아래 링크를 참조하십시오 오라클 DB 서버 개발자 환경에서는 VirtualBox에있을 때 우리는이 문제를 직면 https://docs.oracle.com/cd/E19316-01/820-3745/ghudn/index.html

+0

어떻게 멈춤 스레드 한도를 25 * 60으로 늘릴 수 있습니까? – victorio

0

이것은 데이터베이스의 문제인 것 같습니다. 스레드가 DB에 고정되어 있습니다. 당신의 성능이 저하 된 것 같습니다. 더 많은 조사를 위해 귀하의 DBA에 사건을 회부 할 것을 제안합니다. 또한 액세스중인 테이블에서 인덱스를 다시 작성하십시오.

0

. 이 문제를 지적하는 것은 다소 어려웠습니다. ThreadPool에 더 이상 요청을 처리 할 스레드가없고 요청이 거부되었을 때이를 알았습니다.