logback日志导致的性能问题

文章描述了在Java项目中,由于logback日志框架的同步写入导致的性能问题。作者通过jstack分析发现大量线程在等待日志写入,分析源码后确认是日志输出的加锁操作造成。解决方案是改用logback的异步日志输出,以提高系统性能。文章强调了jstack工具在定位此类问题的重要性以及注意日志输出细节的必要性。
摘要由CSDN通过智能技术生成

菜鸟第一次写博客,只为自己平时遇到的问题做个记录,如有不对之处请指正!

项目场景:

现场发现有个程序执行一段时间之后会出现响应超时的问题,日志看似乎是程序出现了莫名的停顿。


问题描述

折腾了很久之后决定看看堆栈信息。通过在出现问题时执行jstack得到了堆栈信息:
在这里插入图片描述
在这里插入图片描述
可以看到有1005个线程在等待0x00000006e7e680e0对象,只有一个线程拥有该对象。

原因分析:

通过阅读logback框架的源码发现,这里的写日志操作是加锁的,所以造成了性能瓶颈。在这里插入图片描述


解决方案:

修改logbcak配置,使用框架提供的异步输出代替同步输出。

<!-- 
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于 logback 使用遇到问题与解决问题记录,我会尽力回答你的问题。 首先,你需要了解 logback 是一个开源的 Java 日志框架,它是由 log4j 作者 Ceki Gülcü 所开发的。logback 具有高效、灵活、可扩展等特点,是目前 Java 开发中广泛应用的日志框架之一。 接下来,我会回答你可能遇到的一些问题,并提供相应的解决方案。 1. logback 配置文件无法加载或者加载不正确怎么办? 这可能是因为配置文件的路径设置不正确导致的。你可以检查一下配置文件的路径是否正确,或者将配置文件放在 classpath 下,这样可以保证 logback 能够正确加载配置文件。 2. 如何设置日志输出的级别? logback 支持多种级别的日志输出,包括 TRACE、DEBUG、INFO、WARN、ERROR 等。你可以在配置文件中设置 rootLogger 的 level 属性来控制日志的输出级别,例如: ``` <root level="INFO"> <appender-ref ref="CONSOLE" /> </root> ``` 这里将日志输出级别设置为 INFO。 3. 如何将日志输出到文件中? logback 提供了多种输出方式,其中包括将日志输出到文件中。你可以在配置文件中添加一个 fileAppender,然后将日志输出到指定的文件中,例如: ``` <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>logs/app.log</file> <append>true</append> <encoder> <pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern> </encoder> </appender> <root level="INFO"> <appender-ref ref="FILE" /> </root> ``` 这里将日志输出到文件 logs/app.log 中。 4. 如何使用 logback 进行异步日志输出? logback 支持异步日志输出,可以提高日志输出的性能。你可以在配置文件中添加一个 asyncAppender,然后将日志输出到 asyncAppender 中,例如: ``` <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"> <queueSize>512</queueSize> <discardingThreshold>0</discardingThreshold> <appender-ref ref="FILE" /> </appender> <root level="INFO"> <appender-ref ref="ASYNC" /> </root> ``` 这里将日志输出到 asyncAppender 中,使用异步方式输出。 以上是 logback 使用中常见的问题及解决方案,希望能对你有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值