Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
Высокая загрузка процессора из-за Java может привести к остановке отклика HTTPS., UniFi Network
 
Привет! Кто-нибудь сталкивался с тем, что https перестаёт отвечать, а процесс java в top показывает 700% при загрузке CPU в 95%? Через примерно сутки https перестаёт отвечать, и мне приходится перезагружать сервер, чтобы система снова заработала нормально.  

Вот скриншот, когда система работает без проблем.  

top - 20:12:19 up 21:21, 1 user, load average: 2.47, 2.99, 3.21  
Tasks: 168 total, 1 running, 167 sleeping, 0 stopped, 0 zombie  
%Cpu(s): 29.0 us, 0.4 sy, 0.0 ni, 69.6 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st  
KiB Mem: 16432336 total, 9793220 used, 6639116 free, 141856 buffers  
KiB Swap: 0 total, 0 used, 0 free, 7830692 cached Mem  

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND  
1318 root 20 0 6188080 1.351g 22416 S 227.8 8.6 3340:50 java  
1343 root 20 0 64.764g 1.550g 1.493g S 9.9 9.9 155:59.05 mongod  
1 root 20 0 33636 4196 2740 S 0.0 0.0 0:01.58 init  
2 root 20 0 0 0 0 S 0.0 0.0 0:00.01 kthreadd  
3 root 20 0 0 0 0 S 0.0 0.0 0:01.34 ksoftirqd/0  
4 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0  
5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:+7  
root 20 0 0 0 0 S 0.0 0.0 1:43.22 rcu_sched  
8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh  
9 root rt 0 0 0 0 S 0.0 0.0 0:00.42 migration/0  
10 root rt 0 0 0 0 S 0.0 0.0 0:00.17 watchdog/0  
11 root rt 0 0 0 0 S 0.0 0.0 0:00.16 watchdog/1  
12 root rt 0 0 0 0 S 0.0 0.0 0:00.43 migration/1  
13 root 20 0 0 0 0 S 0.0 0.0 0:01.43 ksoftirqd/1  
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kworker/1:0  
15 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/1:+  
16 root rt 0 0 0 0 S 0.0 0.0 0:00.16 watchdog/2
 
Возможно, стоит попробовать Oracle Java, если вы ещё не используете его.
 
@nicholas_saw, можешь поделиться своей конфигурацией?
 
Привет, я увеличил Java heap до 4096 МБ, а также unifi.xmx и unifi.xms до 4096. С тех пор у меня был всего один случай, когда пришлось перезапустить контроллер. Это случилось, когда один из моих коллег не смог подключить новые точки доступа. Но это был всего лишь один случай почти за месяц.
 
Настройка памяти Java не помогла решить проблемы с загрузкой процессора, которые я отслеживаю. Сейчас я продолжаю работать над этим случаем с UBNT, и последнее, что я от них слышал — это просьба обновить UniFi до версии 5.6.11 (сейчас в тестировании), чтобы проверить, решит ли это проблему.
 
Привет, заметил ли ты какую-то разницу после того, как увеличил память Java с 1 ГБ до 2 ГБ?
 
Есть какие-то новости по этому поводу? У меня такая же проблема с использованием CPU Java.
 
Хочу поделиться нашим опытом решения этой проблемы для тех, кто запускает UniFi контроллер в облаке (или на VPS) и кастомный captive portal на том же сервере, которые взаимодействуют через API-запросы (с помощью PHP, Python и т.д.). Даже при соблюдении всех мер безопасности (fail2ban, проверка, существует ли MAC AP, проверка, есть ли MAC клиента в контроллере и тому подобное) остаётся возможность, что гость слишком часто обновляет страницу входа.

Есть несколько способов решить эту проблему:
- Вести учёт количества попыток входа в собственной базе данных, например MySQL, и выдавать команду block_sta через API, что позволит потом разблокировать пользователя, если человек просто бешено нажимал обновление.
- Создать правило fail2ban, которое блокирует IP после определённого количества попыток. Проблема в том, что клиент нельзя потом разблокировать через интерфейс UniFi контроллера и, что важнее, блокируется IP, из-за чего все остальные клиенты на этом объекте (даже сам AP) теряют связь с UniFi контроллером.
- Создать правило fail2ban, которое после X попыток выдаёт команду block_sta через API, блокируя не IP, а MAC клиента. Здесь сложность в том, что нужно написать кастомное правило.

