forum.bitel.ru
http://forum.bitel.ru/

Deadlock
http://forum.bitel.ru/viewtopic.php?f=44&t=9077
Страница 1 из 1

Автор:  abu [ 25 мар 2014, 05:28 ]
Заголовок сообщения:  Deadlock

Сегодня получил deadlock на accounting-е, на что в таких случаях стОит обратить внимание при работе биллинга? show innodb status прилагаю.

Код:
accounting 03-25/03:25:18 ERROR [accwrkr-6-p-12-t-1] WorkerTask - com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting tra
ru.bitel.bgbilling.common.BGException: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
        at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.flush(SessionFlushingManager.java:415)
        at ru.bitel.bgbilling.modules.inet.accounting.Accounting.sessionFinish(Accounting.java:1591)
        at ru.bitel.bgbilling.modules.inet.accounting.InetConnectionCallRuntime.finish(InetConnectionCallRuntime.java:372)
        at ru.bitel.bgbilling.modules.inet.accounting.InetConnectionCallRuntime.tryFinish(InetConnectionCallRuntime.java:340)
        at ru.bitel.bgbilling.modules.inet.accounting.worker.SessionFinishWorker.runImpl(SessionFinishWorker.java:112)
        at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
        at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317)
        at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
        at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLTransactionRollbackException: Deadlock found when trying to get lock; try restarting transaction
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.Util.getInstance(Util.java:386)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1064)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3609)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3541)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2002)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2163)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2427)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2345)
        at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2330)
        at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105)
        at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.merge(SessionFlushingManager.java:901)
        at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.flush(SessionFlushingManager.java:361)
        ... 15 more



Информация о версии:

Клиент: вер. 6.0 сборка 1301 от 06.03.2014 16:48:33
os: Linux; java: Java HotSpot(TM) Server VM, v.1.6.0_35
Сервер: вер. 6.0 сборка 1697 от 11.03.2014 16:54:01
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.6.0_35

assist вер. 6.0 сборка 105 от 05.02.2014 15:53:10
bill вер. 6.0 сборка 342 от 05.02.2014 19:11:42
card вер. 6.0 сборка 226 от 05.02.2014 15:53:15
dba вер. 6.0 сборка 168 от 05.02.2014 15:53:37
enaza вер. 6.0 сборка 75 от 05.02.2014 15:53:46
gorod вер. 6.0 сборка 169 от 05.02.2014 15:53:47
inet вер. 6.0 сборка 1353 от 11.03.2014 17:16:59
mps вер. 6.0 сборка 210 от 24.02.2014 20:25:19
npay вер. 6.0 сборка 223 от 05.02.2014 15:55:06
paylinks вер. 6.0 сборка 34 от 05.02.2014 15:55:07
qiwi вер. 6.0 сборка 41 от 05.02.2014 15:55:21
rentsoft вер. 6.0 сборка 59 от 05.02.2014 15:55:46
reports вер. 6.0 сборка 210 от 05.02.2014 15:55:46
rscm вер. 6.0 сборка 192 от 05.02.2014 15:55:48
ru.bitel.bgbilling.plugins.cladr вер. 6.0 сборка 121 от 05.02.2014 15:55:14
ru.bitel.bgbilling.plugins.dispatch вер. 6.0 сборка 102 от 06.03.2014 16:49:16
trayinfo вер. 6.0 сборка 176 от 05.02.2014 15:55:51
wellpay вер. 6.0 сборка 38 от 05.02.2014 15:56:19
wm вер. 6.0 сборка 191 от 05.02.2014 15:56:42
yamoney вер. 6.0 сборка 65 от 05.02.2014 15:56:43

Вложения:
status.txt [17.78 КБ]
Скачиваний: 402

Автор:  Amir [ 25 мар 2014, 14:12 ]
Заголовок сообщения:  Re: Deadlock

Если достаточно редко возникает (например, до нескольких раз в час) - то не страшно.
https://dev.mysql.com/doc/refman/5.0/en ... locks.html

InnoDB uses automatic row-level locking. You can get deadlocks even in the case of transactions that just insert or delete a single row. That is because these operations are not really “atomic”; they automatically set locks on the (possibly several) index records of the row inserted or deleted.
Always be prepared to re-issue a transaction if it fails due to deadlock. Deadlocks are not dangerous. Just try again.

Другое дело, если постоянно возникает. Тогда желательно еще сохранить вывод jstack <PID>, а потом пробовать перезапускать.

Автор:  abu [ 25 мар 2014, 15:10 ]
Заголовок сообщения:  Re: Deadlock

За полтора года - впервые и однократно. jstack нужно в какой-то определенный момент запускать или в любое время после возникновения ошибки?

Автор:  stark [ 25 мар 2014, 15:34 ]
Заголовок сообщения:  Re: Deadlock

abu писал(а):
За полтора года - впервые и однократно. jstack нужно в какой-то определенный момент запускать или в любое время после возникновения ошибки?


Желательно сразу после возникновения ошибки.

Автор:  abu [ 25 мар 2014, 18:27 ]
Заголовок сообщения:  Re: Deadlock

Если deadlock'и будут повторяться и отловится актуальный jstack, отпишусь в этой теме.
Спасибо за ответы.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/