最近,我们正在对流行的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 Bug –减慢您的应用程序相关推荐

  1. 微信翻译出Bug上热搜,程序员又背锅?

    作者| 伍杏玲 来源 | 程序人生(ID:coder_life) 60s测试:你是否适合转型人工智能? https://edu.csdn.net/topic/ai30?utm_source=cxrs_ ...

  2. log4j 程序日志_Log4j错误–减慢您的应用程序

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

  3. 微信翻译生日快乐的代码_微信翻译出 Bug 上热搜,程序员又背锅?!

    天撸了!昨天微信翻译因为出Bug被网友送上热搜,网友质疑微信在翻译明星内容时,结果是近乎"恶搞". 当输入:"you play basketball like caixu ...

  4. 在Tomcat 与weblogic 中的 日志(log4j) 配置系列二(weblogic 应用程序使用log4j)

    前言 在Tomcat 与weblogic 中的 日志(log4j) 配置系列一 在系列一 中, 有一个问题一直没有解决,就是部署到weblogic 中应用程序如何通过log4j写日志到文件中? 这里仅 ...

  5. 微信翻译出 Bug 上热搜,程序员又背锅?!

    天撸了!昨天微信翻译因为出Bug被网友送上热搜,网友质疑微信在翻译明星内容时,结果是近乎"恶搞". 当输入:"you play basketball like caixu ...

  6. 软件测试:用“bug”来表示“在电脑程序里的错误”

    计算机基础知识 计算机(personal computer)俗称电脑(pc),是现代一种用于高速计算的电子机器,可以进行数值计算,又可以进行逻辑判断,还具有存储记忆功能,且能够按照程序的运行,自动.高 ...

  7. uniapp动态显示数组_【报Bug】uniapp 在小程序中 动态修改添加 数组 数据 ,点击获取的索引值错误...

    在微信小程序中会有这个问题,h5正常 在 v-for数组列表 同时 :key 值没有用下标设置,而是用其它设置 ,会导致 动态添加数组内容 ,点击列表 获取的 列表下标 错误 重现步骤 {{title ...

  8. 【本人秃顶程序员】求求你别再写 bug 了,秃顶程序员告诉你避免空指针的 5 个案例!

    ←←←←←←←←←←←← 快!点关注 空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题. 本文,栈长将带你了解什么是空指针,还有如何有效的避免空指针. 什 ...

  9. 日常BUG总结:另一个程序已锁定文件的一部分,进程无法访问 打不开磁盘

    晚上电脑自行关机,第二天再次开机,打开VMware,出现如下错误: 另一个程序已锁定文件的一部分,进程无法访问 打不开磁盘"E:\Ubuntu\Ubuntu 64 位.vmdk"或 ...

最新文章

  1. lvs服务器需要开启web服务么_如何检测 Web 服务请求丢失问题
  2. 从一次react异步setState引发的思考
  3. 人月神话阅读笔记02
  4. 2.4-虚拟磁盘恢复虚拟机
  5. Docker网络和服务发现
  6. flask框架创建数据库定义字段类型和字段常用参数
  7. 把一张合成图分拆出各个小图
  8. 1106 Lowest Price in Supply Chain(甲级)
  9. pycharm和pythonIDE安装详解
  10. vue——vuex mapState,mapGetters,mapMutations,mapActions
  11. CoffeeScript简介 二
  12. 应对亚洲劳动力成本不断上升的挑战
  13. markdown 本地链接_markdown多平台发布及七牛图床使用
  14. Vue学习笔记(四)
  15. Request 获取网址各片段
  16. 怎么样测试需要登录的接口?需要登录的接口怎么测试性能?
  17. 《人月神话》之外科手术队伍
  18. X265代码学习1-X265源码下载编译及VS调试配置
  19. 23Bootstrap
  20. 自己实现SDIO wifi Marvell8801/Marvell88w8801驱动 介绍(一) ---- 芯片介绍

热门文章

  1. M. Monster Hunter(树形dp)
  2. SoundHound Inc. Programming Contest 2018[C. Ordinary Beauty]
  3. 练习利用LSTM实现手写数字分类任务
  4. JavaFX UI控件教程(四)之Button
  5. JAVA面试常考系列三
  6. Git操作常用的命令都在这里了
  7. (九)Spring 事务开发、事务属性详解
  8. 第六章连接和分组查询
  9. mysql---批量插入数据:100w条数据
  10. 可视化大屏设计尺寸_可视化大屏设计_酷炫不是最高效的大屏展示的唯一标准...