Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Память контроллера Unifi — размер кучи Java, UniFi Network
 
Есть ли способ контролировать объём памяти, который занимает unifi controller? Так как это java-приложение, хотелось бы управлять выделением кучи через xms и xmx. Но, похоже, что размер кучи жёстко прописан — Xmx 1024M. Это вызывает проблемы на устройствах с ограниченной памятью (плаги-компьютеры, маленькие платы на atom, общий хостинг и т.д.). Сейчас я просто перезагружаю unifi несколько раз в день с помощью скрипта в crontab, чтобы не выходить за лимит по памяти (у меня общий хостинг).

Кстати, неприятный момент: при такой перезагрузке у пользователей с тарифом с «limit_quota» сбрасывается расход на ноль. То есть, похоже, unifi сервер хранит данные по использованию тарифа только в оперативной памяти и не сохраняет их на диск периодически. Вот это не очень.
 
Понятно, большое спасибо.
 
@stefan-cloudt, думаю, ты это мог пропустить:

[УВЕДОМЛЕНИЕ] Использование памяти UniFi Controller (версия 5.6.20 и выше)

https://community.ui.com/questions/228907d2-8d30-42a0-b97c-b14ef9767edb
 
У меня такая же проблема, и моё решение довольно костыльное.

Я заменил бинарник java на скрипт, который вызывает оригинальный java бинарник, а внутри скрипта удалил все флаги -Xmx и -Xms. Потом добавил свой собственный флаг -Xmx128M. Не уверен, что 128M достаточно, но зато теперь я могу его менять. Большой минус в том, что это решение действует на всю систему, и для всех java-команд флаги -Xmx и -Xms перестают работать так, как задумано. Вариантом может быть установка отдельной версии java, которую вы настроите специально для unifi.

Вот скрипт, который я использовал, чтобы убрать все флаги -Xmx и -Xms:
#!/bin/bash
args=$@
filtered=$(echo $args | sed 's/\(-Xm[sx]\([0-9]*\)[kmgKMG]\)//g')
/usr/lib/jvm/jdk-8-oracle-arm32-vfp-hflt/jre/bin/java-bin -Xmx128M $filtered

Он работает, но мне такое решение не нравится. Было бы намного лучше, если бы проблему решил ubiquiti.
 
Есть какие-то новости? Та же проблема на ubuntu 12.04.5 с openjdk-6-jre-headless 6b33-1.13.5-1ubuntu0.12.04.
 
Версия Java от Sun/Oracle, возможно, исправляет проблему с утечкой памяти. Но параметр -mx игнорируется в обеих версиях Java.
 
