Skip to content

Панель зависает (100% CPU) при выключенном пуле SSH из-за лавины прямых подключений при любой нестабильности сети #70

Description

@hvaly1

Окружение

  • VPS: 1 vCPU, 1 GB RAM, 10 GB SSD, 100 Mbps
  • OS: Ubuntu 24.04
  • Панель: C³ CELERITY последней версии (Docker Hub)

Проблема

После успешной установки и настройки панели и нод, при выключенном пуле 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. Сервер работает стабильно.

Предложение по исправлению

  1. Включить пул SSH по умолчанию (enabled=true) при установке панели.
  2. Добавить ограничение на количество прямых попыток подключения при выключенном пуле, чтобы панель не могла уйти в "лавину" и уронить сервер.
  3. Добавить тайм-аут между повторными попытками.

Activity

  1. ClickDevTech commented on May 6, 2026

    @ClickDevTech
    Owner

    Привет, спасибо за подробный репорт.

    Что починили:

    • Прямой режим теперь ограничен максимум 3 параллельными handshake'ами
      (настраивается через env SSH_DIRECT_MAX_CONCURRENT).
    • Добавлены ретраи с экспоненциальным backoff.
    • Таймаут снижен до 15с.
    • Параметры (connectTimeout, maxRetries) теперь читаются из
      настроек пула.
    • В пуле закрыта гонка: параллельные вызовы к одной ноде
      разделяют один handshake.
    • В UI-настройках добавлен warning при попытке выключить пул.

    Проверь, пожалуйста, у себя. Решилась ли проблема?

  2. hvaly1 commented on May 7, 2026

    @hvaly1
    Author

    Спасибо за фикс. Единственный оставшийся момент — CPU всё равно скачет до 100% даже на холостом ходу без нод. Это ожидаемо для архитектуры Node.js или планируется оптимизация?

  3. ClickDevTech commented on May 8, 2026

    @ClickDevTech
    Owner

    Зависит от того, что значит "скачет до 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.

  4. hvaly1 commented on May 8, 2026

    @hvaly1
    Author

    Спасибо за фикс, после обновления нагрузка на CPU пришла в норму. До этого постоянно была на пределе 100. Теперь же держится в районе 20-30% и очень периодически поднимается до 80. Но заметил сильные подтормаживания в интерфейсе при скроллинге в меню настроек. Похоже, это не связано с кешем браузера. Если нужны логи или ещё какая-то информация для диагностики — готов предоставить. Это с браузера сафари на маке. Может не до конца обновился кеш. С айфона такого не наблюдается. Но делал все на лету. Еще раз спасибо за обратную связь. Могу еще дальше давать обратную связь - есть множество пожеланий. Но в целом остаюсь очень доволен системой и ее работой. Имею достаточный опыт в работе с marzban и работа с c3 celerity это как кайф и наслаждение после вечного кода перед глазами и настроек nginx и прочего для нормальной работы. Еще из пожеланий - это для мобильной версии панели добавить удаление нод. Далее буду держать обратную связь.

  5. hvaly1 commented on May 8, 2026

    @hvaly1
    Author

    Вот заметил еще нюанс. При настройки ноды - подбора sni. После 5-6 сохранения настроек и перезагрузки - сервер ноды ушел в завис.

  6. ClickDevTech commented on May 8, 2026

    @ClickDevTech
    Owner

    Было бы славно посмотреть на логи xray/панели.

  7. hvaly1 commented on May 9, 2026

    @hvaly1
    Author

    Часть логов была уже удалена. Вот последние попытки переустановить ноду. Но видимо тут не попали логи когда она зависла и также завис доступ по 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

  8. hvaly1 commented on May 9, 2026

    @hvaly1
    Author

    сегодня весь день активно тестировал разные системы программой 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 это именно кайф от настройки без кода.

  9. hvaly1 commented on May 9, 2026

    @hvaly1
    Author

    Итог сегодняшнего моего теста в самых тяжелых условиях для DPI - праздник 9 мая + выходной день + угрозы со всех сторон.
    Marzban TCP Reality + Nginx Stream на каждой ноде (вечный лидер и стандарт) - показал себя ужасно, тогда как ваша панель с чистым Xray на каждой ноде - просто отлично как на протоколах TCP Reality, так и на XHTTP Reality. Hysteria 2 к сожалению блокируется сейчас моментально. Но это естественно еще от провайдера зависит. Так что респект вам ребята еще раз. Ну и вердикт - чистый Xray работает отлично и лучше мешающего Nginx Stream и в вашей панели его реализация показала себя на высоте. Хотя раньше я думал иначе про Nginx Stream а теперь убедился в обратном. Но тут вина может еще и не только Nginx Stream а также и самого Marzban может и грязности сервера и тд и тп. Причин может быть много. Склоняюсь именно к грязности серверов и совокупности факторов. Но факт что ваша система показала себя отлично. Ну и развитие протокола XHTTP это шаг вперед.

  10. hvaly1 commented on May 11, 2026

    @hvaly1
    Author

    Вот еще чтобы хотелось добавить в функционал. Телеграм бота. Чтобы отправлял отчеты о статусах - как в вебхуках. Сейчас через костыль это делаю - разворачиваю системную службу чтобы она принимала вебхуки в формате который отправляет c3 celerity и потом отправляла боту в его формате. Но было бы удобно из коробки сразу это без костылей. Спасибо.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions