关于serviceimpl 执行卡顿的问题,求仙人指路,已困扰几天

envinfo 2017-07-07 07:01:04
大家好,最近做一个http服务,通过json接收服务传上来的数据。
因为应用场景很简单,就直接用了dwz的现成架构,springmvc+mybatis。
以前也用过这个架构,觉得还算可以,没发现什么问题。
但是这次使用中出现奇怪的问题,我先文字描述:
不知道在什么情况下,在controller中调用service实现去执行持久化操作,就会卡顿。
用卡顿来形容不知道是否合理,也可以说挂起,或者什么,总之,通过http请求到controller再调用service实现进行数据库查询时,不会马上执行service实现类的方法,我debug发现,哪怕在实现类中第一行system.out.print(1);都不会马上执行,而是过几秒、甚至几十秒、1分钟才会继续执行并正常返回。二在卡顿的时候后台打印的内容问下图


重启服务后,不管如何调用任意controller的任意service查询任意表,都没问题,但在重启过后使用中不知道什么情况下,就会进入卡顿状态,而且一旦开始卡顿,每次请求都会卡顿。

不知道是什么原因造成的,与环境有关?事物有关?数据库等?请大神们指点一二,感激不尽~!
...全文
620 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd1431712 2020-09-24
  • 打赏
  • 举报
回复
此问题是否解决?
RockeyCui 2020-09-24
  • 打赏
  • 举报
回复
我的天,@Transactional注解加在类上,你确定你这个类下面的所有方法都需要事务啊?单表增删查改都不需要吧,只有多表增删改的时候用到吧?我感觉是事务开的太多了影响了性能
envinfo 2017-08-01
  • 打赏
  • 举报
回复
引用 12 楼 hanpoyangtitan 的回复:
[quote=引用 10 楼 u013475083 的回复:] [quote=引用 8 楼 u013475083 的回复:]
进controller不会卡,卡在controller中第一次调用service实现的地方。不管他是哪个实现类,只要是这个controller第一个执行的service实现就卡住,并且,service实现方法体不执行,哪怕是一句输出也不会执行,直到等待结束。[/quote] 你把Transactional注解去掉看看还卡吗?[/quote] 回滚机制跟这个应该没有关系吧?一直出差中,刚回来又要面对这个问题
什么都不能 2017-07-10
  • 打赏
  • 举报
回复
引用 10 楼 u013475083 的回复:
[quote=引用 8 楼 u013475083 的回复:]
进controller不会卡,卡在controller中第一次调用service实现的地方。不管他是哪个实现类,只要是这个controller第一个执行的service实现就卡住,并且,service实现方法体不执行,哪怕是一句输出也不会执行,直到等待结束。[/quote] 你把Transactional注解去掉看看还卡吗?
desen778 2017-07-10
  • 打赏
  • 举报
回复
你是说,刚启动时是正常的,运行一阶段后才会出现卡顿,而且看你说连system。out。printl都会卡顿,那么久只有一种原因了,是jvm的问题,另外刚启动的时候好好的,用一阶段才会这样,应该是资源被耗光,没被回收的问题,你看下你那个什么dwz的框架吧;肯定是这边出现了问题,造成资源一直被劫持了得不到释放;
envinfo 2017-07-10
  • 打赏
  • 举报
回复
引用 8 楼 u013475083 的回复:
进controller不会卡,卡在controller中第一次调用service实现的地方。不管他是哪个实现类,只要是这个controller第一个执行的service实现就卡住,并且,service实现方法体不执行,哪怕是一句输出也不会执行,直到等待结束。
什么都不能 2017-07-10
  • 打赏
  • 举报
回复
引用 7 楼 u013475083 的回复:
[quote=引用 6 楼 hanpoyangtitan 的回复:] [quote=引用 5 楼 u013475083 的回复:] [quote=引用 4 楼 hanpoyangtitan 的回复:] 前面有个selectProvince方法 因事务隔离级别是required会阻塞当前线程操作
感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。 但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。[/quote] 你把selectProvince先去掉试试[/quote] 不是这一个方法的问题,只要一出现卡顿,访问哪个service都一样,这个是最基础的login [/quote] 你不是debug过吗?进controller会卡吗?
envinfo 2017-07-10
  • 打赏
  • 举报
回复
envinfo 2017-07-10
  • 打赏
  • 举报
回复
引用 6 楼 hanpoyangtitan 的回复:
[quote=引用 5 楼 u013475083 的回复:]
[quote=引用 4 楼 hanpoyangtitan 的回复:]
前面有个selectProvince方法 因事务隔离级别是required会阻塞当前线程操作

感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。
但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。[/quote]
你把selectProvince先去掉试试[/quote]
不是这一个方法的问题,只要一出现卡顿,访问哪个service都一样,这个是最基础的login
什么都不能 2017-07-10
  • 打赏
  • 举报
回复
引用 5 楼 u013475083 的回复:
[quote=引用 4 楼 hanpoyangtitan 的回复:] 前面有个selectProvince方法 因事务隔离级别是required会阻塞当前线程操作
感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。 但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。[/quote] 你把selectProvince先去掉试试
envinfo 2017-07-10
  • 打赏
  • 举报
回复
引用 4 楼 hanpoyangtitan 的回复:
前面有个selectProvince方法 因事务隔离级别是required会阻塞当前线程操作
感谢,最开始我认为是事物的问题,之前设置的是PROPAGATION_REQUIRES_NEW,挂起。 但后面改成了PROPAGATION_REQUIRED新建事物,这样还是不正确,请指点。
什么都不能 2017-07-07
  • 打赏
  • 举报
回复
前面有个selectProvince方法 因事务隔离级别是required会阻塞当前线程操作
envinfo 2017-07-07
  • 打赏
  • 举报
回复
继续呼唤,这个问题不解决睡不着觉
envinfo 2017-07-07
  • 打赏
  • 举报
回复
都下班了吗?周五系不系都嗨去了,难道只有我在加班么,呼唤乡亲们
envinfo 2017-07-07
  • 打赏
  • 举报
回复
补充一下,一旦进入问题状态,假如我同一个http请求三次,那么会输出三次上图中倒数两行日志。而在等待时间过后,三个service实现类则同时执行;假如我这个请求是insert一个user,service中查询库表来验证用户名不得重复,但出现以上情况时,则三条相同的user会在卡顿后同时insert成功,而不经过任何验证,也就是说,三条记录的insert是同时进行

81,114

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