forum.bitel.ru http://forum.bitel.ru/ |
|
Ошибка во время Month break http://forum.bitel.ru/viewtopic.php?f=5&t=5840 |
Страница 1 из 1 |
Автор: | focus [ 01 сен 2011, 12:16 ] |
Заголовок сообщения: | Ошибка во время Month break |
Здравствуйте. Ситуация следующая: ночью сегодня BGRadius на границе месяцев выполнял сброс сессий (Month break). Некоторое количество клиентов скинул нормально. Далее, я предполагаю, Radius обрабатывал ответы от NAS'ов и съел максимальное количество коннектов к БД, которые ему отведены (это 1500). В течении 20 минут он их все 1500 держал активными (radius.sh status так показывал). innotop не показывал бешеной загрузки и медленных запросов. В логах BGRadius много вот таких ошибок: Код: radius 09-01/00:02:59 ERROR [radiusListener-p-3-t-732] ServerUtils - java.lang.NullPointerException at ru.bitel.bgbilling.server.util.ServerUtils.closeConnection(ServerUtils.java:659) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.run(RadiusListenerWorker.java:138) 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) Как будто closeConnection пытается закрыть con = null А ещё До предыдущей ошибки были вот такие Exception Код: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3593) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2111) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2407) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2325) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2310) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.j at bitel.billing.server.contract.bean.BalanceUtils.setContractAccount(BalanceUtils.java:216) at bitel.billing.server.dialup.bean.DialUpSessionUtils.setContractAccountFromSessionAccount(DialUp at ru.bitel.bgbilling.modules.dialup.radius.DialUpNasConnection.stopConnectionImpl(DialUpNasConnec at ru.bitel.bgbilling.modules.dialup.radius.DialUpNasConnection.stopConnection(DialUpNasConnection at ru.bitel.bgbilling.modules.dialup.radius.DialUpNas.doSessionStop(DialUpNas.java:594) at ru.bitel.bgbilling.modules.dialup.radius.DialUpNas.stopConnection(DialUpNas.java:568) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accounting(RadiusProcessor.java:456) at ru.bitel.bgbilling.modules.dialup.radius.DialUpRadiusProcessor.accounting(DialUpRadiusProcessor at ru.bitel.bgbilling.modules.dialup.radius.DialUpRadiusProcessor.accounting(DialUpRadiusProcessor at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accountingRequest(RadiusProcessor.java at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.run(RadiusListenerWorker.java:176 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) jstack не показал блокировок. Прошу помочь разобраться с ошибкой. P.S. Помимо этого в коде, класса ConnectionBreaker есть такие строки Код: while (Setup.getSetup().getMasterPoolLoad() > 0.2D) { ((DialUpSessionRealtime)con.getSession()).addLogInfo("Month break skip by database load"); sleep(random.nextInt(5000)); } Может тут предусмотреть количество попыток для проверки, а то в подобном случае можно говорить о бесконечном цикле. |
Автор: | Администратор [ 02 сен 2011, 11:55 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
"Month break skip by database load" - а эту фразу в connection.log бросал? |
Автор: | focus [ 06 сен 2011, 09:41 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
Да бросал и очень много раз. Т.е он зашёл в этот цикл и там остался "жить" - все выделенные коннекты к базе были исчерпаны. |
Автор: | snark [ 06 сен 2011, 15:26 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
У меня глюков нет когда Код: кол-во коннектов к БД > auth.thread.count + acct.thread.count
|
Автор: | focus [ 07 сен 2011, 09:54 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
snark писал(а): Код: кол-во коннектов к БД > auth.thread.count + acct.thread.count тоже количество коннектов больше |
Автор: | snark [ 07 сен 2011, 13:06 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
А в мускуле сколько коннектов разрешено? Не К мускулу а В самом мускуле? |
Автор: | focus [ 07 сен 2011, 14:06 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
4500 |
Автор: | focus [ 03 окт 2011, 06:10 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
Проблема повторяется. На границе месяцtв Month break начинает работать. 1. В логике Month break есть момент, где проверяется загрузка БД. Если количество активных коннектов > 20% от максимального, то заморозить thread на некоторое время. 2. Далее все коннекты, отведенные для Radius, заканчиваются и далее НЕ ЗАКРЫВАЮТСЯ! 3. В итоге происходит бесконечный цикл! Уважаемые разработчики! Обратите внимание на эту проблему, пожалуйста. |
Автор: | focus [ 03 окт 2011, 06:10 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
Проблема повторяется. На границе месяцtв Month break начинает работать. 1. В логике Month break есть момент, где проверяется загрузка БД. Если количество активных коннектов > 20% от максимального, то заморозить thread на некоторое время. 2. Далее все коннекты, отведенные для Radius, заканчиваются и далее НЕ ЗАКРЫВАЮТСЯ! 3. В итоге происходит бесконечный цикл! Уважаемые разработчики! Обратите внимание на эту проблему, пожалуйста. |
Автор: | Администратор [ 10 окт 2011, 12:44 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
Привет. У вас же 5.1 версия? Код: auth.thread.count=300 acct.thread.count=200 Вот это число потоков уменьшите до 20 и 30, больше смыслу нет. Чтобы сглаживать колебание увеличьте размер очереди пакетов авторизации и аккаунтинга. До 200 и 300, например. auth.thread.queue и acct.thread.queue http://www.bgbilling.ru/v5.1/doc/ch13s0 ... l#d0e12831 Эти параметры с 5.1 вообще не нужны: Код: auth.thread.must.be.free.count=30
acct.thread.must.be.free.count=50 |
Автор: | focus [ 11 окт 2011, 07:52 ] |
Заголовок сообщения: | Re: Ошибка во время Month break |
Да, 5.1. Цитата: Вот это число потоков уменьшите до 20 и 30, больше смыслу нет. Чтобы сглаживать колебание увеличьте размер очереди пакетов авторизации и аккаунтинга. До 200 и 300, например. auth.thread.queue и acct.thread.queue Спасибо. Попробуем. О результатах напишу. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |