问题描述:

最近已经有两个项目因为日志打印问题而引发了故障,可以说是血的教训了。两次故障的原因也是非常的相似,都是由于其他业务系统调用了另外一个老系统的接口,但是由于传递的参数不正确,而老系统会因为参数不正确而打印日志。当错误的请求量增大,打印日志会造成当前线程阻塞,容易使机器机器负载升高,产生性能问题

排查方法:

1. 直接查看机器上日志大小

2. 还可以通过Jstack查看 占用cpu最多的线程,多查看几次,如果每次都是打印日志的线程,那基本上也可以确定是打印日志的问题

解决方案:

1. 提前校验参数,如果参数有问题应该抛出异常

2. 在logback的AsyncAppender中配置<neverBlock>true</neverBlock> 避免业务线程的阻塞

<!-- 异步输出 --><appender name ="STDOUT_ASYNC" class= "ch.qos.logback.classic.AsyncAppender"><discardingThreshold >0</discardingThreshold><queueSize>512</queueSize><includeCallerData>false</includeCallerData><neverBlock>true</neverBlock><appender-ref ref ="stdout"/></appender>

Logback的neverBlock原理:

由于logback相当于是生产者-消费者模式,当时我们在系统中ogger.info()或者ogger.error()时,是把日志信息加入到logback的队列中,默认是调用队列的put方法,而当队列满了之后,就会阻塞当前的线程。而设置了neverBlock后,则会调用offer方法,如果队列满了,则丢弃。可以查看源码:

转载于:https://www.cnblogs.com/hello---word/p/10987006.html

因打印日志而引发的故障相关推荐

  1. fastreport调用frf文件直接打印_打印日志时 Logback 内部都做了些什么

    文 | 百川 on 资产管理 一.引言 Logback 是一个优秀的开源日志框架,我们很多项目都使用它来记录日志.实际使用时,通常仅需要一行语句即可记录相应的日志信息,如 logger.info(&q ...

  2. 打印日志的10个建议

    2019独角兽企业重金招聘Python工程师标准>>> 1,工欲善其事,必先利其器 很多程序员可能都忘了记录应用程序的行为和当前活动是多么重要.有的人很高兴的就在代码里加上了这么句: ...

  3. Postgres 数据库大批量单表导入数据引发性能故障的处理

    因公司经营管理策略原因,我们地区部门还是以开发外包和产品服务为主,对测试外包服务销售工作要求占比不高,而测试部门本来有四五个性能测试人员,加上老员工都比较积极做事在测试团队建设管理上不用花费太多精力. ...

  4. 【FFmpeg】打印日志函数分析(可以根据不同级别打印不同颜色的日志)

    FFmpeg的打印日志实现在FFmpeg-n4.2.1/libavutil/log.c中. 一.设置log等级 1.设置日志级别 日志默认级别是AV_LOG_INFO static int av_lo ...

  5. 别在 Java 代码里乱打日志了,这才是打印日志的正确姿势!

    本文来源:http://t.cn/E9BkD7a 使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打 ...

  6. 不能精准定位bug?可能是你没get到这几个打印日志的诀窍!

    作者:lrwinx 来源:http://t.cn/E9BkD7a 使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一. 实现方式统一使用: Logback框架 打日志的正确方 ...

  7. java SpringWeb如何实现打印日志

    今天后台调试,调用后台接口却发现没有把日志打印出来 于是开始配置打印日志 1.导入log4j的jar import org.apache.log4j.Logger; 2.配置log4j.propert ...

  8. springboot项目输入打印日志文件到本地

    springboot项目输入打印日志文件到本地 pom.xml中添加jar包: <dependency><groupId>ch.qos.logback</groupId& ...

  9. springboot aop + logback + 统一异常处理 打印日志

    springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...

  10. 启动项目的时候,一直打印日志

    前言: 今天启动项目,发现一直启动打印日志,感觉永远都跑不完的日志. 后面偶然发现,选择server,start启动可以,但是debug模式启动就一直在启动中..... 过程: 百度后,发现应该是项目 ...

最新文章

  1. 道器相融,由Angel论一个优秀机器学习平台的自我修养
  2. error C2873: “Matrix2r”: 符号不能用在 using 声明中
  3. SQL SERVER:SQLDMO库文件的组成
  4. pinpoint 安装部署
  5. java 字符串解析
  6. iPad的无纸化办公和纯纸化办公的区别和使用场景
  7. nginx绑定freenom.com域名
  8. DB and RAC(11.2.0.3 ) Patch Set Update(11.2.0.3.6 )
  9. Android中 ExpandableList的使用2
  10. iOS多线程技术—多线程简单介绍
  11. 一位同行工作6年的总结
  12. 校园卡管理系统c语言代码,基于C++的校园一卡通管理系统
  13. java多线程下载美女图片
  14. 帝国cms如何安装php模板,帝国CMS整站源码通用安装教程
  15. 求和计算机教案,初中信息技术《Excel求和》教案
  16. Linux内核中获取纳秒时间戳的方法
  17. 路由器与交换机的工作原理(转)
  18. COSCon'22 论坛集锦 1+16个论坛就等你了!
  19. “麒麟计划”携手Wish助力卖家人、货、运全面升级!
  20. Java使用quartz实现任务调度定时任务

热门文章

  1. freetype 2.11.0必须使用VS2012编译
  2. 人总有盲点,需要共同进步
  3. LINUX下载编译libspeex/libspeexdsp
  4. configure: error: Could not find cups!
  5. 运行Python时中文注释报错的解决办法
  6. java的恐怖推理游戏_胆小勿入!盘点一下2019年所有的恐怖游戏
  7. shell 字符串中是否包含任一字符串
  8. java txt 修改_java创建TXT文件并进行读、写、修改操作
  9. 实现列表CListCtrl可点击编辑
  10. 关于mysql数据库的说法错误的是_MYSQL数据库2013-2014学年考试试卷