Для меня (да и для нескольких других в этой теме: https://community.ui.com/questions/9858c320-30f5-4b23-9c80-d685616caead#comment/3e69af75-c42d-43f4-a292-c7e28162aae3) это версия на Java.  
$ sudo apt-get install python-software-properties  
$ sudo add-apt-repository ppa:webupd8team/java  
$ sudo apt-get update  
$ sudo apt-get install oracle-java8-installer  
$ sudo vi /etc/init.d/unifi  
#JAVA_HOME=/usr/lib/jvm/java-6-openjdk  
JAVA_HOME=/usr/lib/jvm/java-8-oracle
 
Я запускал unifi 2.4.5 на Ubuntu 10.04 на системе с 512 МБ оперативной памяти, и всё работало отлично в течение нескольких месяцев. Сейчас я обновился до Ubuntu 12.04 и unifi 2.4.6, и после нескольких часов работы использование оперативки java постепенно растёт, пока не забирает всю доступную память, из-за чего система начинает очень тормозить. Я пробовал уменьшить значение Xmx в init-скрипте, но это никак не помогло. Сейчас у меня используется стандартный openjdk из репозитория. Есть идеи?
 
Сейчас Symptoms: top - 09:23:40, uptime 16:33, 1 пользователь, средняя нагрузка: 1.45, 1.14, 1.01  
Задачи: всего 81, из них 3 выполняются, 78 спят, 0 остановлены, 0 зомби  
Процессор: 0.0% пользователь, 2.0% системные процессы, 0.0% с приоритетом, 25.0% простаивает, 73.0% ждет ввода-вывода, 0.0% аппаратных прерываний, 0.0% программных прерываний, 0.0% виртуализации  
Память: всего 1018720k, использовано 951112k, свободно 67608k, буферы 352k  
Подкачка: всего 520188k, использовано 443204k, свободно 76984k, кэшировано 4196k  

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  
1821 root 20 0 1947m 776m 644 S 1.0 78.0 4:09.58 java  

root@unifi:/# free -m  
            всего  использовано  свободно  совместно  буферы  кэш  
Память:       994       931       63        0       0        7  
-/+ буферы/кэш: 922       71  
Подкачка:     507       484       23
 
Всё по-прежнему! :~$ uname -a Linux unifi 3.8.0-37-generic #53~precise1-Ubuntu SMP Wed Feb 19 21:37:54 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux Unifi 2.4.6
 
Спасибо, nicktc, но, мне кажется, тут другая проблема. Сегодня я обновился до последней бета-версии. Но это ничего не изменило.

В файле /etc/init.d/unifi можно изменить параметр -Xmx на более низкое значение, например, -Xmx512M...

JSVC_OPTS="${JSVC_OPTS}\
-home ${JAVA_HOME} \
-cp /usr/share/java/commons-daemon.jar:${BASEDIR}/lib/ace.jar \
-pidfile ${PIDFILE} \
-procname ${NAME} \
-outfile SYSLOG \
-errfile SYSLOG \
-Djava.awt.headless=true -Xmx512M"

...Но после запуска java процесс всё равно стартует с -Xmx1024M:

# ps x  
 PID TTY      STAT   TIME COMMAND  
[...]
1319 ?        Ss     0:00 unifi -home /usr/lib/jvm/java-6-openjdk-i386 -cp /usr/share/java/commons-daemon.jar:/usr/lib/  
1321 ?        S      0:00 unifi -home /usr/lib/jvm/java-6-openjdk-i386 -cp /usr/share/java/commons-daemon.jar:/usr/lib/  
1322 ?        Sl     0:00 unifi -home /usr/lib/jvm/java-6-openjdk-i386 -cp /usr/share/java/commons-daemon.jar:/usr/lib/  
1351 ?        Sl     0:14 /usr/lib/jvm/java-6-openjdk-i386/jre/bin/java -Xmx1024M -jar /usr/lib/unifi/lib/ace.jar start  
[...]

И хотя java процесс не использует всю память, максимальный размер всё равно 1024M плюс память, которую занимает сам java процесс:

# cat /proc/1351/status  | grep -E "VmSize|VmRSS"  
VmSize: 1262220 kB  
VmRSS:   71940 kB  

Есть идеи, как уменьшить максимальный объём памяти? Кто-нибудь знает, почему контроллер unifi запущен от имени root? Насколько я вижу, привилегированные порты не используются. Значит, хватило бы ограниченного пользователя — это и безопаснее, и логичнее?!
 
http://stackoverflow.com/questions/11801254/jvm-options-xms-and-xmx-are-ignored
 
Привет! Я пытался уменьшить максимальный размер процесса java. Но когда я меняю значение параметра -Xmx в /etc/init.d/unifi, оно игнорируется (у меня Debian Linux). Каждый раз java процесс запускается с такими параметрами: .../bin/java -Xmx1024M -jar /usr/lib/unifi/lib/ace.jar start. Есть идеи, почему так? Заранее спасибо!
 
Кстати, работает на бете:

Package: unifi-beta  
Status: install ok installed  
Priority: optional  
Section: java  
Installed-Size: 35940  
Maintainer: UniFi developers <unifi-dev@ubnt.com>  
Architecture: all  
Version: 3.1.9-2226  
Replaces: unifi-controller  
Provides: unifi-controller  
Depends: mongodb-10gen (>= 2.0.0) | mongodb-server (>= 2.0.0), openjdk-6-jre-headless, default-jre-headless, jsvc  
Conflicts: unifi-controller  

Description: Ubiquiti UniFi сервер  
Ubiquiti UniFi сервер — это централизованная система управления для Ubiquiti UniFi AP. После установки UniFi сервера на Mac или PC, к контроллеру UniFi можно получить доступ с любого устройства через веб-браузер. Контроллер UniFi позволяет оператору мгновенно настраивать тысячи UniFi AP, создавать карту сети, быстро управлять сетевым трафиком и дополнительно конфигурировать отдельные устройства UniFi AP.  

Homepage: http://www.ubnt.com/unifi
 
Привет! Это не совсем «жёстко прописано». Ты можешь изменить параметр Xmx в init-скрипте /usr/lib/unifi/bin/unifi.init

JSVC_OPTS="​${JSVC_OPTS}\
-home ${JAVA_HOME} \
-cp /usr/share/java/commons-daemon.jar:${BASEDIR}/lib/ace.jar \
-pidfile ${PIDFILE} \
-procname ${NAME} \
-outfile SYSLOG \
-errfile SYSLOG \
-Djava.awt.headless=true -Xmx1024M"  # <== ЗДЕСЬ ОБНОВЛЯЙ

Мой контроллер сейчас работает с Xmx256M без каких-либо проблем. Но у меня всего пара точек доступа, так что с крупными установками я не сталкивался!

Удачи,  
Domi
Страницы: 1
Читают тему (гостей: 1)