Как запустить geth на дроплете Digital Ocean с 512Mb RAM?

Когда процесс geth потребляет слишком много памяти, Digital Ocean убивает его (совсем не изящно).

Частично решил проблему, внедрив swap — Настройка ноды geth Ethereum для автоматического запуска в Ubuntu . Но все же получил одно убийство в пределах 2 млн блоков загрузки с запущенным geth --fast --cache=16.

Аналогичный вопрос: можно ли уменьшить использование оперативной памяти go-ethereum (geth)? Ответ здесь - НЕТ.

Есть ли способ ограничить использование памяти geth или, может быть, убить ее «более изящно» , чем Digital Ocean, с помощью чего-то вроде monit ?

Ответы (3)

Вроде 2 гига свопа и swappiness 30 достаточно, чтобы гет работал без сбоев всего с 512 мб ОЗУ.

Сейчас почти 2 месяца. У меня полная синхронизация (блок 3097083). И ни разу не было сбоев. Поэтому я отмечаю этот ответ как правильный.

Я также слежу за geth с помощью monit , который перезапустит geth в случае сбоя.

Мой конфиг подробно здесь - Как запустить geth на 512Mb RAM дроплете Digital Ocean

Вы занимаетесь майнингом в одиночку, без какого-либо майнингового пула в простой капле. Так что просто хотел узнать, сколько времени потребуется, чтобы добыть один эфир?
@DipenDedania я не занимаюсь майнингом. Я просто синхронизирую блокчейн.

С таким ограниченным количеством ресурсов лучше всего работать в режиме облегченного клиента. Да, это альфа-версия, но ее очень удобно использовать, если вы просто играете с ней и не используете большие суммы.

В зависимости от вашего процессора у вас также могут возникнуть проблемы с созданием учетных записей на сервере, если это так, то также добавьте --lightkdf, это позволит менее обременительный метод (хотя, вероятно, немного менее безопасный), чтобы ваш сервер мог завершить процесс создания кошелька до жесткого закодированный порог тайм-аута.

$geth --light --lightkdf

Мы успешно запускаем легкий клиент на BeagleBone Black, у которого также всего 512 МБ оперативной памяти, без проблем.

Наконец, вот некоторые цифры, которые я собрал на Raspberry Pi3 относительно использования ресурсов клиента geth light по состоянию на выпуск, доступный 12 сентября 2016 года:

  • Бинарный файл geth: 25 МБ
  • данные цепочки: 54,9 МБ
  • процессор: 12%
  • оперативная память: 162 МБ
  • синхронизация заголовков: 9 мин.

Запустить его на таком малом объеме оперативной памяти может быть сложно. Я знаю, что разработчики пытались уменьшить использование ОЗУ, чтобы он мог работать на Raspberry PI, но даже у него 1 ГБ ОЗУ.

В дополнение к созданию большого файла подкачки вы можете попробовать сжатие ОЗУ. Это может помочь на VPS с достаточной мощностью ЦП, но ограниченными ресурсами ОЗУ. В Ubuntu вы можете просто запустить команду sudo apt-get install zram-config, и она установит и настроит ее. Чтобы убедиться, что он работает, запустите команду sudo cat /proc/swaps, и вы должны увидеть что-то вроде этого:

Filename                                Type            Size    Used    Priority
/dev/sda4                               partition       2095280 0       -1
/dev/zram0                              partition       507596  65800   5
/dev/zram1                              partition       507596  65728   5

Для автоматического запуска и перезапуска Ethereum в Ubuntu я бы рекомендовал использовать Systemd. Просто отредактируйте конфиг ниже и поместите его в файл /lib/systemd/system/geth.service:

[Unit]
Description=Ethereum Go client

[Service]
ExecStart=/usr/bin/geth --lightserv 25 --lightpeers 50
Restart=always
RestartSec=30
Type=simple
User=ethereum

[Install]
WantedBy=default.target

Конфигурация Systemd выше указывает, что клиент работает как легкий сервер от имени пользователя ethereum. Вы должны отредактировать эту конфигурацию по мере необходимости.

Затем запустите команду sudo systemctl enable geth, чтобы включить автозапуск при загрузке. Используйте следующие команды для запуска, остановки и проверки состояния:

  • sudo systemctl start geth
  • sudo systemctl stop geth
  • sudo systemctl status geth

Если у вас продолжают возникать проблемы, я бы посоветовал вам попробовать экспериментальный легкий клиент. Он предназначен для систем с низким энергопотреблением и имеет гораздо меньшую нагрузку на ОЗУ и жесткий диск.

ExecStart=/usr/bin/geth --light

Большое спасибо за ответ! Я уже использую monit для мониторинга процесса geth и его автоматического перезапуска при необходимости. Я также использую swap 1G со swapiness = 30. Теперь у меня полная синхронизация и только один сбой с geth --fast --cache=16. Я немного боюсь использовать сжатие ОЗУ, так как мой процессор уже загружен на 20-30%. И я с нетерпением жду релиза легкого клиента. Все еще надеюсь найти лучшее решение.