log4j 程序日志

最近,我们正在对流行的SaaS应用程序进行故障排除。 该应用程序间歇性地变慢。 要从问题中恢复,必须重新启动应用程序。 在高流量期间,此应用有时会变慢。 有时在交通繁忙时也是如此。 没有凝聚力模式。

这类应用程序变慢并重新启动的过程持续了一段时间。 然后,我们开始解决问题。 我们发现了一些有趣的东西,以为您也可以从我们的发现中受益,因此撰写了本文。

技术栈

这个流行的SaaS应用程序在Azure云上运行。 下面是它的技术堆栈:

+ Spring框架

+ GlassFish应用服务器

+ Java 8

+ Azure云

故障排除

得知此问题后,我们就在发生减速时从该应用程序捕获了线程转储。 有多种捕获线程转储的选项 ; 我们选择了“ jstack”工具来捕获线程转储。

注意:发生问题时,正确获取线程转储非常重要。 在问题持续时间窗口之外捕获的线程转储将无用。

现在,我们将捕获的线程转储上传到fastThread.io –在线线程转储分析工具。 该工具立即生成了此精美报告 。 (我们建议您单击超链接以查看生成的报告,以便获得第一手的经验)。

该报告立即缩小了问题的根本原因。 fastThread.io工具突出显示“ http-nio-8080-exec-121”线程正在阻止134个应用程序线程。 下面是传递依赖关系图,显示了已阻塞的线程:


图:fastThread.io显示了已阻塞线程的传递依赖关系

从该图可以看到134个应用程序线程被“ http-nio-8080-exec-121”线程阻塞(第一个从左侧开始)。 当我们单击图中的“ http-nio-8080-exec-121”超链接时,它会打印线程的堆栈跟踪:


图:http-nio-8080-exec-121获得的org.apache.log4j.Logger锁

我要求您仔细查看堆栈跟踪中突出显示的部分。 您可以看到线程获得org.apache.log4j.Logger锁,然后继续前进以将日志记录写入Azure云存储。

现在,让我们看一下“ http-nio-8080-exec-56”线程(134个被阻塞的线程之一)的堆栈跟踪:


图:http-nio-8080-exec-56等待获得org.apache.log4j.Logger锁

看一下上面堆栈跟踪中突出显示的部分。 它正在等待获取org.apache.log4j.Logger锁。 您可以看到'http-nio-8080-exec-56'线程处于BLOCKED状态,因为'http-nio-8080-exec-114'获得了org.apache.log4j.Logger锁并且没有释放它。

其余的134个线程也被卡住,等待'org.apache.log4j.Logger'锁。 因此,无论何时任何应用程序线程尝试登录,它都会进入此BLOCKED状态。 因此,134个应用程序线程结束进入此BLOCKED状态。

然后,我们用google搜索org.apache.log4j.Logger BLOCKED线程。 我们偶然发现了Apache Log4j错误数据库中报告的这个有趣的缺陷 。

事实证明,这是Log4J框架中的已知错误之一,也是开发新Log4j2框架的主要原因之一。 以下是该缺陷描述的有趣摘录:

没有临时解决此问题的方法,这是Log4j 2出现的原因之一。 唯一的解决方法是升级到Log4j 2。

是的,我是说Log4j 2中的代码有很大不同,并且锁定的处理方式也有很大不同。 根记录器或附加器循环上没有锁。

由于该错误,任何试图登录的线程都进入了“阻塞”状态。 这导致整个应用程序停止运行。 将应用程序从Log4j迁移到Log4j2框架后,问题得到解决。

结论

1. Log4j已于2015年8月达到停产(已停产)。不再受支持。 如果您的应用程序仍在使用Log4J框架,我们强烈建议您升级到Apache Log4j2框架。 这是迁移指南 。 Log4j2不仅仅是Log4j框架的下一版本; 这是一个从头开始编写的新框架。 它具有许多性能改进。

2.此外,现在您还可以学习如何对无响应的应用程序进行故障排除。

翻译自: https://www.javacodegeeks.com/2020/01/log4j-bug-slows-down-your-app.html

log4j 程序日志

