DAO : Dao是通过继承SqlSessionSupport,通过getSqlSession()来获取session对象, 然后调用selectList方法进行查询数据;
mysql : 开启了慢日志, 慢日志的时间为1秒;
现在我用300个线程来访问一个完整的功能, 这300个线程运行一段时间之后, 有一部分执行了几百次, 但是有一部分只执行一次;通过调试,最后发现在调用selectList方法的时候, 会被阻塞, 并且没有sql出现在慢日志中(可以排除sql的问题), 这个有人遇到过没有?
出问题的代码如下(有):
SqlSession session = getSqlSession();
List<Integer> idList = new ArrayList<Integer>();
idList.add(1);
//这一个函数有时候会执行几百秒的时间
List<Object> list = session.selectList("Dao.getList", idList);
并且如果业务复杂的话,基本不会出现这样的问题, 只有很简单的那种业务才会出现这种问题
MySQL
MyBatis
你用的啥连接池?另外你开启了300个线程同时去查一个线程执行多少次呢?,你的mysql配置最大支持多少连接。。。。。。
阻塞了可能是在等待连接池
线程数量太多,连接数更多,cpu忙着切换线程去了,没时间执行任务了
朋友,jstack 一下不就知道了?连接池设置了多少个。
引用来自“北极心”的评论
你用的啥连接池?另外你开启了300个线程同时去查一个线程执行多少次呢?,你的mysql配置最大支持多少连接。。。。。。
上面的朋友的意见也都很好都可以去排查下,另外还有可优化的地方就是连接池换换,比如HikariCP 或者Druid都可以,用法和你的dbcp都差不多
除了连接池,看看这个sql是不是需要优化。。。
mysql的最大连接数是3000,应用的最大活跃连接是1000
问题有jie jue ma