Мы выбрали третий вариант, потому что он отвечает нашим трём главным требованиям:
- Возможность "откатить" блокировку через софт UniFi контроллера, что исключает блокировку по IP через обычный fail2ban.
- Блокировать только MAC виновника, поскольку наши AP находятся на разных IP и подключаются к контроллеру в облаке через интернет. Если блокировать IP, потеряется связь с самим AP, а это совсем не то, что нам нужно.
- Не хотели внедрять сторонние пакеты, например MySQL, для учёта количества попыток. К тому же PHP (или Python или любой другой серверный код, отвечающий за проверку captive portal) всё равно создаёт нагрузку на CPU и память при каждой проверке. Fail2ban анализирует запросы и может реагировать до того, как следующий запрос дойдёт до основного сервиса.

Эта проблема появляется, когда у клиента работает заражённое ПО и/или он является частью ботнета с частыми исходящими запросами. Дело в том, что человек согласился с условиями и у него есть 3 часа (в нашем случае) доступа в интернет. Заражённое ПО счастливо, ведь оно может связаться с центральным сервером. По истечении 3 часов доступ блокируется, и снова показывается страница входа. Если человека нет рядом, вредоносное ПО продолжит пытаться связаться с ботнет-сервером десятки раз в секунду. Запросы будут попадать на Apache и снова и снова выдавать страницу входа, пока загрузка CPU UniFi контроллера не достигнет 100%, и (в зависимости от того, стоит ли Varnish и сколько доступно оперативной памяти) в итоге сервер может вовсе зависнуть из-за нехватки памяти.
 
Да, сейчас используется 2,7 ГБ из 15 ГБ оперативной памяти. Как я уже говорил, я увеличил память Java с 1 ГБ до 2 ГБ. UniFi — единственное программное обеспечение, работающее на сервере.
 
Ты проверял использование памяти? Возможно, у тебя заканчивается память, и процессор перегружается из-за частой очистки мусора.
 
Я тоже заметил эту проблему на нашей установке UniFi — java постоянно загружает процессор от 50% до 100%. Мы недавно обновились с версии 5.3.8 до 5.4.16, и проблемы начались именно после этого апгрейда. Мы заметили это, потому что запускаем UniFi на сервере AWS, и там заканчиваются CPU-кредиты из-за увеличенной загрузки процессора.

Программное обеспечение контроллера работает на Ubuntu Server 16.04.2 LTS согласно руководству UBNT по установке UniFi на Ubuntu. Я также следовал инструкции по увеличению значений unifi.xms и unifi.xmx в файле system.properties с 1024Mb до 2048Mb оперативной памяти и перезапустил UniFi. Проблема остаётся.

Сейчас нам либо придётся мириться с простоем, пока AWS не накопит новые CPU-кредиты, либо инвестировать дополнительные средства в более мощный экземпляр AWS. К тому же, у нас запущен гостевой портал на контроллере, поэтому простой — это серьёзная проблема.

Есть ли в разработке у UBNT исправление (временное или постоянное) этой проблемы?
 
У меня так же. Дай знать, как работает CentOS. Спасибо.
 
@asapkota

У меня всё ещё эта проблема. Думаю перейти на CentOS, чтобы проверить, сохранится ли ошибка.
 
Изменил строку JVM_MAX_HEAP_SIZE=1024M на JVM_MAX_HEAP_SIZE=2048M в /usr/lib/unifi/bin/unifi.init. Но это тоже не помогло.
 
@nicholas_saw

Ты всё ещё сталкиваешься с этими проблемами? У меня такая же беда началась сразу после обновления контроллера до версии 5.14.4. Процесс java постоянно грузит процессор на 100%, и контроллер перестаёт отвечать. Приходится по нескольку раз в день перезапускать сервис Unifi. У нас на контроллере около 500 сайтов с общим числом примерно 1000 UAP.
Страницы: 1
Читают тему (гостей: 1)