forum.bitel.ru http://forum.bitel.ru/ |
|
5.2: Обновился, блин http://forum.bitel.ru/viewtopic.php?f=44&t=8752 |
Страница 1 из 1 |
Автор: | borisk [ 06 дек 2013, 19:32 ] |
Заголовок сообщения: | 5.2: Обновился, блин |
Добрый день! Давно не обновлялся. Месяца два-три. Тут что-то решил обновиться, и, примерно через день работы в логах access и accounting лезут эксепшены про: Цитата: radius 12-05/11:54:58 ERROR [rdsLstnr-p-7-t-69] RadiusListenerWorker - Direct buffer memory java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:656) at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:113) at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:305) at ru.bitel.bgbilling.kernel.base.server.datalog.BGDataLogWriter.createBuffer(BGDataLogWriter.java:55) at ru.bitel.bgbilling.kernel.base.server.datalog.BGDataLogWriter.createBuffer(BGDataLogWriter.java:1) at ru.bitel.bgbilling.kernel.base.server.datalog.DataLogWriter.<init>(DataLogWriter.java:25) at ru.bitel.bgbilling.kernel.base.server.datalog.BGDataLogWriter.<init>(BGDataLogWriter.java:31) at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLogWriter.<init>(RadiusDataLogWriter.java:10) at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLog$1.<init>(RadiusDataLog.java:106) at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLog.newWriter(RadiusDataLog.java:106) at ru.bitel.bgbilling.kernel.network.radius.datalog.RadiusDataLog.newWriter(RadiusDataLog.java:1) at ru.bitel.bgbilling.kernel.base.server.datalog.hourly.HourlyDataLogger.getWriter(HourlyDataLogger.java:154) at ru.bitel.bgbilling.kernel.network.radius.RadiusListenerWorkerContext.writeRecord(RadiusListenerWorkerContext.java:67) at ru.bitel.bgbilling.modules.inet.radius.InetRadiusListenerWorker.accountingRequest(InetRadiusListenerWorker.java:180) 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.runWorker(ThreadPoolExecutor.java:1146) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:701) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) И шедулер вдруг тоже начал ругаться про нехватку памяти! Но самое противное то, что exception вроде к radius относится, а на самом деле перестает работать все, в том числе и dhcp. Что это такое и как с этим бороться? Поставил в запуск -XX:MaxDirectMemorySize=256M, не помогло. Цитата: Клиент: вер. 5.2 сборка 1198 от 18.11.2013 20:11:56
os: Windows XP; java: Java HotSpot(TM) Client VM, v.1.6.0_37 Сервер: вер. 5.2 сборка 1561 от 03.12.2013 13:09:41 os: FreeBSD; java: OpenJDK 64-Bit Server VM, v.1.6.0_32 ВНИМАНИЕ: Виртуальная машина OpenJDK 64-Bit Server VM не рекомендуется bill вер. 5.2 сборка 316 от 28.10.2013 13:07:47 card вер. 5.2 сборка 205 от 03.12.2013 13:09:40 dialup вер. 5.2 сборка 383 от 11.11.2013 20:06:58 email вер. 5.2 сборка 172 от 12.10.2012 20:00:52 inet вер. 5.2 сборка 1259 от 25.11.2013 13:15:45 ipn вер. 5.2 сборка 251 от 11.11.2013 20:07:00 mps вер. 5.2 сборка 180 от 26.11.2013 12:45:07 npay вер. 5.2 сборка 206 от 14.11.2013 18:57:49 phone вер. 5.2 сборка 273 от 06.05.2013 19:22:16 reports вер. 5.2 сборка 193 от 28.02.2013 10:57:03 ru.bitel.bgbilling.plugins.documents вер. 5.2 сборка 150 от 03.04.2013 15:51:27 ru.bitel.bgbilling.plugins.organizer вер. 5.2 сборка 60 от 12.10.2012 20:01:24 voiceip вер. 5.2 сборка 208 от 21.08.2013 14:19:09 wellpay вер. 5.2 сборка 22 от 20.03.2013 19:47:53 |
Автор: | Amir [ 06 дек 2013, 19:54 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Можно посмотреть inet-access.xml? |
Автор: | borisk [ 06 дек 2013, 19:57 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Да пожалуйста. Вот, от access Цитата: <?xml version="1.0" encoding="UTF-8"?>
<application context="access"> <!-- Уникальное имя приложения --> <param name="app.name" value="BGInetAccess"/> <!-- Уникальный числовой id приложения --> <param name="app.id" value="1001"/> <!-- Параметры подключения к БД --> <param name="db.driver" value="com.mysql.jdbc.Driver"/> <param name="db.url" value="jdbc:mysql://x.x.ru/bgbilling?useUnicode=true&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&queryTimeoutKillsConnection=true&connectTimeout=1000"/> <param name="db.user" value="bgbill"/> <param name="db.pswd" value="qqq"/> <param name="db.validationTimeout" value="10"/> <!-- Параметры подключения к MQ --> <param name="mq.url" value="failover:(tcp://127.0.0.4:61616)"/> <param name="mq.user" value="bgbill"/> <param name="mq.pswd" value="qqq"/> <!-- id модуля --> <param name="moduleId" value="14"/> <!-- id корневого устройства --> <param name="rootDeviceId" value="1"/> <!-- Типы фейковых устройств, являющихся аккаунтинг серверами --> <param name="accounting.deviceTypeIds" value="1"/> <!-- Внутренняя переменная приложения, не изменять --> <param name="commonIdentifierName" value="rootDeviceId"/> <!-- Параметры сохранения логов данных --> <!-- Директория, в которую сохранять radius логи --> <param name="datalog.radius.dir" value="data/radius" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл --> <param name="datalog.radius.chunk.size" value="262144" /> <!-- Сжимать radius логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.radius.compression.type" value="0" /> <!-- Директория, в которую сохранять flow логи --> <param name="datalog.dhcp.dir" value="data/dhcp" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл --> <param name="datalog.dhcp.chunk.size" value="131072" /> <!-- Сжимать flow логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.dhcp.compression.type" value="0" /> <!-- Создание Access --> <bean name="access" class="ru.bitel.bgbilling.modules.inet.access.Access" /> <context name="dhcp"> <!-- Cоздание процессора dhcp-пакетов --> <bean name="dhcpProcessor" class="ru.bitel.bgbilling.modules.inet.dhcp.InetDhcpProcessor"> <constructor> <param name="deviceTypeIds" value="3,4,6,7,10,11,12,13,14"/> </constructor> </bean> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" /> <!-- Cоздание dataLogger, сохраняющего dhcp-пакеты на диск --> <bean name="dhcpDataLogger" class="ru.bitel.bgbilling.modules.inet.dhcp.DhcpHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя dhcp-пакетов на порту с передачей ему процессора и dataLogger --> <bean name="dhcpListener" class="ru.bitel.bgbilling.kernel.network.dhcp.DhcpListener"> <constructor> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value="x.x.x.x"/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="67"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">512 * 1024</param> <!-- Количество потоков-обработчиков --> <param name="threadCount">500</param> <!-- Максимальное количество пакетов в очереди на обработку --> <param name="maxQueueSize">200</param> <!-- Передача процессора --> <param name="processor">dhcpProcessor</param> <!-- Передача dataLogger --> <param name="dataLogger">dhcpDataLogger</param> </constructor> </bean> </context> <context name="radius"> <!-- Cоздание процессора radius-пакетов --> <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/> <!-- Служебный ScheduledExecutorService, необходимый для dataLogger --> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1" /> <!-- Cоздание dataLogger, сохраняющего radius-пакеты на диск (только один экземпляр) --> <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя radius-пакетов на порту с передачей ему процессора и dataLogger --> <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener"> <constructor> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value="x.x.x.x"/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="1812"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">512 * 1024</param> <!-- Рекомендуемый SO_RCVBUF сокета --> <param name="soRCVBUF"></param> <!-- Количество потоков-обработчиков --> <param name="threadCount">50</param> <!-- Максимальное количество пакетов в очереди на обработку --> <param name="maxQueueSize">200</param> <!-- Передача процессора --> <param name="processor">radiusProcessor</param> <!-- Режим работы, RadiusListener.Mode.authentication --> <param name="mode">RadiusListener.Mode.authentication</param> <!-- Передача dataLogger --> <param name="dataLogger">radiusDataLogger</param> </constructor> </bean> </context> </application> |
Автор: | Amir [ 06 дек 2013, 20:05 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
datalog.dhcp.compression.type и datalog.radius.compression.type всегда были 0? |
Автор: | borisk [ 06 дек 2013, 20:11 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Да. Это связано с какой-то ошибкой в zlib. Иногда вылетала вся jvm по exception. Когда поставил 0 - работало без вылетов и проблем больше полугода. До сегодняшнего обновления ![]() |
Автор: | Amir [ 06 дек 2013, 20:35 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Точно ничего не менялось перед обновлением? Пока не могу найти изменения, которые могут привести к такой ошибке. inet-accounting.xml тоже покажите. |
Автор: | borisk [ 06 дек 2013, 20:44 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Да точно не менялось. Вот что, кстати, accounting пишет Цитата: java.lang.OutOfMemoryError: Direct buffer memory at java.nio.Bits.reserveMemory(Bits.java:656) at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:113) at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:305) at ru.bitel.bgbilling.kernel.network.flow.FlowListener.run(FlowListener.java:102) at java.lang.Thread.run(Thread.java:701) Конфиг сейчас покажу. |
Автор: | borisk [ 06 дек 2013, 20:48 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Цитата: <?xml version="1.0" encoding="UTF-8"?>
<application context="accounting"> <!-- Уникальное имя приложения --> <param name="app.name" value="BGInetAccounting"/> <!-- Уникальный числовой id приложения --> <param name="app.id" value="2001"/> <!-- Параметры подключения к БД --> <param name="db.driver" value="com.mysql.jdbc.Driver"/> <param name="db.url" value="jdbc:mysql://x.x.ru/bgbilling?useUnicode=true&characterEncoding=Cp1251&allowUrlInLocalInfile=true&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false&queryTimeoutKillsConnection=true&connectTimeout=1000"/> <param name="db.user" value="bgbill"/> <param name="db.pswd" value="qqq"/> <param name="db.validationTimeout" value="10"/> <!-- Параметры подключения к MQ --> <param name="mq.url" value="failover:(tcp://127.0.0.4:61616)"/> <param name="mq.user" value="bgbill"/> <param name="mq.pswd" value="qqq"/> <!-- id модуля --> <param name="moduleId" value="14"/> <!-- id корневого устройства --> <param name="rootDeviceId" value="1"/> <!-- Внутренняя переменная приложения, не изменять --> <param name="commonIdentifierName" value="rootDeviceId"/> <!-- Параметры сохранения radius-пакетов в файлы логов --> <!-- Директория, в которую сохранять radius логи --> <param name="datalog.radius.dir" value="data/radius" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл --> <param name="datalog.radius.chunk.size" value="524288" /> <!-- Сжимать radius логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.radius.compression.type" value="0" /> <!-- Параметры сохранения flow-пакетов в файлы логов --> <!-- Директория, в которую сохранять flow логи --> <param name="datalog.flow.dir" value="/mnt/nf0/bgacc0" /> <!-- Размер блока данных в файле лога, также размер буфера на лог файл и поток слушателя --> <param name="datalog.flow.chunk.size" value="524288" /> <!-- Сжимать flow логи: 0 - не сжимать, 1 - zlib --> <param name="datalog.flow.compression.type" value="0" /> <!-- Создание Accounting --> <bean name="accounting" class="ru.bitel.bgbilling.modules.inet.accounting.Accounting"/> <context name="radius"> <!-- Cоздание процессора radius-пакетов --> <bean name="radiusProcessor" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusProcessor"/> <!-- Служебный ScheduledExecutorService, необходимый для dataLogger --> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1"/> <!-- Cоздание dataLogger, сохраняющего radius-пакеты на диск (только один экземпляр) --> <bean name="radiusDataLogger" class="ru.bitel.bgbilling.modules.inet.radius.RadiusHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя radius-пакетов на порту с передачей ему процессора и dataLogger --> <bean name="radiusListener" class="ru.bitel.bgbilling.modules.inet.radius.InetRadiusListener"> <constructor> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value="x.x.x.x"/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="1813"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">1 * 1024 * 1024</param> <!-- Рекомендуемый SO_RCVBUF сокета --> <param name="soRCVBUF"></param> <!-- Количество потоков-обработчиков --> <param name="threadCount">50</param> <!-- Максимальное количество пакетов в очереди на обработку --> <param name="maxQueueSize">200</param> <!-- Передача процессора --> <param name="processor">radiusProcessor</param> <!-- Режим работы, RadiusListener.Mode.accounting --> <param name="mode">RadiusListener.Mode.accounting</param> <!-- Передача setup --> <param name="setup">setup</param> <!-- Передача dataLogger --> <param name="dataLogger">radiusDataLogger</param> </constructor> </bean> </context> <!-- Cоздание процессора flow-пакетов --> <context name="collector"> <!-- Служебный ScheduledExecutorService, необходимый для dataLogger --> <scheduledExecutorService name="hrlydtlggr" corePoolSize="1"/> <!-- Cоздание dataLogger, сохраняющего flow-пакеты на диск (только один экземпляр) --> <bean name="flowDataLogger" class="ru.bitel.bgbilling.modules.inet.collector.IPHourlyDataLogger"> <param name="scheduledExecutor">hrlydtlggr</param> </bean> <!-- Cоздание слушателя flow-пакетов на порту с передачей ему dataLogger --> <bean name="flowListener" class="ru.bitel.bgbilling.modules.inet.collector.InetFlowListener"> <constructor factoryMethod="newInstance"> <!-- Тип слушателя, netflow, netflow9 или sflow --> <param name="type" value="netflow"/> <!-- Хост (интерфейс), на котором будет открыт сокет. Если пусто - на всех --> <param name="host" value="x.x.x.x"/> <!-- Порт, на котором будет открыт сокет --> <param name="port" value="2001"/> <!-- Размер буфера приема слушателя --> <param name="recvBufferSize">4 * 1024 * 1024</param> <!-- Рекомендуемый SO_RCVBUF сокета --> <param name="soRCVBUF">512 * 1024</param> <!-- Количество потоков-обработчиков --> <param name="threadCount" value="10"/> <!-- id устройств-источников, если на данном порту нужно обрабатывать данные только у определенных источников --> <param name="agentDeviceIds" value=""/> <!-- Передача dataLogger --> <param name="dataLogger">flowDataLogger</param> </constructor> </bean> <context name="detail"> <!-- Cоздание обработчика flow детализации --> <bean name="detailWorker" class="ru.bitel.bgbilling.modules.inet.accounting.detail.InetDetailWorker"/> </context> </context> </application> |
Автор: | Amir [ 06 дек 2013, 20:58 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Попробуйте выполнить jdk/bin/jmap -dump:live,format=b,file=heap.bin <pid> на Access или Accounting, который меньше памяти использует. Только выполнение может быть не быстрым, особенно если приложение больше 512MB и при этом идет большая нагрузка. Получившийся файл (дамп памяти heap.bin) нужно будет как-то нам передать. |
Автор: | borisk [ 06 дек 2013, 21:05 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
В личку кинул параметры |
Автор: | Amir [ 06 дек 2013, 21:30 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
FreeBSDServiceActivator - ваш класс? Не уверен, что сильно связано, но поправьте disconnect: Код: @Override Иначе в памяти остаются висеть out, isr и in.
public Object disconnect() throws Exception { socket.close(); out = null; isr = null; in = null; return true; } |
Автор: | borisk [ 06 дек 2013, 21:47 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Сделал. Наблюдаю. |
Автор: | Amir [ 06 дек 2013, 22:30 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Что нашел - исправил, выкладывается. Но не уверен, что причина была в этом - т.к. в Accounting ничего подозрительного не нашел. При возникновении проблемы сделайте еще один дамп. Или через какое-то время (можно два раза через большие промежутки времени). Если будете обновляться - не забудьте сделать бэкап старых библиотек. |
Автор: | borisk [ 06 дек 2013, 23:28 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Я сначала пару дней с предыдущим советом поработаю. А потом обновлюсь. ![]() |
Автор: | borisk [ 10 дек 2013, 13:56 ] |
Заголовок сообщения: | Re: 5.2: Обновился, блин |
Ну вроде проблемы с памятью пропали. Уже даже после выполнения первого совета. Но теперь в логах частенько появляется такое (не знаю на сколько это критично): Цитата: connection 12-10/13:15:15 ERROR [sa-p-12-t-2] WorkerTask -
java.util.concurrent.RejectedExecutionException at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:1992) at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:822) at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:299) at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleWithFixedDelay(ScheduledThreadPoolExecutor.java:520) at ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorDeviceWorker.runImpl(ServiceActivatorDeviceWorker.java:130) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:351) at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:165) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:267) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1146) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:701) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:40) |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |