菜鸟第一次写博客,只为自己平时遇到的问题做个记录,如有不对之处请指正!
项目场景:
现场发现有个程序执行一段时间之后会出现响应超时的问题,日志看似乎是程序出现了莫名的停顿。
问题描述
折腾了很久之后决定看看堆栈信息。通过在出现问题时执行jstack得到了堆栈信息:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/00ee4e3be26a61cfe4f29cb1fec35b69.png)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3390f3fc999c68e91cb8058adf5f0678.png)
可以看到有1005个线程在等待0x00000006e7e680e0对象,只有一个线程拥有该对象。
原因分析:
通过阅读logback框架的源码发现,这里的写日志操作是加锁的,所以造成了性能瓶颈。![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6cdc8a94e3ce276aa3cffaf792551c0d.png)
解决方案:
修改logbcak配置,使用框架提供的异步输出代替同步输出。
<!--