forum.bitel.ru http://forum.bitel.ru/ |
|
Память BGInetAccounting http://forum.bitel.ru/viewtopic.php?f=44&t=8541 |
Страница 1 из 1 |
Автор: | Cromeshnic [ 08 окт 2013, 07:47 ] |
Заголовок сообщения: | Память BGInetAccounting |
BGInetAccounting стал непредсказуемо кушать много памяти. Начал разбираться. Первое, что сделал - разделил на 2 аккаунтинга: для Flow и для Radius. Но радиус-аккаунтинг меньше кушать не стал. Смотрю дамп, Biggest Objects - вижу в радиус-аккаунтинге 1 объект FlowAgentInterfaceMap размером 217MB Вложение: Он такой большой, т.к. у меня 13 устройств, у каждого из которых очень много интерфейсов, а без указания flow.agent.link в этот объект попадают все интерфейсы устройства. Вопрос, зачем этот объект вообще создаётся, если у меня в inet-accounting.xml относительно flow прописана только детализация: Код: <context name="collector"> <context name="detail"> <!-- Cоздание обработчика flow детализации --> <bean name="detailWorker" class="ru.bitel.bgbilling.modules.inet.accounting.detail.InetDetailWorker"/> </context> </context> ? |
Автор: | Cromeshnic [ 08 окт 2013, 07:53 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Указал пока что в конфиге типа устройства radius : Код: flow.agent.link={@deviceId}:0 - просто, чтобы создавалось меньше объектов. Правда не уверен, как повлияет на детализацию. Указал и перегрузил конфигурацию в 10:40 : Вложение: Бум! |
Автор: | Cromeshnic [ 08 окт 2013, 08:00 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Вот график за последние 2 недели. От чего зависят эти скачки, я так и не понял. Иногда через пару дней после рестарта аккаунтинга всё устаканивается до следующего рестарта. Вложение:
|
Автор: | Cromeshnic [ 08 окт 2013, 08:01 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Вот ещё непонятная картинка: Вложение:
|
Автор: | Cromeshnic [ 14 окт 2013, 13:03 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Интересно, что после в течение нескольких дней, если сервер не рестартовать, то память постепенно освобождается. Вложение: Access так себя не ведёт, только Accounting радиуса. |
Автор: | Cromeshnic [ 14 окт 2013, 13:16 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
А вот так себя ведут сервера при одновременном подключении новых клиентов: заведение сервисов на договорах и авторизация пачками по ~20 штук (делаем скриптом перенос клиентов с роутера на роутер). Удивляют пики памяти у Accounting +300MB при таком переводе. Хорошо хоть, что освобождает быстро. Вложение: Моменты подключений клиентов видно по зелёным полоскам Start и Accept - пакетов |
Автор: | Amir [ 14 окт 2013, 14:41 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Покажите, пожалуйста, скрипт переноса - возможно какой-то определенный метод влияет на скачок. Просто при создании сервиса же нет такого скачка? |
Автор: | Cromeshnic [ 14 окт 2013, 14:57 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Так скрипт отрабатывает в контексте сервера - это динамический глобальный скрипт поведения. Единственно, если он через события как-то влияет. |
Автор: | Amir [ 14 окт 2013, 16:25 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Да, думаю через события. Возможно что-то перечитывать из БД начинает. Возможно какое-то перечитывание не оптимизировано. |
Автор: | Amir [ 14 окт 2013, 17:58 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Может быть вызывается Перечитать конфигурацию на серверах (InetReloadEvent)? |
Автор: | Cromeshnic [ 15 окт 2013, 07:34 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Порылся - не вызывается. Вызываются devicePortUpdate и inetServUpdate. |
Автор: | Cromeshnic [ 15 окт 2013, 08:37 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
А вот ещё какая штука - решил пересчитать текущий месяц по всем договорам - получил ошибку памяти BGInetAccounting: Код: mq 10-15/11:17:29 ERROR [Thread-47266] InetRecalculateEventProcessor - java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: Java heap space at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) at java.util.concurrent.FutureTask.get(FutureTask.java:83) at ru.bitel.bgbilling.modules.inet.accounting.recalculate.InetRecalculateEventProcessor$Recalculator$1.run(InetRecalculateEventProcessor.java:350) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.OutOfMemoryError: Java heap space at com.mysql.jdbc.MysqlIO.nextRowFast(MysqlIO.java:1676) at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1434) at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2936) at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477) at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2631) at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1800) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2221) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2624) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2127) at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2293) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at ru.bitel.bgbilling.modules.inet.accounting.recalculate.SessionRecalculateTarifficationManager.initDetailPSAndRS(SessionRecalculateTarifficationManager.java:624) at ru.bitel.bgbilling.modules.inet.accounting.recalculate.SessionRecalculateTarifficationManager.recalculate(SessionRecalculateTarifficationManager.java:228) at ru.bitel.bgbilling.modules.inet.accounting.recalculate.SessionRecalculateTarifficationManager.run(SessionRecalculateTarifficationManager.java:150) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) ... 1 more Код: ID события: system.no.memory Время регистрации события: 15.10.2013 11:17:29 Хост сервера: ... Приложению недостаточно выделенной для него памяти! Зарезервировано 1122631680 из 1431699456 (максимум) байтов памяти. Сейчас свободно: 274784904 байтов. Необходимо выделить большее количество памяти приложению. Вложение: Несмотря на ошибку, пришло письмо о завершении пересчёта: Цитата: Начисление Inet завершено
Время: 0 d 00:34:28 |
Автор: | Cromeshnic [ 15 окт 2013, 08:51 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Перед этим нашёл вот такую ошибку: Цитата: radius 10-15/11:15:35 WARN [rdsLstnr-p-8-t-9] CheckReentrantLock - Lock wait timeout (waiting next 15s) java.lang.RuntimeException: Lock wait timeout for ContractRuntime[180029]@1314377511 at ru.bitel.common.util.CheckReentrantLock.lock(CheckReentrantLock.java:42) at ru.bitel.bgbilling.kernel.contract.runtime.ContractRuntime.lock(ContractRuntime.java:104) at ru.bitel.bgbilling.kernel.contract.runtime.ContractRuntime.lock(ContractRuntime.java:111) at ru.bitel.bgbilling.modules.inet.runtime.InetServRuntime.lock(InetServRuntime.java:503) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.getNasConnectionIfExist(InetRadiusProcessor.java:1446) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.getNasConnection(InetRadiusProcessor.java:1668) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor.getNasConnection(InetRadiusProcessor.java:1615) at ru.bitel.bgbilling.modules.inet.radius.InetNas.updateConnection(InetNas.java:542) at ru.bitel.bgbilling.modules.inet.radius.InetNas.updateConnection(InetNas.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accounting(RadiusProcessor.java:588) at ru.bitel.bgbilling.kernel.network.radius.RadiusProcessor.accountingRequest(RadiusProcessor.java:519) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accountingRequest(InetRadiusListenerWorker.java:182) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accountingRequest(InetRadiusListenerWorker.java:1) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.processAccountingRequest(RadiusListenerWorker.java:271) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.processPacket(RadiusListenerWorker.java:242) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorker.runImpl(RadiusListenerWorker.java:135) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) 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: java.lang.RuntimeException: OwnerThread: Thread[accwrkr-2-p-17-t-1,5,main] at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123) at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3345) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1983) 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.flushDetailDelta(SessionFlushingManager.java:706) at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.flushDelta(SessionFlushingManager.java:557) at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.flush(SessionFlushingManager.java:428) at ru.bitel.bgbilling.modules.inet.accounting.SessionFlushingManager.runImpl(SessionFlushingManager.java:201) 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) ... 4 more - это вроде фиксили уже, мы после этого обновлялись (было обращение в HD). Других таких ошибок не было в логе, только одна. |
Автор: | Cromeshnic [ 15 окт 2013, 08:55 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Чтобы оценить объёмы: Код: recalculate 10-15/11:09:49 INFO [Thread-47266] InetServRuntimeMap - Loaded 3193 inetServs. Причём, у нас сессий на сервис мало - по одной в сутки, т.к. session timeout нет, поднимаются они на NAS-е, т.е. по факту коннекты висят месяцами. |
Автор: | Cromeshnic [ 15 окт 2013, 08:59 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Кстати, судя по коду SessionRecalculateTarifficationManager, slave-база не используется ![]() |
Автор: | Cromeshnic [ 15 окт 2013, 09:09 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
В логах BGInetAccounting вижу записи обсчёта SessionTarifficationManager только для текущей даты, хотя запускал за весь месяц. Я правильно понимаю, что предыдущие дни обсчитывает планировщик, а текущий - BGInetAccounting? |
Автор: | Cromeshnic [ 15 окт 2013, 11:27 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Есть ощущение, что при пересчёте текущего месяца, если не указывать конкретный день, то пересчитывается только текущий день. Запустил за весь месяц - выполнялось 34 минуты: Цитата: Начисление Inet завершено Время: 0 d 00:34:28 Запустил за 01.10.2013 - выполнялось 38 минут: Цитата: Начисление Inet завершено Время: 0 d 00:38:19 Перед этим я поправил все тарифы по совету Амира, чтобы появился максимальный трафик. Код: mysql> select day, count(distinct contractId) from inet_tariff_traffic_max_detail_30_201310 group by day; +-----+----------------------------+ | day | count(distinct contractId) | +-----+----------------------------+ | 1 | 1378 | | 14 | 1 | | 15 | 1378 | +-----+----------------------------+ 3 rows in set (0.09 sec) Судя по этой выборке, пересчитались действительно только 1 и 15 число (14 я тестировал превалирующий трафик на 1 договоре). Такие дела. inet вер. 5.2 сборка 1243 от 07.10.2013 17:16:53 Когда мне Бител уже зарплату будет платить, как внештатному тестеру? ![]() |
Автор: | Cromeshnic [ 15 окт 2013, 11:35 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Кстати, 01.10.2013 пересчиталось вообще без проблем - скачков памяти не заметил. |
Автор: | Cromeshnic [ 15 окт 2013, 12:56 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Насчёт скачков памяти при заведении пользователей - похоже, это мой ISGIPoEProtocolHandler - он обновляет полностью кэш имён интерфейсов при изменении интерфейса на устройстве. Буду оптимизировать. |
Автор: | Cromeshnic [ 17 окт 2013, 10:39 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Выделил баг с переобсчётом в отдельную тему: viewtopic.php?f=44&t=8589 |
Автор: | lan31 [ 28 окт 2013, 07:30 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Сервер: вер. 6.0 сборка 1603 от 18.10.2013 19:38:05 os: FreeBSD; java: OpenJDK 64-Bit Server VM, v.1.6.0_32 И это при условии того что BGInetAccounting ничего не обрабатывает, никаких newflow и никаких radius потоков к нему нет. Код: 10-27/22:45:37 WARN [Low Memory Detector] AlarmSender - Low memory - used=313046704, max=477233152
10-28/00:30:16 WARN [Low Memory Detector] AlarmSender - Low memory - used=314833304, max=477233152 10-28/02:27:56 WARN [Low Memory Detector] AlarmSender - Low memory - used=320897256, max=477233152 10-28/04:36:06 WARN [Low Memory Detector] AlarmSender - Low memory - used=327164920, max=477233152 10-28/06:30:14 WARN [Low Memory Detector] AlarmSender - Low memory - used=332898576, max=477233152 10-28/08:12:22 WARN [Low Memory Detector] AlarmSender - Low memory - used=338203960, max=477233152 |
Автор: | stark [ 29 окт 2013, 16:22 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Cromeshnic писал(а): В логах BGInetAccounting вижу записи обсчёта SessionTarifficationManager только для текущей даты, хотя запускал за весь месяц. Я правильно понимаю, что предыдущие дни обсчитывает планировщик, а текущий - BGInetAccounting? Нет . Планировщик дает задания, в переобсчитывает BGInetAccounting. |
Автор: | stark [ 29 окт 2013, 16:24 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Cromeshnic писал(а): Кстати, судя по коду SessionRecalculateTarifficationManager, slave-база не используется ![]() Давайте последовательно, вначале с памятью разберемся( обновление выложено ), а потом уже со slave-ом. slave можно будет использовать только при переобсчете прошлого, не текущего дня. |
Автор: | lan31 [ 18 ноя 2013, 09:16 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Код: 11-18/11:09:21 WARN [Low Memory Detector] AlarmSender - Low memory - used=183701096, max=238616576
11-18/11:10:00 WARN [Low Memory Detector] AlarmSender - Low memory - used=183706048, max=238616576 11-18/11:11:49 WARN [Low Memory Detector] AlarmSender - Low memory - used=183788472, max=238616576 11-18/11:13:55 WARN [Low Memory Detector] AlarmSender - Low memory - used=183851832, max=238616576 11-18/11:15:01 WARN [Low Memory Detector] AlarmSender - Low memory - used=183860720, max=238616576 11-18/11:15:01 WARN [Low Memory Detector] AlarmSender - Low memory - used=183939224, max=238616576 11-18/11:15:18 WARN [Low Memory Detector] AlarmSender - Low memory - used=183962120, max=238616576 Java Runtime: Sun Microsystems Inc. OpenJDK 64-Bit Server VM [1.6.0_32] /usr/local/openjdk6/jre Runtime name: 87413@bgb.krasinfo.ru Java endorsed dirs: /lib/endorsed:/usr/local/openjdk6/lib/endorsed OS: FreeBSD 9.1-RELEASE-p5 [amd64], file.encoding: UTF-8, user.name: root Heap sizes: current=93824k free=92843k max=1392640k Kernel version 6.0 build 1632 from 13.11.2013 17:18:28 Inet version 6.0 build 1266 from 13.11.2013 19:22:07 Radius: accounting-requests per minute start: 0; stop: 0; update: 0 access-requests per minute accept: 0; reject: 0 ignore per minute access-request: 0; accounting-update: 0 Flow listener [null:2001] flow packets in current minute: 0 Flow listener [null:9367] flow packets in current minute: 0 Flow listener [null:9368] flow packets in current minute: 0 Started: 14.11.2013 09:56:04 Uptime: 4 d 01:19:21 Memory total: 190 906 368; max: 238 616 576; free: 6 464 016 Memory pools: Non-heap memory[Code Cache]: max: 50 331 648; used: 3 737 792; peek: 3 746 432 Heap memory[PS Eden Space]: max: 88 801 280; used: 5 485 304; peek: 75 300 864 Heap memory[PS Survivor Space]: max: 262 144; used: 0; peek: 4 681 376 Heap memory[PS Old Gen]: max: 178 978 816; used: 178 975 568; peek: 178 978 808 Non-heap memory[PS Perm Gen]: max: 85 983 232; used: 26 675 824; peek: 26 678 928 Thread count: 36 Trees in cache: 0 Connections pool to Master status Idle: 2; Active: 0; maxActive: 300; maxIdle: 20 |
Автор: | Cromeshnic [ 18 ноя 2013, 10:13 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
256 - всяко мало |
Автор: | skyb [ 18 ноя 2013, 16:53 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
Cromeshnic писал(а): 256 - всяко мало всем хватит 64к(с) Билл Гейтс |
Автор: | Artur [ 28 ноя 2013, 13:23 ] |
Заголовок сообщения: | Re: Память BGInetAccounting |
skyb писал(а): Cromeshnic писал(а): 256 - всяко мало всем хватит 64к(с) Билл Гейтс 640, если точнее |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |