Repository navigation
Панель зависает (100% CPU) при выключенном пуле SSH из-за лавины прямых подключений при любой нестабильности сети #70
Description
Activity
- added a commit that references this issue
on May 6, 2026 Привет, спасибо за подробный репорт.
Что починили:
- Прямой режим теперь ограничен максимум 3 параллельными handshake'ами
(настраивается через envSSH_DIRECT_MAX_CONCURRENT). - Добавлены ретраи с экспоненциальным backoff.
- Таймаут снижен до 15с.
- Параметры (
connectTimeout,maxRetries) теперь читаются из
настроек пула. - В пуле закрыта гонка: параллельные вызовы к одной ноде
разделяют один handshake. - В UI-настройках добавлен warning при попытке выключить пул.
Проверь, пожалуйста, у себя. Решилась ли проблема?
- Прямой режим теперь ограничен максимум 3 параллельными handshake'ами
Спасибо за фикс. Единственный оставшийся момент — CPU всё равно скачет до 100% даже на холостом ходу без нод. Это ожидаемо для архитектуры Node.js или планируется оптимизация?
Зависит от того, что значит "скачет до 100%".
Короткие пики раз в минуту (1 - 2 секунды) - это норма для 1 vCPU.
Раз в минуту срабатывают cron-задачи (health-check, stats), плюс рядом
в контейнере живут mongod и redis. На одном ядре любой их tick
коротко выжирает 100% - это не зависание и оптимизировать тут особо нечего.Постоянное 100% без нод - это уже баг, и мы такого не воспроизводили.
Если у тебя именно такой случай, скинь, пожалуйста:docker statsза минуту (видно, кто реально жрёт: panel / mongo / redis),top -H -p $(pidof node)внутри контейнера панели,- уровень логов (LOG_LEVEL) - на debug на слабой машине Mongo-запись логов сама по себе заметна.
По метрикам сразу станет ясно, надо ли что-то докручивать или это просто фон базы/редиса на 1 vCPU.
Спасибо за фикс, после обновления нагрузка на CPU пришла в норму. До этого постоянно была на пределе 100. Теперь же держится в районе 20-30% и очень периодически поднимается до 80. Но заметил сильные подтормаживания в интерфейсе при скроллинге в меню настроек. Похоже, это не связано с кешем браузера. Если нужны логи или ещё какая-то информация для диагностики — готов предоставить. Это с браузера сафари на маке. Может не до конца обновился кеш. С айфона такого не наблюдается. Но делал все на лету. Еще раз спасибо за обратную связь. Могу еще дальше давать обратную связь - есть множество пожеланий. Но в целом остаюсь очень доволен системой и ее работой. Имею достаточный опыт в работе с marzban и работа с c3 celerity это как кайф и наслаждение после вечного кода перед глазами и настроек nginx и прочего для нормальной работы. Еще из пожеланий - это для мобильной версии панели добавить удаление нод. Далее буду держать обратную связь.
Reacted by ClickDevTechВот заметил еще нюанс. При настройки ноды - подбора sni. После 5-6 сохранения настроек и перезагрузки - сервер ноды ушел в завис.
Было бы славно посмотреть на логи xray/панели.
Часть логов была уже удалена. Вот последние попытки переустановить ноду. Но видимо тут не попали логи когда она зависла и также завис доступ по ssh и пришлось делать жесткую перезагрузку сервера и несколько раз пытался после этого поставить ноду заново и вылазила ошибка. Пришлось переустановить Ubuntu на сервере - нода таки стала нормально. Если что-то подобное произойдет то дам знать. Главное что процессор успокоился и работает теперь в спокойном режиме. Из пожеланий вот только тормоза интерфейса в Настройках. И если с телефона управлять панелью то кнопка удалить ноду доступна только в режиме горизонтальном. В остальном функционал панели отличный. Так держать ребята. Буду давать обратную связь по пожеланиям по ходу пользования панелью.
2026-05-08 23:05:49 [INFO]: [WS] Logs stream disconnected
2026-05-08 23:06:14 [INFO]: [WS] Logs stream connected
2026-05-08 23:06:35 [INFO]: [WS] Logs stream disconnected
2026-05-08 23:07:20 [INFO]: [WS] Logs stream connected
2026-05-08 23:07:25 [INFO]: [WS] Logs stream disconnected
2026-05-08 23:07:47 [INFO]: [SSHPool] Cleanup: 3 idle connections removed [pool: 0]
2026-05-08 23:09:17 [INFO]: [Panel] Created xray node SS | TCP (cc.ee.cdn.protexnet.ru)
2026-05-08 23:09:17 [INFO]: [Cache] INVALIDATE all subscriptions (1 keys)
2026-05-08 23:09:32 [INFO]: [Panel] Starting setup for node SS | TCP (type: xray, role: standalone)
2026-05-08 23:09:32 [INFO]: [XraySetup] Starting Xray setup for SS | TCP (cc.ee.cdn.protexnet.ru)
2026-05-08 23:09:32 [INFO]: [XraySetup] Connecting via SSH...
2026-05-08 23:09:32 [INFO]: [XraySetup] Error: connect ECONNREFUSED 89.169.15.58:22
2026-05-08 23:09:43 [INFO]: [Panel] Starting setup for node SS | TCP (type: xray, role: standalone)
2026-05-08 23:09:43 [INFO]: [XraySetup] Starting Xray setup for SS | TCP (cc.ee.cdn.protexnet.ru)
2026-05-08 23:09:43 [INFO]: [XraySetup] Connecting via SSH...
2026-05-08 23:09:44 [INFO]: [XraySetup] SSH connected
2026-05-08 23:09:44 [INFO]: [XraySetup] Installing Xray-core...
2026-05-08 23:10:00 [WARN]: [Agent] SS | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:10:01 [WARN]: [Agent] SS | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:10:01 [ERROR]: [Agent Stats] SS | TCP error: connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:10:01 [INFO]: [Agent Stats] PL | XHTTP: 1 online, node ↑0.6MB ↓2.1MB
2026-05-08 23:11:00 [WARN]: [Agent] SS | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:11:50 [INFO]: [XraySetup] Error: Xray installation failed: Exit code: 1
2026-05-08 23:12:00 [WARN]: [Agent] SS | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:13:00 [WARN]: [Agent] SS | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:14:00 [WARN]: [Agent] SS | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:14:03 [INFO]: [Xray Sync] Updating config for node EE | TCP (cc.ee.cdn.protexnet.ru)
2026-05-08 23:14:03 [INFO]: [SSHPool] ✓ Connected: EE | TCP (cc.ee.cdn.protexnet.ru) [pool: 1]
2026-05-08 23:14:06 [INFO]: [Xray Sync] Node EE | TCP: config uploaded to /usr/local/etc/xray/config.json
2026-05-08 23:14:07 [WARN]: [Agent] Node EE | TCP: cc-agent did not become active within ~5s (will continue anyway)
2026-05-08 23:14:07 [INFO]: [Agent] Node EE | TCP: cc-agent config refreshed (1 inbound(s))
2026-05-08 23:14:07 [WARN]: [Xray Sync] Node EE | TCP: agent restart failed: connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:14:07 [WARN]: [Xray Sync] Node EE | TCP: agent sync failed: connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:14:07 [WARN]: [Agent] EE | TCP health check failed: connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:14:18 [INFO]: [Panel] Starting setup for node EE | TCP (type: xray, role: standalone)
2026-05-08 23:14:18 [INFO]: [XraySetup] Starting Xray setup for EE | TCP (cc.ee.cdn.protexnet.ru)
2026-05-08 23:14:18 [INFO]: [XraySetup] Connecting via SSH...
2026-05-08 23:14:18 [INFO]: [XraySetup] SSH connected
2026-05-08 23:14:18 [INFO]: [XraySetup] Installing Xray-core...
2026-05-08 23:14:47 [INFO]: [XraySetup] Xray-core installed
2026-05-08 23:14:47 [INFO]: [XraySetup] Generating x25519 Reality keys...
2026-05-08 23:14:47 [INFO]: [XraySetup] Reality keys generated. PublicKey: vwM_5PPa7s3CpOn5lCl7tnZ-prNMif6XNws433QBQXo
2026-05-08 23:14:47 [INFO]: [XraySetup] Reality settings saved to database
2026-05-08 23:14:47 [INFO]: [XraySetup] Generating Xray config...
2026-05-08 23:14:48 [INFO]: [XraySetup] Config uploaded to /usr/local/etc/xray/config.json (1 users)
2026-05-08 23:14:48 [INFO]: [XraySetup] Opening firewall ports (443, api:61000)...
2026-05-08 23:15:00 [WARN]: [Agent] EE | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:15:00 [ERROR]: [Agent Stats] EE | TCP error: connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:15:00 [INFO]: [Agent Stats] PL | XHTTP: 1 online, node ↑0.1MB ↓0.4MB
2026-05-08 23:15:00 [WARN]: [Agent] EE | TCP: unavailable - connect ECONNREFUSED 89.169.15.58:62080
2026-05-08 23:15:11 [INFO]: [XraySetup] Firewall configured
2026-05-08 23:15:11 [INFO]: [XraySetup] Installing systemd service and starting Xray...
2026-05-08 23:15:15 [INFO]: [XraySetup] Xray service started
2026-05-08 23:15:15 [INFO]: [XraySetup] Xray setup completed successfully!
2026-05-08 23:15:15 [INFO]: [AgentSetup] Connecting via SSH for agent installation...
2026-05-08 23:15:15 [INFO]: [AgentSetup] Agent firewall mode: remote
2026-05-08 23:15:15 [INFO]: [AgentSetup] Panel source for firewall: cc.cdn.protexnet.ru
2026-05-08 23:15:15 [INFO]: [AgentSetup] Installing CC Agent...
2026-05-08 23:15:15 [INFO]: [AgentSetup] Downloading cc-agent binary...
2026-05-08 23:15:19 [INFO]: [AgentSetup] Binary downloaded
2026-05-08 23:15:19 [INFO]: [AgentSetup] Writing agent config...
2026-05-08 23:15:20 [INFO]: [AgentSetup] Config written
2026-05-08 23:15:20 [INFO]: [AgentSetup] Generating TLS certificate...
2026-05-08 23:15:20 [INFO]: [AgentSetup] TLS certificate ready
2026-05-08 23:15:20 [INFO]: [AgentSetup] Installing systemd service...
2026-05-08 23:15:21 [INFO]: [AgentSetup] Service unit installed
2026-05-08 23:15:21 [INFO]: [AgentSetup] Configuring firewall and starting service...
2026-05-08 23:15:24 [INFO]: [AgentSetup] Agent installed: installed
2026-05-08 23:15:24 [INFO]: [AgentSetup] Agent metadata saved to database
2026-05-08 23:16:17 [INFO]: [SSHPool] Cleanup: 1 idle connections removed [pool: 0]
2026-05-08 23:20:00 [INFO]: [Agent Stats] EE | TCP: 1 online, node ↑0.0MB ↓0.0MB
2026-05-08 23:20:00 [INFO]: [Agent Stats] PL | XHTTP: 1 online, node ↑0.0MB ↓0.1MB
2026-05-09 00:00:00 [INFO]: [Stats] Daily snapshot saved: 2026-05-09T00:00:00.000Z
2026-05-09 00:05:00 [INFO]: [Cron] Saving monthly stats snapshot
2026-05-09 00:05:00 [INFO]: [Stats] Monthly snapshot saved: 2026-05-09T00:00:00.000Z
2026-05-09 00:05:00 [INFO]: [Stats] Cleanup: hourly=240, daily=0, monthly=0
2026-05-09 00:15:00 [INFO]: [UaStats] Flushed 2 UA events for 2026-05-08
2026-05-09 01:00:00 [INFO]: [Stats] Daily snapshot saved: 2026-05-09T01:00:00.000Z
2026-05-09 02:00:00 [INFO]: [Stats] Daily snapshot saved: 2026-05-09T02:00:00.000Z
2026-05-09 03:00:00 [INFO]: [Stats] Daily snapshot saved: 2026-05-09T03:00:00.000Z
2026-05-09 03:00:00 [INFO]: [Cron] Cleaning old logsсегодня весь день активно тестировал разные системы программой DPI Detector и подбором SNI через RealiTLScanner - Marzban с Nginx Stream и протоколами TCP Reality с 4 серверами (Швеция, Германия, Англия, США) и C3 CELERITY и протоколами TCP Reality и XHTTP Reality c 3 cерверами (Польша, Эстония, каскад Россия>Финляндия) и результаты тестов таковы:
Сервер Система Протокол Средний балл Статус
Польша C3 CELERITY XHTTP REALITY 97% ✅
Эстония C3 CELERITY TCP REALITY 97% ✅
RU-FI Cascade C3 CELERITY Каскад 97% ✅
Швеция Marzban TCP REALITY 93% ❌
Германия Marzban TCP REALITY 94.7% ❌
Великобритания Marzban TCP REALITY 92% ❌
США Marzban TCP REALITY 71.7% ❌
Вероятнее всего география серверов и сами sni тут играет значение - но в любом случае вам ребята огромный респект за ваш проект - развития и дальше. Система показала себя великолепно. Удобство пользования - на высоте. Каскадная система с правилами - работает отлично.Буду с удовольствием помогать развитию обратной связью. Главное в C3 CELERITY это именно кайф от настройки без кода.Итог сегодняшнего моего теста в самых тяжелых условиях для DPI - праздник 9 мая + выходной день + угрозы со всех сторон.
Marzban TCP Reality + Nginx Stream на каждой ноде (вечный лидер и стандарт) - показал себя ужасно, тогда как ваша панель с чистым Xray на каждой ноде - просто отлично как на протоколах TCP Reality, так и на XHTTP Reality. Hysteria 2 к сожалению блокируется сейчас моментально. Но это естественно еще от провайдера зависит. Так что респект вам ребята еще раз. Ну и вердикт - чистый Xray работает отлично и лучше мешающего Nginx Stream и в вашей панели его реализация показала себя на высоте. Хотя раньше я думал иначе про Nginx Stream а теперь убедился в обратном. Но тут вина может еще и не только Nginx Stream а также и самого Marzban может и грязности сервера и тд и тп. Причин может быть много. Склоняюсь именно к грязности серверов и совокупности факторов. Но факт что ваша система показала себя отлично. Ну и развитие протокола XHTTP это шаг вперед.Вот еще чтобы хотелось добавить в функционал. Телеграм бота. Чтобы отправлял отчеты о статусах - как в вебхуках. Сейчас через костыль это делаю - разворачиваю системную службу чтобы она принимала вебхуки в формате который отправляет c3 celerity и потом отправляла боту в его формате. Но было бы удобно из коробки сразу это без костылей. Спасибо.


