BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 21 июн 2025, 17:45

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
 Заголовок сообщения: Memory leak in InetAccess
СообщениеДобавлено: 30 дек 2012, 19:47 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Несколько дней назад в InetAccess случился OutOfMemory.
До этого он проработал примерно 11 дней под нагрузкой.
Был настроен мониторинг памяти.
За 6 дней видно, что память потихоньку утекает.(см график)
MAT показал, что больше всего памяти (234MB) скопилось в deviceConnectionMap внутри ru.bitel.bgbilling.modules.inet.access.InetConnectionManager.
Там много ConcurrentHashMap сегментов с HashEntry, значение ключей у которых очень похоже на Acct-Session-Id.
Количество сессий из суток в сутки примерно одинаковое.
Почему раздувается deviceConnectionMap? Может что-то оттуда не удаляется?
Количество HashEntry в этом deviceConnectionMap сейчас уже более 250К. Это явно ненормально.


Вложения:
Комментарий к файлу: heap usage
jvm_mem_inet_access_w.png
jvm_mem_inet_access_w.png [ 33.79 КБ | Просмотров: 5580 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 02 янв 2013, 04:22 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
В ActiveMQ нет висящих сообщений?
Обычно добавляется по событию старта сессии и удаляется по событию стопа сессии. Может быть бывают сессии с нулевой или очень маленькой длительностью? Сессии с одинаковыми Acct-Session-Id?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 03 янв 2013, 05:24 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Есть очень много попыток ошибочной авторизации, т.е. с неправильным логином или паролем. По ним идет reject и никакого аккаунтинга нет. Такие сессии нормально подчищаются?
Как отрабатывается каждый из случаев:
1. Авторизация с reject. Аккаунтинга не будет.
2. Авторизация с accept, но сессия не поднялась и аккаунтинга не будет.
3. Авторизация с accept, пришел старт, а дальше вариации:
3.1. Пришел стоп, штатное закрытие.
3.2. Сессия закрывается по таймауту.
3.3. Закрытие из GUI клиента.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 09 янв 2013, 13:49 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Вот такая неприятность еще сегодня случилась:

Код:
mq 01-09/11:25:59 ERROR [event-proc-p-2-t-1] WorkerTask - Java heap space
java.lang.OutOfMemoryError: Java heap space
        at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:39)
        at java.nio.ByteBuffer.allocate(ByteBuffer.java:312)
        at ru.bitel.bgbilling.kernel.base.server.datalog.BGDataLogReader.createBuffer(BGDataLogReader.java:42)
        at ru.bitel.bgbilling.kernel.base.server.datalog.BGDataLogReader.createBuffer(BGDataLogReader.java:1)
        at ru.bitel.bgbilling.kernel.base.server.datalog.DataLogReader.<init>(DataLogReader.java:29)
        at ru.bitel.bgbilling.kernel.base.server.datalog.BGDataLogReader.<init>(BGDataLogReader.java:27)
        at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLogReader.<init>(RadiusDataLogReader.java:18)
        at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLog.newReader(RadiusDataLog.java:35)
        at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLog.newReader(RadiusDataLog.java:1)
        at ru.bitel.bgbilling.kernel.base.server.datalog.hourly.HourlyDataLog.nextReader(HourlyDataLog.java:183)
        at ru.bitel.bgbilling.kernel.network.radius.datalog.hourly.RadiusHourlyDataLog.find(RadiusHourlyDataLog.java:50)
        at ru.bitel.bgbilling.modules.inet.runtime.RequestLogEventProcessor.addToLog(RequestLogEventProcessor.java:194)
        at ru.bitel.bgbilling.modules.inet.runtime.RequestLogEventProcessor.notify(RequestLogEventProcessor.java:133)
        at ru.bitel.bgbilling.modules.inet.runtime.RequestLogEventProcessor.notify(RequestLogEventProcessor.java:1)
        at ru.bitel.bgbilling.kernel.event.AbstractConsumer.notify(AbstractConsumer.java:344)
        at ru.bitel.bgbilling.kernel.event.Consumer.notify(Consumer.java:1)
        at ru.bitel.bgbilling.kernel.event.Consumer.onMessage0(Consumer.java:112)
        at ru.bitel.bgbilling.kernel.event.Consumer$EventListenerRunnable.runImpl(Consumer.java:51)
        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)


хотя памяти было еще около 100МБ.
Зачем InetAccess какие-то логи читает?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 09 янв 2013, 14:27 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
На свежую голову нашли, почему не очищается deviceConnectionMap.
RequestLogEventProcessor - это Access при запросе RADIUS-логов с клиента читает бинарные логи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 09 янв 2013, 14:33 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Amir писал(а):
На свежую голову нашли, почему не очищается deviceConnectionMap.

Когда будет обновление?
Amir писал(а):
RequestLogEventProcessor - это Access при запросе RADIUS-логов с клиента читает бинарные логи.

А нельзя ли это вынести в отдельный процесс? Логи вещь непредсказуемая и их чтение потенциально может "убить" Access.
Авторизация - достаточно отвественная задача. Может не стоит ставить ее под угрозу?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 09 янв 2013, 15:06 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Выложили.

