forum.bitel.ru http://forum.bitel.ru/ |
|
java.io.IOException: Too many open files (CRM) http://forum.bitel.ru/viewtopic.php?f=22&t=10054 |
Страница 1 из 3 |
Автор: | survivor [ 27 дек 2014, 13:32 ] |
Заголовок сообщения: | java.io.IOException: Too many open files |
Доброго дня, На почту от биллинга сыпятся валом письма: Код: ID события: error.create.datalog.file java.io.IOException: Too many open files at java.io.UnixFileSystem.createFileExclusively(Native Method) at java.io.File.createNewFile(File.java:1006) at ru.bitel.bgbilling.kernel.base.server.datalog.hourly.HourlyLogFileUtils.getNextFileToWrite(HourlyLogFileUtils.java:236) at ru.bitel.bgbilling.kernel.base.server.datalog.hourly.HourlyDataLogEntry.<init>(HourlyDataLogEntry.java:39) at ru.bitel.bgbilling.kernel.network.dhcp.datalog.hourly.DhcpHourlyDataLogEntry.<init>(DhcpHourlyDataLogEntry.java:20) at ru.bitel.bgbilling.modules.inet.dhcp.DhcpHourlyDataLogger.newEntry(DhcpHourlyDataLogger.java:30) at ru.bitel.bgbilling.kernel.network.dhcp.datalog.hourly.DhcpHourlyDataLogger.newEntry(DhcpHourlyDataLogger.java:1) at ru.bitel.bgbilling.kernel.base.server.datalog.hourly.HourlyDataLogger.getWriter(HourlyDataLogger.java:128) at ru.bitel.bgbilling.kernel.network.dhcp.DhcpListenerWorkerContext.writeRecord(DhcpListenerWorkerContext.java:51) at ru.bitel.bgbilling.kernel.network.dhcp.DhcpListenerWorker.runImpl(DhcpListenerWorker.java:130) at ru.bitel.common.worker.WorkerTask.run(WorkerTask.java:86) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:745) at ru.bitel.common.worker.WorkerThread.run(WorkerThread.java:46) Причем у меня в /etc/security/limits.conf: Код: root soft nofile 32768 root hard nofile 32768 и: # ulimit -a Код: core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 16382 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 32768 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) unlimited virtual memory (kbytes, -v) unlimited file locks (-x) unlimited Что делать? В онлайне всего 250 человек. Вот что показывает BGInetAccess: Код: ./access_status.sh Java Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM [1.7.0_65] /opt/java/jdk1.7.0_65/jre Runtime name: 562@deneb.xxx.net Java endorsed dirs: /lib/endorsed:/opt/java/jdk/lib/endorsed OS: Linux 2.6.32-5-amd64 [amd64], file.encoding: ISO-8859-1, user.name: root Heap sizes: current=92160k free=90654k max=1363456k Kernel version 6.1.1007 / 04.12.2014 22:20:07 Inet version 6.1.635 / 04.12.2014 22:20:25 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 Antispam ban count: 0; used per minute: 0 Started: 26.12.2014 09:49:14 Uptime: 1 d 01:36:51 Memory total: 141 033 472; max: 477 102 080; free: 9 471 288 Memory pools: Non-heap memory[Code Cache]: max: 50 331 648; used: 8 272 320; peek: 8 281 856 Heap memory[PS Eden Space]: max: 177 733 632; used: 5 076 104; peek: 160 432 128 Heap memory[PS Survivor Space]: max: 524 288; used: 491 616; peek: 50 146 976 Heap memory[PS Old Gen]: max: 357 564 416; used: 125 997 392; peek: 265 408 128 Non-heap memory[PS Perm Gen]: max: 85 983 232; used: 31 988 736; peek: 31 988 736 Thread count: 481 Trees in cache: 0 Connections pool to Master status Idle: 7; Active: 0; maxActive: 300; maxIdle: 20 Вот BGInetAccess: Код: ./accounting_status.sh Java Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM [1.7.0_65] /opt/java/jdk1.7.0_65/jre Runtime name: 721@deneb.xxx.net Java endorsed dirs: /lib/endorsed:/opt/java/jdk/lib/endorsed OS: Linux 2.6.32-5-amd64 [amd64], file.encoding: ISO-8859-1, user.name: root Heap sizes: current=92160k free=90654k max=1363456k Kernel version 6.1.1007 / 04.12.2014 22:20:07 Inet version 6.1.635 / 04.12.2014 22:20:25 Radius: accounting-requests per minute start: 0; stop: 0; update: 608 access-requests per minute accept: 0; reject: 0 ignore per minute access-request: 0; accounting-update: 0 Started: 26.12.2014 09:49:12 Uptime: 1 d 01:39:17 Memory total: 75 497 472; max: 477 102 080; free: 21 695 360 Memory pools: Non-heap memory[Code Cache]: max: 50 331 648; used: 7 279 616; peek: 7 294 336 Heap memory[PS Eden Space]: max: 178 257 920; used: 14 608 648; peek: 175 112 192 Heap memory[PS Survivor Space]: max: 524 288; used: 213 008; peek: 6 083 256 Heap memory[PS Old Gen]: max: 357 564 416; used: 38 980 456; peek: 71 215 528 Non-heap memory[PS Perm Gen]: max: 85 983 232; used: 30 985 136; peek: 30 985 136 Thread count: 106 Trees in cache: 0 Connections pool to Master status Idle: 20; Active: 0; maxActive: 300; maxIdle: 20 Сервер: Код: ./server_status.sh BGBillingServer v 6.1.1007 / 04.12.2014 22:20:07 Started: 26.12.2014 09:50:04 Uptime: 1 d 01:40:29 Memory total: 104 857 600; max: 477 102 080; free: 31 748 360 Memory pools: Non-heap memory[Code Cache]: max: 50 331 648; used: 7 249 472; peek: 7 260 288 Heap memory[PS Eden Space]: max: 175 112 192; used: 10 341 688; peek: 141 557 760 Heap memory[PS Survivor Space]: max: 2 097 152; used: 1 162 784; peek: 18 870 960 Heap memory[PS Old Gen]: max: 357 564 416; used: 61 604 768; peek: 62 621 656 Non-heap memory[PS Perm Gen]: max: 268 435 456; used: 54 484 720; peek: 54 484 720 Thread count: 45 Connections pool to Master status Idle: 0; Active: 0; maxActive: 300; maxIdle: 20 Версии: Код: Сервер: вер. 6.1.1007 / 04.12.2014 22:20:07 os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.7.0_65 card: вер. 6.1.202 / 19.11.2014 14:51:32 inet: вер. 6.1.635 / 04.12.2014 22:20:25 npay: вер. 6.1.181 / 19.11.2014 14:51:58 reports: вер. 6.1.195 / 21.11.2014 19:30:55 subscription: вер. 6.1.29 / 27.08.2014 16:19:48 Линукс Debian на ядре 2.6.32-5-amd64 |
Автор: | zavndw [ 27 дек 2014, 14:43 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
а место на диске есть? |
Автор: | survivor [ 27 дек 2014, 15:01 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
полно Код: # df -H
Filesystem Size Used Avail Use% Mounted on /dev/sda1 41G 17G 23G 43% / tmpfs 3.2G 0 3.2G 0% /lib/init/rw udev 3.2G 103k 3.2G 1% /dev tmpfs 3.2G 0 3.2G 0% /dev/shm tmpfs 210M 49M 162M 24% /usr/local/BGInetAccounting/log # df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/sda1 2514944 862500 1652444 35% / tmpfs 766452 5 766447 1% /lib/init/rw udev 765241 496 764745 1% /dev tmpfs 766452 1 766451 1% /dev/shm tmpfs 766452 11 766441 1% /usr/local/BGInetAccounting/log |
Автор: | skn [ 27 дек 2014, 15:54 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
а что показывает Код: lsof
|
Автор: | survivor [ 27 дек 2014, 17:02 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
Отправил вам в личку аттачем вывод lsof |
Автор: | survivor [ 28 дек 2014, 15:53 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
За ночь на почту свалилось 140 писем. Есть идеи? |
Автор: | stark [ 29 дек 2014, 13:09 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
нужен вывод Код: lsof -p 16950 где 16950 - это код процесса access. |
Автор: | survivor [ 29 дек 2014, 13:37 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
stark, отправил вам в личку вывод команды |
Автор: | stark [ 29 дек 2014, 14:22 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
проблема примерно ясна. Сохраните логи log4j access-сервера куда-нибудь на всякий случай(вдруг понадобятся для разбора ) и перезапустите его. Это временно решит проблему, а мы пока разберемся почему он файлы не закрывает. |
Автор: | Amir [ 29 дек 2014, 18:45 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
По списку открытых файлов вроде бы есть проблема. Но также судя по этому списку, у приложения открыто чуть больше 1000 файловых дескрипторов, что на самом деле не много. Например, судя по открытым файлам у вас около 250 коммутаторов, от них идет DHCP, для каждого открыты по два файла, это уже до 500 открытых файловых дескрипторов. А каждые 15 минут создаются новые файлы логов, при этом в этот момент времени предыдущие еще открыты, что может увеличить кол-во открытых дескрипторов. Плюс различные сокеты. http://wiki.bitel.ru/index.php/%D0%9E%D ... n_files%22 Может быть еще в каком-нибудь месте есть лимит? Или же какое-то другое приложения (BGBilling) или другое держит открытыми остальные 31000? |
Автор: | stark [ 29 дек 2014, 19:08 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
можно вывести таким запросом Код: lsof -u user | awk '{print $2}' | sort | uniq -c | sort -n вместо user - пользователя поставить (root или что у вас там). |
Автор: | survivor [ 29 дек 2014, 19:41 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Я перегрузил, сейчас пока все норм. Код: # lsof -u root | awk '{print $2}' | sort | uniq -c | sort -n
1 PID ... 133 1756 148 1737 236 1776 249 1690 283 1256 1009 1713 ps ax | grep 1713 1713 ? Sl 2:18 /opt/java/jdk/bin/java -Dnetworkaddress.cache.ttl=3600 -Djava.net.preferIPv4Stack=true -Dboot.info=1 -Dapp.name=BGInetAccess -Djava.endorsed.dirs=/lib/endorsed:/opt/java/jdk/lib/endorsed -Dlog.dir.path=log/ -Dlog4j.configuration=log4j-access.xml -Xmx512m -Dcom.sun.management.jmxremote.port=1616 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.password.file=./jmx.password -Dcom.sun.management.jmxremote.access.file=./jmx.access -Dcom.sun.management.jmxremote.ssl=false -Dadmin.port=1951 -cp .:./lib/ext/bgcommon-boot.jar ru.bitel.common.bootstrap.Boot ru.bitel.bgbilling.kernel.application.server.Application inet-access |
Автор: | survivor [ 29 дек 2014, 19:48 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
/etc/security/limits.conf у меня такой: Код: root soft nofile 65536 root hard nofile 65536 BGInetAccess запущен из под рута. А sysctl (как http://wiki.bitel.ru/index.php/%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_%D0%B2_%D0%BB%D0%BE%D0%B3%D0%B5_%22Too_many_open_files%22): Код: sysctl -w fs.epoll.max_user_instances=10000
error: "fs.epoll.max_user_instances" is an unknown key |
Автор: | survivor [ 29 дек 2014, 20:13 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Коммутаторов сейчас 215, кстати а как чистить (старые) файлы в /usr/local/BGInetAccess/data/dhcp? Каталог растет очень шустро... Я сделал простенький скриптик, который удаляет папки в названии которых нет текущего месяца, но может есть какой-то правильный метод? Из конфигурации? |
Автор: | Amir [ 29 дек 2014, 21:13 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Нет, на данный момент нет автоматического удаления старых DHCP-логов. Сжатие для них включено? |
Автор: | survivor [ 30 дек 2014, 15:06 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
апдейтну пожалуй... пока писем too many open files больше не приходит, но продолжают идти письма: Код: ID события: dhcpLstnr.wait.thread В рамках отведенного переменными количества потоков 50 и размером очереди обработки 300 dhcpLstnr не успеевает производить обработку запросов. Увеличил эти значения до 100 и 500 соответственно, теперь: Код: В рамках отведенного переменными количества потоков 100 и размером очереди обработки 500 dhcpLstnr не успеевает производить обработку запросов. Время регистрации события: 30.12.2014 06:04:04 Время регистрации события: 30.12.2014 06:05:04 Время регистрации события: 30.12.2014 12:03:59 Время регистрации события: 30.12.2014 12:04:59 Время регистрации события: 30.12.2014 00:04:21 Какие значения порекомендуете на 250 коммутаторов и 350 онлайн абонентов? С учетом активного роста. |
Автор: | Amir [ 30 дек 2014, 16:05 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
В это время что-нибудь происходит? Бэкап, смена скоростей или что-нибудь еще? Сохраните в это время вывод jstack несколько раз. |
Автор: | survivor [ 30 дек 2014, 16:30 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
да, бакап базы, через xtrabackup, он вроде как не должен блокировать ввод/вывод. Сделаю jstack в момент бакапа |
Автор: | skyb [ 10 янв 2015, 18:51 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files |
survivor писал(а): За ночь на почту свалилось 140 писем. поверьте, это не так много )))) |
Автор: | survivor [ 21 янв 2015, 18:00 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Только что пришло 11 писем от биллинга что: Код: ID события: dhcpLstnr.wait.thread В рамках отведенного переменными количества потоков 100 и размером очереди обработки 500 dhcpLstnr не успеевает производить обработку запросов. На данный момент: Код: ./access_status.sh Java Runtime: Oracle Corporation Java HotSpot(TM) 64-Bit Server VM [1.7.0_65] /opt/java/jdk1.7.0_65/jre Java endorsed dirs: /lib/endorsed:/opt/java/jdk/lib/endorsed OS: Linux 2.6.32-5-amd64 [amd64], file.encoding: ISO-8859-1, user.name: root Heap sizes: current=92160k free=90654k max=1363456k Kernel version 6.1.1007 / 04.12.2014 22:20:07 Inet version 6.1.635 / 04.12.2014 22:20:25 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 Antispam ban count: 0; used per minute: 0 Started: 19.01.2015 12:57:11 Uptime: 2 d 02:59:14 Memory total: 252 706 816; max: 954 728 448; free: 37 413 120 Memory pools: Non-heap memory[Code Cache]: max: 50 331 648; used: 8 226 560; peek: 8 248 384 Heap memory[PS Eden Space]: max: 346 030 080; used: 5 109 584; peek: 325 582 848 Heap memory[PS Survivor Space]: max: 5 767 168; used: 229 376; peek: 112 060 720 Heap memory[PS Old Gen]: max: 715 653 120; used: 209 957 664; peek: 360 126 552 Non-heap memory[PS Perm Gen]: max: 85 983 232; used: 31 899 616; peek: 31 909 472 Thread count: 542 Trees in cache: 0 Connections pool to Master status Idle: 20; Active: 0; maxActive: 300; maxIdle: 20 На данный момент бакапы не снимаются. Опять увеличить количество потоков? Свичей сейчас 272. |
Автор: | Amir [ 21 янв 2015, 18:03 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Нужен вывод jstack для Access и для Accounting. |
Автор: | survivor [ 21 янв 2015, 18:14 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Отправил вам в личку |
Автор: | survivor [ 21 янв 2015, 18:17 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Может пора выносить dhcp на отдельный сервер? Как вообще расчитывать значения для количества потоков и размера очереди? Можно указать сразу миллион например? ![]() |
Автор: | Amir [ 21 янв 2015, 18:22 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Цитата: Может пора выносить dhcp на отдельный сервер? Не думаю. Сейчас вроде бы все нормально, нагрузки нет. Может быть просто где-то сегмент сети отваливался и одновременно много абонентов получали адреса? Цитата: Как вообще расчитывать значения для количества потоков и размера очереди? Можно указать сразу миллион например? Больше 100 и 500 не стоит делать.
|
Автор: | survivor [ 23 янв 2015, 12:18 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Вчера увеличил lease time для dhcp, сегодня первая ночь когда мне биллинг не написал ни одного письма ![]() |
Автор: | Amir [ 23 янв 2015, 13:09 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
А сколько был leasetime? |
Автор: | survivor [ 26 янв 2015, 17:08 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
был две минуты... ![]() Похоже биллинг не успевал обработать такое количество dhcp запросов. С ростом абон базы думаю еще раз с этим столкнусь. Сейчас - 15 минут, все спокойно. |
Автор: | Amir [ 26 янв 2015, 20:47 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Если на абонента разрешена только одна сессия, то можно попробовать указать dhcp.connection.closeOnNew=1, чтобы при получении DISCOVER от абонента текущая сессия закрывалась на биллинге. В 6.0/6.1 есть InetDhcpProcessor2, который должен работать быстрее, но он пока не полностью проверен. В последнем билде добавили, что при оповещении о том, что не успевает обрабатывать, дополнительно будет вывод аналогичный выводу jstack, который может помочь решить проблему. |
Автор: | survivor [ 27 янв 2015, 13:45 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Сглазил... сегодня ночью во время бакапа базы пришло: ID события: dhcpLstnr.wait.thread и еще новое: Код: ID события: radius.wait.thread В рамках отведенного переменными количества потоков threadCount и размером очереди обработки maxQueueSize RADIUS сервер не успеевает производить обработку аккаунтинг запросов. Возможная причина - загруженность базы данных. Radius: accounting-requests per minute start: 0; stop: 0; update: 133 access-requests per minute accept: 0; reject: 0 ignore per minute access-request: 0; accounting-update: 0 Насчет: Цитата: Если на абонента разрешена только одна сессия, то можно попробовать указать dhcp.connection.closeOnNew=1, чтобы при получении DISCOVER от абонента текущая сессия закрывалась на биллинге. Это было бы здорово. Только у меня же еще вторая сессия есть у абонента - radius сессия от ISG браса. Что будет с ней в это случае? Она по идее не должна дропнуться, ведь ip у абонента останется тот же. Даже если и дропнется, не страшно, она же сразу пересоздастся с первым ip пакетом? Цитата: В последнем билде добавили, что при оповещении о том, что не успевает обрабатывать, дополнительно будет вывод аналогичный выводу jstack, который может помочь решить проблему. Для этого достаточно просто обновиться? Или нужно переключаться на InetDhcpProcessor2? |
Автор: | Amir [ 27 янв 2015, 17:32 ] |
Заголовок сообщения: | Re: java.io.IOException: Too many open files (CRM) |
Цитата: Это было бы здорово. Только у меня же еще вторая сессия есть у абонента - radius сессия от ISG браса. Что будет с ней в это случае? Она по идее не должна дропнуться, ведь ip у абонента останется тот же. Даже если и дропнется, не страшно, она же сразу пересоздастся с первым ip пакетом? Насколько помню, при этой схеме у вас будет принудительный сброс сессии на ISG, т.к. он задан в самом ServiceActivator (например, ru.bitel.bgbilling.modules.inet.dyn.device.cisco.ipdhcp.ISGServiceActivatorIpDhcp), т.к. адрес может выдаваться динамически и для нового устройства - выдаться новый.Должна пересоздаться. Но возможны случаи, когда на Accounting пришел стоп, одновременно пришел Access-Request на Access, а Accounting еще не успел завершить предыдущую сессию и Access решает, что превышено кол-во активных сессий (т.е. проблема возникает именно при моментальной переавторизации). В этом случае рекомендуем использовать radius.connection.checkDuplicate=888 http://bgbilling.ru/v6.1/doc/ch17s13s03s01.html . Но здесь возникала проблема, что при сбросе старой сессии раньше не рассматривалась разница между DHCP- или RADIUS-сессией и могла сброситься DHCP-сессия. Поэтому добавили возможность проверки на кол-во сессий отдельно по разным типам - в конфигурации модуля - authorization.sessionCountCheck=1. С этим флагом подразумевается, что, ограничение на кол-во сессий действует на каждый тип сессии отдельно. Т.е. вместо ограничения на 2 сессии можно/нужно будет указать 1 сессию (одна DHCP и одна RADIUS и в будущем, например, одна DHCPv6). Т.е. вместе с radius.connection.checkDuplicate=888 лучше сразу указать в конфигурации модуля authorization.sessionCountCheck=1. Но DHCP так работает, что шаг вправо, шаг влево может привести к неожиданным последствиям, поэтому следует менять осторожно, какое-то время наблюдать (но как минимум на одной инсталляции authorization.sessionCountCheck=1 уже работает). Цитата: Для этого достаточно просто обновиться? Или нужно переключаться на InetDhcpProcessor2? Да, достаточно обновиться.
|
Страница 1 из 3 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |