В документации указано, что для полной ноды рекомендуется использовать не менее 16 ГБ оперативной памяти. Но с недавних пор нужен еще и клиент консенсуса, который тоже требует память. В общем на сервере с 16 ГБ оперативной памяти с недавних пор стал отваливаться geth и в логах появился out of memory
WARNING: Out of memory killer killed these executables
geth : 1 Time (s)
Поиск показал, что такое встречается не только у меня, и однозначного решения (ну кроме как попробовать увеличить объем памяти) нет. Поэтому я подбирал параметры запуска сервиса, и у меня получилось. Основным параметром, который помог — стал размер кеша. Уменьшил с 4 до 2 ГБ. На производительности это не сказалось, но стало работать стабильно. Не факт, что это поможет всем, но стоит попробовать. Заодно получилось подобрать параметры сервиса для нормального автоматического перезапуска ноды. Итак, вот мой текущий файл запуска:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
cat /lib/systemd/system/geth.service [Unit] Description=Ethereum go client After=syslog.target network.target [Service] Type=simple User=geth Group=geth ExecStart=/usr/bin/geth \ --http \ --http.addr "127.0.0.1" \ --authrpc.addr localhost \ --authrpc.port 8551 \ --authrpc.vhosts localhost \ --authrpc.jwtsecret /var/lib/jwtsecret/jwt.hex \ --syncmode "snap" \ # --cache 4096 \ --cache 2048 \ --metrics \ --allow-insecure-unlock StandardOutput=syslog StandardError=syslog SyslogIdentifier=geth KillMode=process KillSignal=SIGINT TimeoutStopSec=90 Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target |
Как-то так.