学习中心
登录
1
logback异步日志console输出卡住线程

线上环境工作线程一直处于waiting状态,由于logback的blockingqueue满了,put方法卡住

"canal-client-thread" #59 prio=5 os_prio=0 tid=0x0000558212421800 nid=0x40 waiting on condition [0x00007f4e922d0000]
   java.lang.Thread.State: WAITING (parking)
	at sun.misc.Unsafe.park(Native Method)
	- parking to wait for  <0x0000000526478450> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
	at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
	at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
	at java.util.concurrent.ArrayBlockingQueue.put(ArrayBlockingQueue.java:353)
	at ch.qos.logback.core.AsyncAppenderBase.putUninterruptibly(AsyncAppenderBase.java:181)
	at ch.qos.logback.core.AsyncAppenderBase.put$original$z3FUGxqA(AsyncAppenderBase.java:172)
	at ch.qos.logback.core.AsyncAppenderBase.put$original$z3FUGxqA$accessor$YIMQ9wbm(AsyncAppenderBase.java)
	at ch.qos.logback.core.AsyncAppenderBase$auxiliary$0CoMSm8Z.call(Unknown Source)
	at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:86)
	at ch.qos.logback.core.AsyncAppenderBase.put(AsyncAppenderBase.java)
	at ch.qos.logback.core.AsyncAppenderBase.append(AsyncAppenderBase.java:161)
	at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84)
	at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
	at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:270)
	at ch.qos.logback.classic.Logger.callAppenders(Logger.java:257)
	at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:421)
	at ch.qos.logback.classic.Logger.filterAndLog_1(Logger.java:398)
	at ch.qos.logback.classic.Logger.info(Logger.java:583)
	at com.uniedu.ecp.datacenter.sync.canal.client.mq.AbstractMQProducer.sendMsg(AbstractMQProducer.java:10)
	at com.uniedu.ecp.datacenter.sync.canal.client.handler.MQMessageHandler.lambda$handleMessage$0(MQMessageHandler.java:24)
	at com.uniedu.ecp.datacenter.sync.canal.client.handler.MQMessageHandler$$Lambda$711/935909985.accept(Unknown Source)
	at java.util.ArrayList.forEach(ArrayList.java:1257)
	at com.uniedu.ecp.datacenter.sync.canal.client.handler.MQMessageHandler.handleMessage(MQMessageHandler.java:24)
	at com.uniedu.ecp.datacenter.sync.canal.client.handler.MQMessageHandler.handleMessage(MQMessageHandler.java:15)
	at com.uniedu.ecp.datacenter.sync.canal.client.client.AbstractCanalClient.pullMessage(AbstractCanalClient.java:67)
	at com.uniedu.ecp.datacenter.sync.canal.client.client.AbstractCanalClient.process(AbstractCanalClient.java:50)
	at com.uniedu.ecp.datacenter.sync.canal.client.client.AbstractCanalClient$$Lambda$602/971228384.run(Unknown Source)
	at java.lang.Thread.run(Thread.java:748)

logback的blockingqueue消费者线程一直处于runnable状态,但是卡在FileOutputStream.writeBytes方法

"AsyncAppender-Worker-ASYNC_CONSOLE_APPENDER" #41 daemon prio=5 os_prio=0 tid=0x0000558210705800 nid=0x2f runnable [0x00007f4e963f6000]
   java.lang.Thread.State: RUNNABLE
	at java.io.FileOutputStream.writeBytes(Native Method)
	at java.io.FileOutputStream.write(FileOutputStream.java:326)
	at java.io.BufferedOutputStream.write(BufferedOutputStream.java:122)
	- locked <0x0000000523305d00> (a java.io.BufferedOutputStream)
	at java.io.PrintStream.write(PrintStream.java:480)
	- locked <0x00000005231f29b8> (a java.io.PrintStream)
	at java.io.FilterOutputStream.write(FilterOutputStream.java:97)
	at ch.qos.logback.core.joran.spi.ConsoleTarget$1.write(ConsoleTarget.java:37)
	at ch.qos.logback.core.OutputStreamAppender.writeBytes(OutputStreamAppender.java:199)
	at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:231)
	at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:102)
	at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:84)
	at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:51)
	at ch.qos.logback.core.AsyncAppenderBase$Worker.run(AsyncAppenderBase.java:290)
jstack_20210902.log
1090 1
    1个回答
    写回答