死锁

项目遇到的死锁问题


项目假死

问题描述:
  在linux服务器中,springboot项目运行一段时间后,ps -ef|grep java发现项目进程在,但是打开日志,请求项目接口,发现服务器没有反应,好像死了一样。什么原因呢?
解决:
  问题出现后,通过 jstack 进程id 发现,出现了死锁问题。

JNI global references: 296


Found one Java-level deadlock:
=============================
"http-nio-8889-exec-34":
  waiting to lock monitor 0x00007fe2c45001d8 (object 0x0000000086bef5e8, a com.hfy.service.impl.SessionServiceImpl),
  which is held by "SockJS-1"
"SockJS-1":
  waiting to lock monitor 0x00007fe2d424ec98 (object 0x0000000086bef5c8, a com.hfy.service.impl.TokenServiceImpl),
  which is held by "SockJS-2"
"SockJS-2":
  waiting to lock monitor 0x00007fe2c45001d8 (object 0x0000000086bef5e8, a com.hfy.service.impl.SessionServiceImpl),
  which is held by "SockJS-1"

Java stack information for the threads listed above:
===================================================
"http-nio-8889-exec-34":
	at com.hfy.service.impl.SessionServiceImpl.keepAlive(SessionServiceImpl.java:114)
	- waiting to lock <0x0000000086bef5e8> (a com.hfy.service.impl.SessionServiceImpl)
	at com.hfy.PmWebSocketHandler.handleTextMessage(PmWebSocketHandler.java:85)
	- locked <0x00000000d8ca01c8> (a org.springframework.web.socket.adapter.standard.StandardWebSocketSession)
	............
"SockJS-1":
	at com.hfy.service.impl.TokenServiceImpl.deleteToken(TokenServiceImpl.java:49)
	- waiting to lock <0x0000000086bef5c8> (a com.hfy.service.impl.TokenServiceImpl)
	............
	at com.hfy.service.impl.SessionServiceImpl.sessionTimeout(SessionServiceImpl.java:96)
	- locked <0x0000000086bef5e8> (a com.hfy.service.impl.SessionServiceImpl)
	at com.hfy.service.ScheduleTask.sessionTimeout(ScheduleTask.java:75)
	.......
"SockJS-2":
	at com.hfy.service.impl.SessionServiceImpl.deleteSession(SessionServiceImpl.java:47)
	- waiting to lock <0x0000000086bef5e8> (a com.hfy.service.impl.SessionServiceImpl)
	............
	at com.hfy.service.impl.TokenServiceImpl.tokenTimeout(TokenServiceImpl.java:80)
	- locked <0x0000000086bef5c8> (a com.hfy.service.impl.TokenServiceImpl)
	at com.hfy.service.ScheduleTask.tokenTimeout(ScheduleTask.java:69)
	.......

Found 1 deadlock.

可以很清楚的看到:
  “SockJS-2”:
  TokenServiceImpl.java:80执行tokenTimeout()的时候,获得了锁<0x0000000086bef5c8>,方法执行到了SessionServiceImpl.java:47,执行deleteSession时,等待锁<0x0000000086bef5e8>
  “SockJS-1”:
  SessionServiceImpl.java:96执行sessionTimeout()的时候,获得了锁<0x0000000086bef5e8>,方法执行到了TokenServiceImpl.java:49,执行deleteToken时,等待锁<0x0000000086bef5c8>
  典型的死锁,知道问题所在,解决去了。。。。。。

Tomcat一个BUG造成CLOSE_WAIT

此问题还未遇见
http://cxytiandi.com/blog/detail/11147
http://www.cnblogs.com/saaav/p/6258831.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值