博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
容器打印日志到控制台阻塞的排障
阅读量:6209 次
发布时间:2019-06-21

本文共 3605 字,大约阅读时间需要 12 分钟。

今日生产环境发现有些容器停止响应了,但是容器没有死,docker exec -it <container-name> /bin/bash也能正常使用。

在容器内部使用jstack <pid>发现log4j2的Console Appender一直处于运行状态:

"AsyncAppender-asyncConsole" #21 daemon prio=5 os_prio=0 tid=0x00007fd968d07000 nid=0x1f runnable [0x00007fd91bffd000]   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 <0x00000000f002b408> (a java.io.BufferedOutputStream)    at java.io.PrintStream.write(PrintStream.java:480)    - locked <0x00000000f002b3e8> (a java.io.PrintStream)    at org.apache.logging.log4j.core.util.CloseShieldOutputStream.write(CloseShieldOutputStream.java:53)    at org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:262)    - locked <0x00000000f021d848> (a org.apache.logging.log4j.core.appender.OutputStreamManager)    at org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:294)    - locked <0x00000000f021d848> (a org.apache.logging.log4j.core.appender.OutputStreamManager)    at org.apache.logging.log4j.core.appender.OutputStreamManager.drain(OutputStreamManager.java:351)    at org.apache.logging.log4j.core.layout.TextEncoderHelper.drainIfByteBufferFull(TextEncoderHelper.java:260)    - locked <0x00000000f021d848> (a org.apache.logging.log4j.core.appender.OutputStreamManager)    at org.apache.logging.log4j.core.layout.TextEncoderHelper.writeAndEncodeAsMuchAsPossible(TextEncoderHelper.java:199)    at org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeChunkedText(TextEncoderHelper.java:159)    - locked <0x00000000f021d848> (a org.apache.logging.log4j.core.appender.OutputStreamManager)    at org.apache.logging.log4j.core.layout.TextEncoderHelper.encodeText(TextEncoderHelper.java:58)    at org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:68)    at org.apache.logging.log4j.core.layout.StringBuilderEncoder.encode(StringBuilderEncoder.java:32)    at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:220)    at org.apache.logging.log4j.core.layout.PatternLayout.encode(PatternLayout.java:58)    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:177)    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:170)    at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:161)    at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)    at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)    at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)    at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)    at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.callAppenders(AsyncAppender.java:459)    at org.apache.logging.log4j.core.appender.AsyncAppender$AsyncThread.run(AsyncAppender.java:412)

但用docker logs -f <container-name>没有发现有新的日志输出,且访问该应用肯定会输出日志的接口也是没有任何日志输出,因此怀疑log4j2阻塞住了。

Google到有人在log4j提出了类似了问题,官方给出的解释是问题出在log4j2之外。

于是查一下logback是否也有类似问题,找到,同样给出的解释是问题出在logback之外。

两个问题的共通点都是用docker运行,于是把应用直接进程方式运行,没有出现问题。

于是Google搜索docker logging to stdout hangs,找到SO的这个,以及这个,解决方案将Docker升级到18.06。

查看生产环境的docker版本是18.03,升级到18.09后问题解决。

转载地址:http://cozja.baihongyu.com/

你可能感兴趣的文章
Template、ItemsPanel、ItemContainerStyle、ItemTemplate
查看>>
MySQL:Innodb page clean 线程 (二) :解析
查看>>
图嵌入综述 (arxiv 1709.07604) 译文五、六、七
查看>>
垃圾回收算法优缺点对比
查看>>
正则表达式 匹配常用手机号 (13、15\17\18开头的十一位手机号)
查看>>
GitLab 11.9 正式发布,自动化工具 ChatOps 已开源
查看>>
交换机的基本原理配置(一)
查看>>
android baidupush
查看>>
Lottie 站在巨人的肩膀上实现 Android 酷炫动画效果
查看>>
Linux_异常_08_本机无法访问虚拟机web等工程
查看>>
“陪护机器人”研报:距离真正“陪护”还差那么一点
查看>>
深入框架本源系列 —— Virtual Dom
查看>>
mongodb分布式集群搭建手记
查看>>
您有一个上云锦囊尚未领取!
查看>>
Java Web的web.xml文件作用及基本配置(转)
查看>>
区块链101:区块链的应用和用例是什么?
查看>>
马约拉纳费米子:推动量子计算的“天使粒子”
查看>>
瑞立视:厚积薄发且具有“工匠精神”的中国品牌
查看>>
git与svn的区别 ?Git 与 SVN那个更好?
查看>>
使用ActionTrail Python SDK
查看>>