log4j 程序日志_Log4j错误–减慢您的应用程序相关推荐

  1. c语言程序中的错误可分为,C语言程序常见错误与调试方法(1)

    <C语言程序常见错误与调试方法(1)>由会员分享,可在线阅读,更多相关<C语言程序常见错误与调试方法(1)(17页珍藏版)>请在人人文库网上搜索. 1.C语言程序常见错误与调试 ...

  2. Zabbix监控之检测程序日志中错误发生的次数

    最近开发人员提了一个新的监控需求,当一个日志文件中出现的错误的次数增加时(日志文件中的错误关键字出现数量增加)则触发报警. 我觉得这是一个无聊的问题,问题之所以无聊,是因为该问题本身就具有局限性(自己 ...

  3. 安装计算机一级出现appcrash,appcrash,详细教您运行程序出现appcrash错误该如何解决...

    电脑在使用中会运行各种软件,在运行使用中难免会遇到各种错误问题,最近有用户在操作电脑中运行程序时出现APPCRASH错误提示,导程序件无法正常运行工作,出现这种程序错误问题该如何解决呢?下面,小编就来 ...

  4. Log4j Bug –减慢您的应用程序

    最近,我们正在对流行的SaaS应用程序进行故障排除. 该应用程序间歇性地减慢了速度. 要从问题中恢复,必须重新启动应用程序. 在高流量期间,此应用有时会变慢: 有时在交通繁忙时也是如此. 没有凝聚力模 ...

  5. log4j 程序日志_使用log4j监视和筛选应用程序日志到邮件

    log4j 程序日志 在今天的帖子中,我将向您展示如何将日志语句过滤为警告电子邮件. 这是出于监视我正在处理的一个应用程序的一些关键点的需要. 您可以使用一些工具来执行应用程序监视. 我不会详细介绍这 ...

  6. 安装程序未能打开日志文件_桌面安装工具日志记录错误的说明 - Office 365 | Microsoft Docs...

    Microsoft 365 桌面安装程序工具日志记录错误的说明 2020/9/8 适用于: Microsoft 365 本文内容 原始 KB 数:   2404500 当您尝试使用 Microsoft ...

  7. log4j 禁止类输出日志_log4j 2过滤spring日志遇到的问题

    在项目中使用testng写单元测试,使用log4j输出日志,spring的日志也被打印出来,在调试的时候看到一片一片的spring日志很烦,总是要找自己的输出日志. 这样式的~~~ 找了一下log4j ...

  8. log4j 压缩日志_Spring Boot 日志各种使用姿势,是时候捋清楚了!

    来自公众号:江南一点雨 1. Java 日志概览 1.1 总体概览 1.2 日志级别 1.3 综合对比 1.4 最佳实践 2. Spring Boot 日志实现 2.1 Spring Boot 日志配 ...

  9. 使用Log4j进行日志操作(牛小浩)不错的

    使用Log4j进行日志操作   一.Log4j简介   (1)概述 Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是 ...

最新文章

  1. CAP只能三选二,可以选CA吗?
  2. 使用stm32的ADC得到准确的电压
  3. cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件
  4. 【Kotlin】Kotlin 类的继承 二 ( 属性覆盖 | 属性覆盖的四种情况 | 常量 / 变量 属性覆盖 | 子类初始化与属性覆盖 )
  5. JAVA学习笔记(8)
  6. 根据上边栏和下边栏的高度进行布局
  7. (转)关于数据库存储过程分页DatagridView BindingNavigator 控件的详细实现
  8. 数据结构和算法———P2 算法概述
  9. 帧栈使用的基本用法c语言,栈帧详解
  10. 过去一年,被我们“高估”的技术清单
  11. UVA10258 ZOJ1837 Contest Scoreboard【结构排序】
  12. java开发利器 eclipse从入门到精通 pdf_Java从入门到精通(第4版)高清PDF下载
  13. 2023届计算机毕业设计源码
  14. 破解Excel受保护文件
  15. 倾斜摄影三维建模全流程
  16. java-php-python-ssm新生报到管理系统计算机毕业设计
  17. 支付宝支付成功之后的接口_继支付宝微信之后,51信用卡还款也开始收费了,手续费再创新高...
  18. Ubuntu安装运行YOLOV3 解决opencv报错 No package ‘opencv‘ found
  19. 无线MESH自组网系统
  20. Android发送消息的核心代码,Android 抖音 发消息Call 调用 实现群发消息 代码hook源码...

热门文章

  1. Gym 102798A Golden Spirit
  2. 牛客题霸 两数之和C++题解/答案
  3. [AtCoder Grand Contest 048] D - Pocky Game(区间dp + 博弈)
  4. 【无码专区12】子集和(背包dp)
  5. P8215-[THUPC2022 初赛]分组作业【网络流】
  6. 【2018.3.24】模拟赛之四-ssl2548 旋转【暴力模拟】
  7. POJ2560-雀斑(Freckles)【图论,并查集,最小生成树,KURUSKAL】
  8. HDU5126 stars(4维偏序->cdq套cdq+树状数组)
  9. 【结论】Number(jzoj(gz) 1781)
  10. HDU1812 - Count the Tetris