Окружение
Проблема
После успешной установки и настройки панели и нод, при выключенном пуле SSH (
SSH Pool enabled=false) сервер внезапно зависает с загрузкой CPU 100% в процессе обычной работы. Это происходит не при установке, а при штатной эксплуатации — при любой нестабильности сети между панелью и нодой.Проблема воспроизводится стабильно: достаточно кратковременного обрыва связи с любой нодой (например, из-за DPI провайдера, перегрузки сети или перезагрузки ноды), чтобы панель ушла в "лавину".
Причина
При выключенном пуле SSH механизм
falling back to directпри любом сбое подключения к ноде начинает создавать сотни прямых SSH-соединений за короткое время. Это забивает CPU до 100%, сервер перестаёт отвечать на любые запросы.Логи в момент зависания:
[WARN]: [SSH] Pool failed for RU Hysteria 2, falling back to direct
[WARN]: [SSH] Pool failed for RU-SE Bridge, falling back to direct
[WARN]: [SSH] Pool failed for SE Hysteria 2, falling back to direct
[WARN]: [SSH] Pool failed for SE Xray VLESS, falling back to direct
...
[WARN]: [Agent] SE Xray VLESS: unavailable - timeout of 15000ms exceeded
После этого сервер полностью зависает. Помогает только жёсткая перезагрузка.
Решение
Включение пула SSH (
SSH Pool enabled=true) полностью решает проблему. После включения пула со стандартными настройками логи выглядят так:[INFO]: [SSHPool] ✓ Connected: RU Hysteria 2 [pool: 1]
[INFO]: [SSHPool] ✓ Connected: RU-SE Bridge [pool: 2]
[INFO]: [SSHPool] ✓ Connected: SE Hysteria 2 [pool: 3]
[INFO]: [SSHPool] ✓ Connected: SE Xray VLESS [pool: 4]
[INFO]: [SSHPool] Cleanup: 4 idle connections removed [pool: 0]
Никаких
Pool failed,falling back to directилиunavailable - timeout. Сервер работает стабильно.Предложение по исправлению
enabled=true) при установке панели.