# Устранение неполадок ноды (Q&A)
В этой статье даны ответы на вопросы, связанные с нодой Waves.
# Как отключиться от других нод?
Ответ: Остановите ноду, завершив Java-процесс Waves или выполнив следующую команду:
# sudo systemctl stop waves
Затем задайте значение []
параметра waves.network.known-peers
в вашем файле конфигурации ноды, временно переименуйте файл peers.dat
.
Снова запустите ноду с помощью команды:
java -jar waves.jar waves.conf
# Моя нода, развернутая в Docker, падает сразу после запуска. Почему? Что мне делать?
Ответ: Если ваша нода, развернутая в Docker, падает сразу после запуска, возможно, приложению Docker не хватает памяти.
Решение: Измените настройки в приложении Docker, чтобы предоставить ему больше памяти.
В приложении Docker перейдите в Settings >> Resources >> Advanced.
Задайте 4GB в качестве значения параметра Memory и нажмите Apply & Restart.
# Моя нода упала. Почему? Что мне делать?
Ответ: Нода может упасть по разным причинам. Вы можете определить причину падения, изучив error-сообщения в log-файлах. См. различные кейсы, описанные ниже.
# Ошибка “Too many open files”
Если ваш Linux-based компьютер, на котором запущена нода Waves, также выполняет много других задач, в некоторых случаях нода может падать, выдавая следующую ошибку:
Caused by: org.iq80.leveldb.DBException: IO error: /var/lib/waves/data/33837022.ldb: Too many open files
Ошибка вызвана тем, что в операционной системе одновременно открыто слишком много файлов.
Решение: Вы можете поменять значение по умолчанию на 65536
следующих параметров в файле /etc/security/limits.conf
:
* soft nofile 24000 #soft limits
* hard nofile 65000 #hard limits
а также добавить следующую строку в файл /etc/systemd/system.conf
:
DefaultLimitNOFILE=65536
затем перезапустить компьютер.
# Ошибка “OutOfMemory”
Если на вашем компьютере недостаточно выделенной памяти JVM для запуска ноды, тогда нода упадет, а log-файл будет содержать сообщения об ошибках OutOfMemory.
Используйте следующую команду для поиска таких сообщений в вашем log-файле:
sudo tail -n +1 /var/log/waves/waves.log | grep "OutOfMemory"
Используйте следующую команду для поиска таких сообщений в ваших архивных log-файлах:
sudo zgrep -i "OutOfMemory" /var/log/waves/*
Используйте следующую команду, если вы пользуетесь systemd и у вас нет log-файлов в каталоге /var/log/waves/:
sudo journalctl -u waves | grep "OutOfMemory"
Решение: Вы можете увеличить значение параметра -Xmx
(increase JVM maximum Heap Size).
# Процесс ноды остановлен OOM-Killer'ом
Если на вашем компьютере недостаточно оперативной памяти для нужд ОС, это может остановить процесс вашей ноды и другие процессы, которые потребляют большую часть вашей оперативной памяти. В этом случае ваш log-файл будет содержать сообщения об остановке процесса ноды с помощью OOM-killer.
Используйте следующую команду, чтобы проверить, есть ли такие сообщения в log-файле:
$ journalctl -k | grep 'Kill'
Сообщения об остановке процесса нода с помощью OOM-killer похожи на следующие:
kernel: Out of memory: Kill process 6033 (java) score 367 or sacrifice child
kernel: Killed process 6033 (java) total-vm:29930040kB, anon-rss:10625048kB, file-rss:0kB, shmem-rss:24kB
Решение:
- Убедитесь, что значение параметра
-Xmx
не превышает объем доступной RAM-памяти (RAM-памяти хватает для нужд ОС). Если значение параметра-Xmx
превышает доступную RAM-память, уменьшите значение параметра-Xmx
. Как задать параметр-Xmx
. - Проверьте журналы ядра (kernel logs). Некоторые другие процессы на том же компьютере могут потреблять больше памяти, чем вы ожидаете. Их отключение может помочь освободить память (но прежде чем завершать другие процессы, убедитесь, что вы знаете, что делаете!).
- Вы можете увеличить объем RAM-памяти, подключив swap. Значение параметра
-Xmx
должно быть не более 3/4 доступной памяти при подключенном swap.
Если описанные решения не помогли, отправьте команде фрагменты логов с ошибками и фрагменты waves.log
с записями перед падением ноды.
# Процесс запуска ноды «зависает» в самом начале, последнее сообщение в логе — “c.w.d.LevelDBFactory$ - Loaded...” В чем дело?
Если нода давно не перезапускалась, то загрузка базы данных ноды может занять длительное время из-за разрастания файла MANIFEST-<...>
. Это известная проблема LevelDB. Пока загружается база данных, новые записи в логе ноды не появляются.
Ускорить загрузку базы данных невозможно, остается только ждать. Чтобы убедиться, что загрузка продолжается, вы можете посмотреть лог базы данных — файл LOG
, расположенный в каталоге с базой данных. Путь к каталогу определяется параметром waves.directory.db
конфигурации ноды; пути по умолчанию приведены в разделе Конфигурация ноды. Например, для ноды, установленной из DEB-пакета, по умолчанию база данных находится в каталоге /var/lib/waves/data
, и посмотреть лог базы данных можно с помощью команды
tail -f /var/lib/waves/data/LOG
Дополнительно вы можете проверить размер файла MANIFEST-<...>
. Файл также находится в каталоге с базой данных.
# Как задать параметр -Xmx?
Ответ: Вы можете задать значение параметра -J-Xmx
для вашей ноды в файле application.ini
(DEB-нода) или добавив -Xmx
параметр в команду запуска ноды (jar-нода). Используйте следующую команду (замените {*} именами файлов):
java -Xmx2g -jar {*}.jar {*}.conf
Примечание: Ubuntu Server варсии 18.04/20.04 должен иметь как минимум 512MB RAM для нужд ОС. Если у вас менее 2GB RAM-памяти, вы можете раширить её подключив swap.
Например, если вы хотите выделить 4GB памяти для вашей DEB-ноды, откройте файл application.ini
(MainNet DEB node path: /etc/waves/application.ini
), найти параметр -J-Xmx**
и поменять его на -J-Xmx4g
.
# Другие проблемы
Если вы хотите сообщить о других проблемах, связанных с нодой, или обсудить их с сообществом Waves, см. главу Будьте в курсе.