Сейчас выдача логов происходит в одном потоке, т.е. безопаснее, чем если бы была в новом потоке каждый раз при запросе с клиента.
В будущем можно сделать, но настройка будет сложнее.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 15 янв 2013, 12:31 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
В Access с памятью теперь ровно. А вот в Accounting наблюдаются периодически всплески. Вчера память почти кончилась. См график.
При этом эти всплески никак не коррелируют с активностью абонентов.
Из-за чего такое может быть?


Вложения:
Комментарий к файлу: Более детально
jvm_mem_inet_accounting_w.png
jvm_mem_inet_accounting_w.png [ 51.98 КБ | Просмотров: 5503 ]
Комментарий к файлу: Использование памяти в InetAccounting
jvm_mem_inet_accounting_m.png
jvm_mem_inet_accounting_m.png [ 49.46 КБ | Просмотров: 5503 ]


Последний раз редактировалось afedorov 15 янв 2013, 12:40, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 15 янв 2013, 12:38 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
И быть может это связано с этим, но после всплеска в error.log начинают наблюдаться ошибки "Cannot find session ..."
Вот например за вчера с нуля часов до 18:32 их ни одной не было, а потом посыпались.

Код:
accounting 01-14/00:59:19 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2687376in DB!
accounting 01-14/18:32:36 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2745628in DB!
accounting 01-14/19:09:32 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2735608in DB!
accounting 01-14/19:19:59 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2746416in DB!
accounting 01-14/19:21:45 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2736151in DB!
accounting 01-14/19:48:21 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2752284in DB!
accounting 01-14/20:09:22 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2716456in DB!
accounting 01-14/20:14:24 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2745381in DB!
accounting 01-14/20:16:55 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2748701in DB!
accounting 01-14/20:27:39 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2751688in DB!
accounting 01-14/20:34:21 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2722891in DB!
accounting 01-14/20:41:05 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2756001in DB!
accounting 01-14/20:41:48 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2719462in DB!
accounting 01-14/20:52:29 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2701750in DB!
accounting 01-14/21:01:39 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2747344in DB!
accounting 01-14/21:06:18 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2756770in DB!
accounting 01-14/21:08:31 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2757403in DB!
accounting 01-14/21:28:32 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2750165in DB!
accounting 01-14/21:31:45 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2706768in DB!
accounting 01-14/21:39:55 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2747498in DB!
accounting 01-14/21:56:13 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2754795in DB!
accounting 01-14/21:59:05 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2747688in DB!
accounting 01-14/22:00:33 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2756046in DB!
accounting 01-14/22:02:19 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2759199in DB!
accounting 01-14/22:03:23 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2736363in DB!
accounting 01-14/22:05:31 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2749059in DB!
accounting 01-14/22:14:51 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2748920in DB!
accounting 01-14/22:14:51 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2735578in DB!
accounting 01-14/22:17:00 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2741695in DB!
accounting 01-14/22:22:03 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2743868in DB!
accounting 01-14/22:31:36 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2756390in DB!
accounting 01-14/22:43:18 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2733663in DB!
accounting 01-14/22:48:39 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2687495in DB!
accounting 01-14/22:49:21 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2756175in DB!
accounting 01-14/22:52:30 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2704172in DB!
accounting 01-14/22:53:34 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2763355in DB!
accounting 01-14/23:01:00 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2754624in DB!
accounting 01-14/23:01:01 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2721898in DB!
accounting 01-14/23:20:24 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2756922in DB!
accounting 01-14/23:25:22 ERROR [accwrkr-2-p-13-t-2] SessionFlushingManager - Cannot find session with id=2703227in DB!
accounting 01-14/23:46:39 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2742134in DB!
accounting 01-14/23:52:00 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2764175in DB!
accounting 01-14/23:56:54 ERROR [accwrkr-2-p-13-t-1] SessionFlushingManager - Cannot find session with id=2740591in DB!


13 числа всплеск на графике раньше по времени и там аналогичные сообщения начинаются раньше, а до всплеска их так же нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 15 янв 2013, 13:27 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Переобсчет не запускали в это время?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 15 янв 2013, 15:28 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Переобсчет в модуле Inet никому не делался вообще.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 15 янв 2013, 16:13 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Логи за время скачков остались? Можете отправить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 15 янв 2013, 16:19 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Логи были на сутки, конфиг поправили, как наберется, будут логи.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 25 янв 2013, 12:20 
Не в сети

Зарегистрирован: 16 ноя 2011, 18:30
Сообщения: 115
Карма: 0
Долгое время все было относительно ровно. Но вот вчера снова случился всплеск использования памяти.
Какие логи нужны?


Вложения:
Комментарий к файлу: память
jvm_mem_inet_accounting_d2.png
jvm_mem_inet_accounting_d2.png [ 51.67 КБ | Просмотров: 5448 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 25 янв 2013, 13:59 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
all.log за этот период. Но мне уже кажется, что это просто специфика работы сборщика мусора.
Т.е. если при увеличении, например, до 350M вызвать accounting.sh gc раза два-три, то потребление вернется на 200M.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Memory leak in InetAccess
СообщениеДобавлено: 08 фев 2013, 12:18 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Сегодня ровно в полночь началось увеличиваться использование памяти. Дошло до 350М после чего запустил accounting.sh gc несколько раз и память вернулась к норме.
Теперь интересно, чего вдруг в полночь началось увеличение памяти и почему после сброса использование памяти продолжает расти.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.052s | 50 Queries | GZIP : On ]