国外做锅炉的网站,网站访问代理在线,石家庄哪里有网站推广,用phpcms v9搭建手机网站后您没有访问该信息的权限!之前一段时间#xff0c;为我们发现的一个SaaS应用程序会间歇性地卡顿、变慢#xff0c;因为很长时间都没有定位到原因#xff0c;所以解决的办法就只能是重启。这个现象和之前我们遇到的程序变得卡顿不太一样#xff0c;因为我们发现这个应用程序不仅在高流量期间时会变慢… 之前一段时间为我们发现的一个SaaS应用程序会间歇性地卡顿、变慢因为很长时间都没有定位到原因所以解决的办法就只能是重启。这个现象和之前我们遇到的程序变得卡顿不太一样因为我们发现这个应用程序不仅在高流量期间时会变慢有时在低流量时期也会变慢。所以这令大家都很奇怪。这类应用程序的变慢重新启动之后就可以维持一段时间但是过段时间又有可能会再次出现。故障排除当我们准备排查这个问题的时候我们在应用程序速度很慢的时候尝试着捕获了这个应用程序的线程Dump。有很多种方式来捕获线程转Dump我们选择了“jstack”工具来获取。在问题发生时获得线程Dump是非常关键的然后我们将捕获的线程Dump上传到一个线上线程Dump分析工具https://fastthread.io/。该工具立即帮我们生成了一份报告。报告立即找出了问题的根本原因。分析工具上显示“http-nio-8080-exec-121”线程阻塞了100多个线程。下面是传递依赖图展示了阻塞线程:从图中可以看到100多个线程被“http-nio-8080-exec-121”线程阻塞。当我们点击图中的“http-nio-8080-exec-121”超链接时它会打印出线程的堆栈轨迹:仔细观察图中被框出来的部分你可以看到该线程已经获取到org.apache.log4j.Logger的锁正在进行其他的操作。接下来我们随便找一个被http-nio-8080-exec-121阻塞的线程看一下他的堆栈信息看一下上面堆栈跟踪中被框出来的部分。我们可以看到“http-nio-8080-exec-56”当前正处于阻塞BLOCKED状态而阻塞的原因是它正在等待获取org.apache.log4j.Logger的锁。前面我们刚刚分析过“http-nio-8080-exec-121”获得了org.apache.log4j.Logger的锁正在进行其他操作而锁并没有被释放所以其他线程想要获得锁就只能被阻塞。其余的所有被阻塞的线程也在等待获取org.apache.log4j.Logger的锁。因此每当任何应用程序线程试图记录日志时它都会因为无法获取到锁而进入阻塞状态。刚开始我们也没有太多的头绪后来我们尝试借助Google的力量然后我们用谷歌搜索了org.apache.log4j.Logger 阻塞 线程这样的关键字。我们在Apache Log4j bug数据库中偶然发现了这个有趣的Bug而且这个Bug早在2015年就被发现了。https://bz.apache.org/bugzilla/show_bug.cgi?id57714 。这是Log4J框架中已知的bug之一也是开发新的Log4j2框架的主要原因之一。由于这个bug任何试图打印日志的线程都进入了阻塞状态。它导致整个应用程序嘎然而止。一旦应用程序从Log4j迁移到Log4j2框架问题就解决了。结论Log4j已经在2015年8月开始就不再被维护了。如果您的应用程序仍在使用Log4J框架强烈建议升级到Log4j2框架。Log4j2不仅仅是Log4j框架的下一个版本它是一个从零开始编写的新框架它有很多性能改进。最后如果网站遇到程序被拖慢的问题那么也可以考虑一下这个因素。文末福利我整理了一份 280 多页的《JAVA核心面试知识整理.pdf》包含了Java 集合、Java 基础、JVM、并发编程、Spring 原理、Netty、网络、Kafka、Zookeeper、RabbitMQ、设计模式、数据库、数据结构和算法等面试题。下载方式1. 首先扫描下方二维码2. 后台回复「面试」即可获取注明仅仅作为知识分享切勿用于其它商业活动 。感谢所有技术分享者的付出。