2013-06-05 61 views
0

由於我認爲阻塞了線程,所以在生產中的性能有一個問題。被阻塞的線程在WebLogic上等待logback SiftingAppender

當我線程的生產環境我很驚訝轉儲線程的大約50%都在狀態:

- 阻止試圖獲取鎖:CH/QOS /的logback /經典/篩選/ SiftingAppender @ 0x1111fe3e8 [解鎖]

同時,正如你所看到的,SiftingAppender是'解鎖'的。

我不知道爲什麼發生了。

如果我們深入的logback的來源,我們會發現有這是一個同步的方法的「薄」的地方,我想:

ch.qos.logback.core.AppenderBase.doAppend(E) 

public synchronized void doAppend(E eventObject) { 
    // WARNING: The guard check MUST be the first statement in the 
    // doAppend() method. 

    // prevent re-entry. 
    if (guard) { 
     return; 
    } 

    try { 
     guard = true; 

     if (!this.started) { 
     if (statusRepeatCount++ < ALLOWED_REPEATS) { 
      addStatus(new WarnStatus(
       "Attempted to append to non started appender [" + name + "].", 
       this)); 
     } 
     return; 
     } 

     if (getFilterChainDecision(eventObject) == FilterReply.DENY) { 
     return; 
     } 

     // ok, we now invoke derived class' implementation of append 
     this.append(eventObject); 

    } catch (Exception e) { 
     if (exceptionCount++ < ALLOWED_REPEATS) { 
     addError("Appender [" + name + "] failed to append.", e); 
     } 
    } finally { 
     guard = false; 
    } 
    } 

這裏是2個不同的線程完整的堆棧:

"[ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'" id=25 idx=0x68 tid=29025 prio=5 alive, blocked, native_blocked, daemon 
-- Blocked trying to get lock: ch/qos/logback/classic/sift/[email protected][unlocked] 
at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method) 
at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1411)[optimized] 
at jrockit/vm/Locks.lockFat(Locks.java:1512)[optimized] 
at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1054)[optimized] 
at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1005)[optimized] 
at ch/qos/logback/core/AppenderBase.doAppend(AppenderBase.java:65)[optimized] 
at ch/qos/logback/core/spi/AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)[inlined] 
at ch/qos/logback/classic/Logger.appendLoopOnAppenders(Logger.java:280)[inlined] 
at ch/qos/logback/classic/Logger.callAppenders(Logger.java:267)[inlined] 
at ch/qos/logback/classic/Logger.buildLoggingEventAndAppend(Logger.java:449)[inlined] 
at ch/qos/logback/classic/Logger.filterAndLog_1(Logger.java:421)[inlined] 
at ch/qos/logback/classic/Logger.info(Logger.java:611)[inlined] 
at cz/bsc/g6/components/base/web/services/api/exception/ServiceImplLoggingAndExceptionWebTranslationAspect.logAfter(ServiceImplLoggingAndExceptionWebTranslationAspect.java:167)[inlined] 
at sun/reflect/GeneratedMethodAccessor672.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)[optimized] 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[optimized] 
at java/lang/reflect/Method.invoke(Method.java:597)[optimized] 
at org/springframework/aop/aspectj/AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)[inlined] 
at org/springframework/aop/aspectj/AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:603)[inlined] 
at org/springframework/aop/aspectj/AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:45)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/framework/adapter/MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/interceptor/ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/framework/JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)[optimized] 
at $Proxy538.getVoLinkValue(Ljava/lang/Class;Ljava/lang/String;)Lcz/bsc/g6/components/base/web/services/api/vo/catalog/VoLink;(Unknown Source)[optimized] 
at cz/bsc/g6/components/hccommon/web/ui/component/PortalMenuComponent.getItemName(PortalMenuComponent.java:112)[inlined] 
at cz/bsc/g6/components/hccommon/web/ui/component/PortalMenuComponent.getMenuItems(PortalMenuComponent.java:46)[optimized] 
at sun/reflect/GeneratedMethodAccessor1005.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source)[optimized] 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[optimized] 
at java/lang/reflect/Method.invoke(Method.java:597)[optimized] 
at javax/el/BeanELResolver.getValue(BeanELResolver.java:305)[optimized] 
at com/sun/faces/el/DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)[inlined] 
at com/sun/faces/el/DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)[optimized] 
at com/sun/el/parser/AstValue.getValue(AstValue.java:138)[inlined] 
at com/sun/el/parser/AstValue.getValue(AstValue.java:183)[optimized] 
at com/sun/el/ValueExpressionImpl.getValue(ValueExpressionImpl.java:224)[optimized] 
at com/sun/faces/facelets/el/TagValueExpression.getValue(TagValueExpression.java:109)[optimized] 
at com/sun/faces/facelets/tag/jstl/core/IndexedValueExpression.getValue(IndexedValueExpression.java:92) 
... 
-- end of trace 

"pool-4050-thread-2" id=19383 idx=0x8a8 tid=17037 prio=5 alive, blocked, native_blocked 
-- Blocked trying to get lock: ch/qos/logback/classic/sift/[email protected][unlocked] 
at jrockit/vm/Threads.waitForUnblockSignal()V(Native Method) 
at jrockit/vm/Locks.fatLockBlockOrSpin(Locks.java:1411)[optimized] 
at jrockit/vm/Locks.lockFat(Locks.java:1512)[optimized] 
at jrockit/vm/Locks.monitorEnterSecondStageHard(Locks.java:1054)[optimized] 
at jrockit/vm/Locks.monitorEnterSecondStage(Locks.java:1005)[optimized] 
at ch/qos/logback/core/AppenderBase.doAppend(AppenderBase.java:65)[optimized] 
at ch/qos/logback/core/spi/AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)[inlined] 
at ch/qos/logback/classic/Logger.appendLoopOnAppenders(Logger.java:280)[inlined] 
at ch/qos/logback/classic/Logger.callAppenders(Logger.java:267)[inlined] 
at ch/qos/logback/classic/Logger.buildLoggingEventAndAppend(Logger.java:449)[inlined] 
at ch/qos/logback/classic/Logger.filterAndLog_1(Logger.java:421)[inlined] 
at ch/qos/logback/classic/Logger.info(Logger.java:611)[optimized] 
at cz/bsc/g6/components/base/transform/container/AbstractTransformerProvidersContainer.resolveProviderFromToInstance(AbstractTransformerProvidersContainer.java:377)[optimized] 
at cz/bsc/g6/components/base/transform/AbstractToTransformer.transformToClass(AbstractToTransformer.java:241) 
at cz/bsc/g6/components/card/ws/resources/impl/WsCreditCardDao.getCreditCards(WsCreditCardDao.java:103) 
at cz/bsc/g6/components/card/manager/impl/CreditCardManagerImpl.getCreditCards(CreditCardManagerImpl.java:22) 
at sun/reflect/GeneratedMethodAccessor2279.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source) 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[optimized] 
at java/lang/reflect/Method.invoke(Method.java:597)[inlined] 
at org/springframework/aop/support/AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)[optimized] 
at org/springframework/aop/framework/JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)[optimized] 
at $Proxy286.getCreditCards()Ljava/util/List;(Unknown Source) 
at cz/bsc/g6/components/card/web/services/impl/CreditCardWebServiceImpl.getCreditCards(CreditCardWebServiceImpl.java:54) 
at sun/reflect/GeneratedMethodAccessor2277.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source) 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[optimized] 
at java/lang/reflect/Method.invoke(Method.java:597)[optimized] 
at org/springframework/aop/support/AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)[inlined] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)[inlined] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)[optimized] 
at org/springframework/aop/aspectj/MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80) 
at cz/bsc/g6/components/base/web/services/impl/ServiceCallWrapperAspect.wrapCall(ServiceCallWrapperAspect.java:36) 
at sun/reflect/GeneratedMethodAccessor1514.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;(Unknown Source) 
at sun/reflect/DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[optimized] 
at java/lang/reflect/Method.invoke(Method.java:597)[inlined] 
at org/springframework/aop/aspectj/AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)[optimized] 
at org/springframework/aop/aspectj/AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610) 
at org/springframework/aop/aspectj/AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65) 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:161)[optimized] 
at org/springframework/transaction/interceptor/TransactionInterceptor.invoke(TransactionInterceptor.java:110)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/aspectj/AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/aspectj/AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/framework/adapter/MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:50)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/interceptor/ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)[optimized] 
at org/springframework/aop/framework/ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[optimized] 
at org/springframework/aop/framework/JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)[optimized] 
at $Proxy527.getCreditCards()Ljava/util/List;(Unknown Source) 
at cz/bsc/g6/components/card/web/ui/component/CreditCardListComponent.updateCreditCardsList(CreditCardListComponent.java:65) 
at cz/bsc/g6/components/hccommon/web/ui/component/ProductListContainerComponent$2.run(ProductListContainerComponent.java:107) 
at cz/bsc/g6/components/hccommon/web/ui/system/MultiThreadingUtility$G6Thread.call(MultiThreadingUtility.java:60) 
at cz/bsc/g6/components/hccommon/web/ui/system/MultiThreadingUtility$G6Thread.call(MultiThreadingUtility.java:42) 
at java/util/concurrent/FutureTask$Sync.innerRun(FutureTask.java:303) 
at java/util/concurrent/FutureTask.run(FutureTask.java:138) 
at java/util/concurrent/ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java/util/concurrent/ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java/lang/Thread.run(Thread.java:662) 
at jrockit/vm/RNI.c2java(JJJJJ)V(Native Method) 
-- end of trace 

