配置logback会损耗多少性能?
<logger name="org.hibernate" level="WARN" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.type" level="TRACE" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.pretty.Printer" level="DEBUG" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.persister.entity.AbstractEntityPersister" level="ERROR" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate" level="WARN" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.type" level="TRACE" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.pretty.Printer" level="DEBUG" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.SQL" level="DEBUG" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
<logger name="org.hibernate.persister.entity.AbstractEntityPersister" level="ERROR" additivity="false">
<appender-ref ref="SqlLogLogger" />
</logger>
实际测试,配置前使用hibernate单条操作数据大概在20-60ms,配置后140-300ms,实测功能性能下降了6-7倍。在这里打一个基线,hibernate操作一条数据的速度应该在100ms以下。
配置上了之后,这种问题很难查,不过stuck里面有线索:
which is more than the configured time (StuckThreadMaxTime) of "600" seconds. Stack trace:
ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:211)
ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:103)
ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:88)
ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:48)
ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:280)
ch.qos.logback.classic.Logger.callAppenders(Logger.java:267)
ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:449)
ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:403)
ch.qos.logback.classic.Logger.trace(Logger.java:453)
org.hibernate.type.descriptor.sql.BasicBinder.bind(BasicBinder.java:82)
org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:283)
org.hibernate.type.AbstractStandardBasicType.nullSafeSet(AbstractStandardBasicType.java:278)
org.hibernate.type.AbstractSingleColumnStandardBasicType.nullSafeSet(AbstractSingleColumnStandardBasicType.java:89)
org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:2184)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2558)
org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2494)
org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2821)
org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)
org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
com.xxxx.common.appservice.EntityManager.updateEntity(EntityManager.java:121)