连接池打满,导致页面夯住
1、背景生产环境中访问系统,页面延迟卡顿
2、排产思路
1)、查看日志是排查问题的第一要素(个人认为);查看日志发现使用com.alibaba.druid.pool设置最大连接数为100,已经被打满;既然100连接相对较小,将连接数扩大到1000,重启项目后访问页面流畅的运行中,到此解决问题。。。
大概又过了一天再来访问,又报连接池最大连接数已使用完。。。
2)、使用jps、jstack打印线程栈或者使用java监视工具,发现线程一直在等待锁的释放
进一步查看资源拥有者后
发现线程一直卡在logback打印日志上获取不到资源
查看源代码发现,log日志在写入时会将数据锁住,也就是日志并不是并发打印,结合打印的代码,获取第三方资源时将返回的数据都丢到log中、且发现在生产环境中使用mybatis也放开打印了sql执行数据,这将会对系统造成灾难性的压力
总结:日志是查看问题的标准,当日志使用不规范时也会对系统造成压力过大,定义一个好的日志规范是一个公司必不可少的;当然页面夯住的问题还有其它很多情况,比如出现死循环了,导致jvm不停的在进行垃圾回收也是会出现夯住的问题,具体问题还得具体排查