我們使用weblogic v.10.3.5.0 slf4j.version - 1.7.5 logback.version - 1.0.13

有沒有人想過爲什麼會發生以及如何避免這個問題?

Logback.xml

<?xml version="1.0" encoding="UTF-8" ?> 

<property scope="system" name="logRoot" value="/opt/BSCPraha/GEMINI/IBS/logs" /> 

<appender name="COMMON" class="ch.qos.logback.classic.sift.SiftingAppender"> 
    <discriminator class="ch.qos.logback.classic.sift.MDCBasedDiscriminator"> 
     <key>SOURCE_APP</key> 
     <defaultValue>common</defaultValue> 
    </discriminator> 
    <sift> 
     <appender name="FILE-${SOURCE_APP}" 
      class="ch.qos.logback.core.rolling.RollingFileAppender"> 
      <file>${logRoot}/hc-${SOURCE_APP}.log 
      </file> 
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
       <fileNamePattern>${logRoot}/hc-${SOURCE_APP}-%d{yyyy.MM.dd_HH}-%i.log 
       </fileNamePattern> 
       <timeBasedFileNamingAndTriggeringPolicy 
        class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
        <maxFileSize>1000MB</maxFileSize> 
       </timeBasedFileNamingAndTriggeringPolicy> 
      </rollingPolicy> 
      <encoder> 
       <pattern>%d{ISO8601} [%t] %-5p %c{1} [%X{sessionId}] [%X{requestIp}] - %m%n</pattern> 
       <immediateFlush>false</immediateFlush> 
      </encoder> 
     </appender> 
    </sift> 
</appender> 

<!-- webstart module logger --> 
<logger name="cz.bsc.g6.components.starter.webstart" additivity="false"> 
    <level value="info" /> 
</logger> 

<!-- logging the XML interaction (calling Webservices of ESB) --> 
<logger name="cz.bsc.g6.components.base.ws.resources.impl"> 
    <level value="debug" /> 
</logger> 

<logger name="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"> 
    <level value="debug" /> 
</logger> 

<logger name="cz.bsc.g6"> 
    <level value="debug" /> 
</logger> 

<!-- Logging EI data --> 
<logger 
    name="cz.bsc.g6.components.base.ei.services.impl.EiwsEndpoint.request"> 
    <level value="debug" /> 
</logger> 

<logger 
    name="cz.bsc.g6.components.base.ei.services.impl.EiwsEndpoint.response"> 
    <level value="info" /> 
</logger> 

<!-- log SQL query --> 
<logger name="org.hibernate.SQL"> 
    <level value="info" /> 
</logger> 

<!-- log SQL query parameters values --> 
<logger name="org.hibernate.engine.QueryParameters"> 
    <level value="info" /> 
</logger> 
<logger name="org.hibernate.engine.query.HQLQueryPlan"> 
    <level value="info" /> 
</logger> 

<root> 
    <level value="info" /> 
    <appender-ref ref="COMMON" /> 
</root> 

+0

你可以發佈你的logback.xml配置文件以及? – Ceki

回答

0

是日誌被保存在NFS掛載? 設置所有的調試信息,然後讓我知道:)