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

Memory leak in InetAccess
http://forum.bitel.ru/viewtopic.php?f=44&t=7581
Страница 1 из 1

Автор:  afedorov [ 30 дек 2012, 19:47 ]
Заголовок сообщения:  Memory leak in InetAccess

Несколько дней назад в 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 КБ | Просмотров: 5581 ]

Автор:  Amir [ 02 янв 2013, 04:22 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

В ActiveMQ нет висящих сообщений?
Обычно добавляется по событию старта сессии и удаляется по событию стопа сессии. Может быть бывают сессии с нулевой или очень маленькой длительностью? Сессии с одинаковыми Acct-Session-Id?

Автор:  afedorov [ 03 янв 2013, 05:24 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

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

Автор:  afedorov [ 09 янв 2013, 13:49 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Вот такая неприятность еще сегодня случилась:

Код:
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 какие-то логи читает?

Автор:  Amir [ 09 янв 2013, 14:27 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

На свежую голову нашли, почему не очищается deviceConnectionMap.
RequestLogEventProcessor - это Access при запросе RADIUS-логов с клиента читает бинарные логи.

Автор:  afedorov [ 09 янв 2013, 14:33 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Amir писал(а):
На свежую голову нашли, почему не очищается deviceConnectionMap.

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

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

Автор:  Amir [ 09 янв 2013, 15:06 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Выложили.

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

Автор:  afedorov [ 15 янв 2013, 12:31 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

В Access с памятью теперь ровно. А вот в Accounting наблюдаются периодически всплески. Вчера память почти кончилась. См график.
При этом эти всплески никак не коррелируют с активностью абонентов.
Из-за чего такое может быть?

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

Автор:  afedorov [ 15 янв 2013, 12:38 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

И быть может это связано с этим, но после всплеска в 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 числа всплеск на графике раньше по времени и там аналогичные сообщения начинаются раньше, а до всплеска их так же нет.

Автор:  Amir [ 15 янв 2013, 13:27 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Переобсчет не запускали в это время?

Автор:  afedorov [ 15 янв 2013, 15:28 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Переобсчет в модуле Inet никому не делался вообще.

Автор:  Amir [ 15 янв 2013, 16:13 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Логи за время скачков остались? Можете отправить?

Автор:  afedorov [ 15 янв 2013, 16:19 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Логи были на сутки, конфиг поправили, как наберется, будут логи.

Автор:  afedorov [ 25 янв 2013, 12:20 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Долгое время все было относительно ровно. Но вот вчера снова случился всплеск использования памяти.
Какие логи нужны?

Вложения:
Комментарий к файлу: память
jvm_mem_inet_accounting_d2.png
jvm_mem_inet_accounting_d2.png [ 51.67 КБ | Просмотров: 5449 ]

Автор:  Amir [ 25 янв 2013, 13:59 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

all.log за этот период. Но мне уже кажется, что это просто специфика работы сборщика мусора.
Т.е. если при увеличении, например, до 350M вызвать accounting.sh gc раза два-три, то потребление вернется на 200M.

Автор:  vkulakov [ 08 фев 2013, 12:18 ]
Заголовок сообщения:  Re: Memory leak in InetAccess

Сегодня ровно в полночь началось увеличиваться использование памяти. Дошло до 350М после чего запустил accounting.sh gc несколько раз и память вернулась к норме.
Теперь интересно, чего вдруг в полночь началось увеличение памяти и почему после сброса использование памяти продолжает расти.

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