ドキュメント: erigon.gitbook.ioブログ: erigon.substack.com Twitter: x.com/ErigonEth
Erigon は、効率性の最前線にある Ethereum (埋め込み可能なコンセンサス層を備えた実行層) の実装です。デフォルトではアーカイブ ノード。
erigon
caplin
ポートbeaconAPI
ポートshared
ポートother
ポートsystemd
例htop
間違ったメモリ使用量が表示される重要なデフォルト: Erigon はデフォルトでアーカイブ ノードです: 小さくする必要がある場合は--prune.mode
を使用してください (最初の起動後に変更することはできません)
In-depth links are marked by the microscope sign (?)
RAM: >=32GB、Golang >= 1.22; GCC 10+ または Clang。 Linux の場合: カーネル > v4。 64 ビット アーキテクチャ。
SSD または NVMe。 HDD はお勧めしません - HDD では、エリゴンは常にチェーン先端から N ブロック後ろに留まりますが、遅れを取ることはありません。 SSD は容量に近づくとパフォーマンスが低下することに注意してください。 CloudDrives (gp3 など): クラウド ネットワーク ドライブではブロックの実行が遅い
? Erigon3 データディレクトリのサイズの詳細
?保存されるデータの種類の詳細については、こちらをご覧ください
リリースノートとバイナリ
最新リリースをビルドします (これは、ノードを実行したいだけのほとんどのユーザーに適しています)。
git clone --branch release/ < x.xx > --single-branch https://github.com/erigontech/erigon.git
cd erigon
make erigon
./build/bin/erigon
ダウンロード速度を--torrent.download.rate=20mb
増加させます。 ? See Downloader docs
--datadir
使用して、データを保存する場所を選択します。
Gnosis Chain には--chain=gnosis
、Polygon Mainnet には--chain=bor-mainnet
、Polygon Amoy には--chain=amoy
使用します。 Gnosis Chain の場合は、Erigon (https://docs.gnosischain.com/category/step--3---run-consensus-client) とともに Consensus Layer クライアントが必要です。
make help
実行すると、Makefile で使用できる便利なコマンドが一覧表示され、説明が表示されます。
datadir
chaindata # "Recently-updated Latest State", "Recent History", "Recent Blocks"
snapshots # contains `.seg` files - it's old blocks
domain # Latest State
history # Historical values
idx # InvertedIndices: can search/filtering/union/intersect them - to find historical data. like eth_getLogs or trace_transaction
accessors # Additional (generated) indices of history - have "random-touch" read-pattern. They can serve only `Get` requests (no search/filters).
txpool # pending transactions. safe to remove.
nodes # p2p peers. safe to remove.
temp # used to sort data bigger than RAM. can grow to ~100gb. cleaned at startup.
# There is 4 domains: account, storage, code, commitment
1 つの nvme-raid に datadir を保存できる場合は、素晴らしいです。それができない場合は、安価なドライブに履歴を保存することができます。
# place (or ln -s) `datadir` on slow disk. link some sub-folders to fast (low-latency) disk.
# Example: what need link to fast disk to speedup execution
datadir
chaindata # link to fast disk
snapshots
domain # link to fast disk
history
idx
accessors
temp # buffers to sort data >> RAM. sequential-buffered IO - is slow-disk-friendly
# Example: how to speedup history access:
# - go step-by-step - first try store `accessors` on fast disk
# - if speed is not good enough: `idx`
# - if still not enough: `history`
# eth-mainnet - archive - April 2024
du -hsc /erigon/ *
6G /erigon/caplin
50G /erigon/chaindata
1.8T /erigon/snapshots
1.9T total
du -hsc /erigon/snapshots/ *
100G /erigon/snapshots/accessor
240G /erigon/snapshots/domain
260G /erigon/snapshots/history
410G /erigon/snapshots/idx
1.7T /erigon/snapshots
# bor-mainnet - archive - Jun 2024
du -hsc /erigon/ *
160M /erigon/bor
50G /erigon/chaindata
3.7T /erigon/snapshots
3.8T total
du -hsc /erigon/snapshots/ *
260G /erigon-data/snapshots/accessor
850G /erigon-data/snapshots/domain
650G /erigon-data/snapshots/history
1.4T /erigon-data/snapshots/idx
4.1T /erigon/snapshots
debug_getModifiedAccountsByNumber
それを返します。--internalcl
はデフォルトで有効になっています。無効にするには--externalcl
使用します。chaindata
15gb
未満です。 rm -rf chaindata
しても問題ありません。 (増大を防ぐため: --batchSize <= 1G
を推奨します)--prune
フラグが変更されました: --prune.mode
参照してください (デフォルト: archive
、full: full
、EIP-4444: minimal
)--sync.loop.block.limit=5_000
がデフォルトで有効になっていますフラグ:
verbosity
log.console.verbosity
(冗長性のverbosity
をオーバーライド)log.json
log.console.json
( log.json
のエイリアス)log.dir.path
log.dir.prefix
log.dir.verbosity
log.dir.json
stdout/stderr にのみログを記録するには、 --verbosity
(またはlog.console.verbosity
) フラグを使用して、最高の出力ログ レベルを指定する int 値を指定します。
LvlCrit = 0
LvlError = 1
LvlWarn = 2
LvlInfo = 3
LvlDebug = 4
LvlTrace = 5
ディスク上に収集されるログの出力ディレクトリを設定するには、 --log.dir.path
を設定してください。erigon からerigon
されたファイル名を変更したい場合は、 --log.dir.prefix
フラグも別の名前に設定する必要があります。フラグ--log.dir.verbosity
も、上記と同じ int 値、または文字列値 (例: 「debug」または「info」) を使用して、このロギングの詳細度を制御するために使用できます。ディスクログのデフォルトの詳細度は「debug」(4) です。
ログ形式は、ブール フラグlog.json
またはlog.console.json
を使用するか、ディスク出力--log.dir.json
使用して json に設定できます。
Erigon はデフォルトで「オールインワン バイナリ」ソリューションですが、TxPool を個別のプロセスとして開始することも可能です。 JSON RPC レイヤー (RPCDaemon)、p2p レイヤー (Sentry)、履歴ダウンロード レイヤー (Downloader)、コンセンサスについても同様です。リソースの制限、拡張、独自の実装による置き換え、セキュリティなどの明確な理由がない限り、サービスを独立したプロセスとして開始しないでください。 Erigon のサービスを独立したプロセスとして開始する方法については、docker-compose.yml を参照してください。各サービスには独自の./cmd/*/README.md
ファイルがあります。エリゴンブログ。
Ethereum Mainnet、Sepolia、Holesky、Gnosis の組み込みコンセンサス。外部コンセンサス層を使用するには: --externalcl
。
Erigon を試してみたい場合は、公開テストネットの 1 つである Holesky (または Amoy) の同期を開始するのが良い選択肢です。同期ははるかに速く、ディスク容量もそれほど必要としません。
git clone https://github.com/erigontech/erigon.git
cd erigon
make erigon
./build/bin/erigon --datadir= < your_datadir > --chain=holesky --prune.mode=full
--datadir
オプションを使用すると、Erigon ファイルをデフォルト以外の場所に保存できることに注意してください。ディレクトリの名前--datadir
--chain
のチェーンの名前と一致する必要はありません。
ブロックの生成はイーサリアムとグノーシス チェーンで完全にサポートされています。 Polygon はまだ実験段階です。
Erigon フラグは--config
フラグを使用して TOML 構成ファイルを通じて設定できます。構成ファイルに設定されたフラグは、Erigon コマンド ラインにフラグを直接書き込むことで上書きできます。
./build/bin/erigon --config ./config.toml --chain=sepolia
設定ファイルにchain : "mainnet"
があると仮定すると、 --chain=sepolia
を追加すると、toml設定ファイル内のフラグを上書きでき、チェーンをsepoliaに設定できます。
datadir = ' your datadir '
port = 1111
chain = " mainnet "
http = true
"private.api.addr" = " localhost:9090 "
"http.api" = [ " eth " , " debug " , " net " ]
Erigon は、コンセンサス層クライアント (CL) の実行層 (EL) として使用できます。デフォルト設定でOKです。
CL クライアントが別のデバイス上にある場合は、 --authrpc.addr 0.0.0.0
(エンジン API はデフォルトでローカルホストでリッスンします) と--authrpc.vhosts
(
はソース ホストです) を追加します。 any
。
コンセンサス層と実行層の間に安全な接続を確立するために、JWT 秘密キーが自動的に生成されます。
JWT 秘密鍵は、デフォルトでjwt.hex
という名前で datadir に存在し、そのパスはフラグ--authrpc.jwtsecret
で指定できます。
接続を正常に確立するには、この情報をコンセンサス層でも指定する必要があります。詳細については、こちらをご覧ください。
Erigon が実行されたら、CL クライアントを
に指定する必要があります。ここで、 localhost
または Erigon を実行しているデバイスの IP アドレスのいずれかであり、さらに Erigon によって作成された JWT シークレット パスも指定する必要があります。
Caplin は、Prysm、Lighthouse、Teku、Nimbus、Lodestar などの本格的な検証用コンセンサス クライアントです。その目標は次のとおりです。
新しいコンセンサス レイヤーを開発した主な理由は、それによって得られる可能性のある利点を実験するためです。たとえば、Engine API は Erigon ではうまく機能しません。 Engine API は一度に 1 ブロックずつデータを送信しますが、これは Erigon の動作方法には適していません。 Erigon は、多くのブロックを同時に処理できるように設計されており、データを効率的に並べ替えて処理する必要があります。したがって、Erigon にとっては、エンジン API に依存するのではなく、ブロックを独立して処理する方が良いでしょう。
Caplin はデフォルトで有効になっています。これを無効にしてエンジン API を有効にするには、 --externalcl
フラグを使用します。その時点から、外部のコンセンサス層は必要なくなります。
Caplin には、歴史的な州とブロックのアーカイブ モードもあります。 --caplin.archive
フラグを使用して有効にできます。 Caplin の Beacon API を有効にするには、フラグ--beacon.api=
を追加する必要があります。例: --beacon.api=beacon,builder,config,debug,node,validator,lighthouse
すべてのエンドポイントを有効にします。 **注: Caplin はステーキング対応ではないため、集約エンドポイントはまだ実装されていません。さらに、Beacon API を有効にすると、RAM の使用量が 6 GB 増加します。
競合を避けるために 6 つのフラグを定義します: --datadir --port --http.port --authrpc.port --torrent.port --private.api.addr
。同じマシン上の複数のチェーンの例:
# mainnet
./build/bin/erigon --datadir="" --chain=mainnet --port=30303 --http.port=8545 --authrpc.port=8551 --torrent.port=42069 --private.api.addr=127.0.0.1:9090 --http --ws --http.api=eth,debug,net,trace,web3,erigon
# sepolia
./build/bin/erigon --datadir="" --chain=sepolia --port=30304 --http.port=8546 --authrpc.port=8552 --torrent.port=42068 --private.api.addr=127.0.0.1:9091 --http --ws --http.api=eth,debug,net,trace,web3,erigon
パスにスペースが含まれる場合は引用符で囲みます。
? Detailed explanation is DEV_CHAIN.
ネットワーク帯域幅が良好な場合、EthereumMainnet FullNode は 3 時間で同期します: OtterSync は同期できます
フラットKVストレージ。 Erigon は、キーと値のデータベースを使用し、アカウントとストレージを簡単な方法で保存します。
? See our detailed DB walkthrough here.
前処理中。一部の操作では、Erigon は一時ファイルを使用してデータをメイン DB に挿入する前に前処理します。これにより、書き込みの増幅が軽減され、DB 挿入が桁違いに高速になります。
? See our detailed ETL explanation here.
プレーン状態
単一のアカウント/状態のトライ。 Erigon は、アカウントとストレージの両方に単一の Merkle トライを使用します。
? Staged Sync Readme
Erigon のコンポーネント (txpool、rpcdaemon、スナップショット ダウンローダー、セントリーなど) のほとんどは、Erigon 内で、同じサーバー (または別のサーバー) 上の独立したプロセスとして動作できます。例:
make erigon rpcdaemon
./build/bin/erigon --datadir=/my --http=false
# To run RPCDaemon as separated process: use same `--datadir` as Erigon
./build/bin/rpcdaemon --datadir=/my --http.api=eth,erigon,web3,net,debug,trace,txpool --ws
--rpc.batch.concurrency
、 --rpc.batch.limit
、 --db.read.concurrency
によりスループットを向上させます。--http.compression
、 --ws.compression
を無効にしてスループットを向上させます。 ? See RPC-Daemon docs
docker compose up prometheus grafana
、詳細なドキュメント。
# please use git branch name (or commit hash). don't use git tags
go mod edit -replace github.com/erigontech/erigon-lib=github.com/erigontech/erigon/erigon-lib@5498f854e44df5c8f0804ff4f0747c0dec3caad5
go get github.com/erigontech/erigon@main
go mod tidy
erigon
成分 | ポート | プロトコル | 目的 | 暴露すべき |
---|---|---|---|---|
エンジン | 9090 | TCP | gRPC サーバー | プライベート |
エンジン | 42069 | TCPとUDP | スナップ同期 (Bittorrent) | 公共 |
エンジン | 8551 | TCP | エンジン API (JWT 認証) | プライベート |
見張り番 | 30303 | TCPとUDP | eth/68ピアリング | 公共 |
見張り番 | 30304 | TCPとUDP | eth/67ピアリング | 公共 |
見張り番 | 9091 | TCP | 受信 gRPC 接続 | プライベート |
rpcデーモン | 8545 | TCP | HTTP、WebSocket、GraphQL | プライベート |
通常、30303 と 30304 は、着信ピアリング接続を許可するためにインターネットに公開されます。 9090 は、rpcdaemon またはその他の接続 (例: rpcdaemon -> erigon) に対して内部的にのみ公開されます。ポート 8551 (JWT 認証済み) は、コンセンサス レイヤー ノードからのエンジン API JSON-RPC クエリに対して内部的にのみ公開されます。
caplin
ポート成分 | ポート | プロトコル | 目的 | 暴露すべき |
---|---|---|---|---|
番兵 | 4000 | UDP | ピアリング | 公共 |
番兵 | 4001 | TCP | ピアリング | 公共 |
ポートを設定するには、次を使用します。
--caplin.discovery.addr value Address for Caplin DISCV5 protocol (default: "127.0.0.1")
--caplin.discovery.port value Port for Caplin DISCV5 protocol (default: 4000)
--caplin.discovery.tcpport value TCP Port for Caplin DISCV5 protocol (default: 4001)
beaconAPI
ポート成分 | ポート | プロトコル | 目的 | 暴露すべき |
---|---|---|---|---|
休む | 5555 | TCP | 休む | 公共 |
shared
ポート成分 | ポート | プロトコル | 目的 | 暴露すべき |
---|---|---|---|---|
全て | 6060 | TCP | プロフ | プライベート |
全て | 6061 | TCP | メトリクス | プライベート |
オプションのフラグを有効にして、pprof またはメトリック (あるいはその両方) を有効にすることができます。詳細については、バイナリで--help
使用してください。
other
ポート将来の使用のために予約されています: gRPC ポート: 9092
コンセンサス エンジン、 9093
スナップショット ダウンローダー、 9094
TxPool
0.0.0.0/8 "This" Network RFC 1122, Section 3.2.1.3
10.0.0.0/8 Private-Use Networks RFC 1918
100.64.0.0/10 Carrier-Grade NAT (CGN) RFC 6598, Section 7
127.16.0.0/12 Private-Use Networks RFC 1918
169.254.0.0/16 Link Local RFC 3927
172.16.0.0/12 Private-Use Networks RFC 1918
192.0.0.0/24 IETF Protocol Assignments RFC 5736
192.0.2.0/24 TEST-NET-1 RFC 5737
192.88.99.0/24 6to4 Relay Anycast RFC 3068
192.168.0.0/16 Private-Use Networks RFC 1918
198.18.0.0/15 Network Interconnect
Device Benchmark Testing RFC 2544
198.51.100.0/24 TEST-NET-2 RFC 5737
203.0.113.0/24 TEST-NET-3 RFC 5737
224.0.0.0/4 Multicast RFC 3171
240.0.0.0/4 Reserved for Future Use RFC 1112, Section 4
255.255.255.255/32 Limited Broadcast RFC 919, Section 7
RFC 922, Section 7
IpTables 構文でも同じ
systemd
例build/bin
から erigon を別のユーザーとして実行すると、エラーが発生する可能性があります。
error while loading shared libraries: libsilkworm_capi.so: cannot open shared object file: No such file or directory
このライブラリは、 make DIST=
使用して別のユーザーにインストールする必要があります。 $HOME/erigon
または/opt/erigon
インストール パスとして使用できます。次に例を示します。
make DIST=/opt/erigon install
kill -SIGUSR1
、トレースを取得して停止する: kill -6
--pprof
フラグを追加して実行しますgo tool pprof -png http://127.0.0.1:6060/debug/pprof/profile?seconds=20 > cpu.png
--pprof
フラグを追加して実行しますgo tool pprof -inuse_space -png http://127.0.0.1:6060/debug/pprof/heap > mem.png
? Detailed explanation is here.
Docker は、UID/GID 1000 のユーザー erigon を使用します (セキュリティ上の理由から)。このユーザーが Dockerfile で作成されていることがわかります。ホストのユーザーにフォルダーの所有権を与えることで修正できます。ホストのユーザー UID/GID は Docker のユーザー UID/GID (1000) と同じです。詳細は投稿で
--txpool.nolocals=true
--http.api
リストにadmin
を追加しないでください--http.corsdomain="*"
は悪い習慣です: 正確なホスト名または IP を設定してください--rpc.batch.concurrency
、 --rpc.batch.limit
を削減することで DOS から保護します。https://github.com/mathMakesArt/Erigon-on-RPi-4
Docker を使用すると、コンテナ経由で Erigon を構築および実行できます。これにより、ホスト OS にビルドの依存関係をインストールする必要性が軽減されます。
ファイルが正しい権限で書き込まれるように、ユーザー UID/GID をホスト OS とコンテナーの間で同期する必要があります。
ホスト OS 上に専用のユーザー/グループをセットアップする場合は、次のmake
ターゲットを使用できます。
# create "erigon" user
make user_linux
# or
make user_macos
リポジトリのルートに.env.example
ファイルがあります。
DOCKER_UID
- Docker ユーザーの UIDDOCKER_GID
- Docker ユーザーの GIDXDG_DATA_HOME
- Docker コンテナにマウントされるデータ ディレクトリ指定しない場合、UID/GID は現在のユーザーを使用します。
XDG_DATA_HOME
の適切な選択は、ヘルパー ターゲットmake user_linux
またはmake user_macos
によって作成された~erigon/.ethereum
ディレクトリを使用することです。
権限の確認: すべての場合において、 XDG_DATA_HOME
(指定またはデフォルト) は docker のユーザー UID/GID によって書き込み可能である必要があります。これは、ビルド時のDOCKER_UID
およびDOCKER_GID
によって決定されます。アクセス許可が原因でビルドまたはサービスの起動が失敗する場合は、これらの環境変数によって制御されるすべてのディレクトリ、UID、および GID が正しいことを確認してください。
次のコマンドが開始されます: Erigon がポート 30303、rpcdaemon がポート 8545、prometheus がポート 9090、grafana がポート 3000 です。
#
# Will mount ~/.local/share/erigon to /home/erigon/.local/share/erigon inside container
#
make docker-compose
#
# or
#
# if you want to use a custom data directory
# or, if you want to use different uid/gid for a dedicated user
#
# To solve this, pass in the uid/gid parameters into the container.
#
# DOCKER_UID: the user id
# DOCKER_GID: the group id
# XDG_DATA_HOME: the data directory (default: ~/.local/share)
#
# Note: /preferred/data/folder must be read/writeable on host OS by user with UID/GID given
# if you followed above instructions
#
# Note: uid/gid syntax below will automatically use uid/gid of running user so this syntax
# is intended to be run via the dedicated user setup earlier
#
DOCKER_UID= $( id -u ) DOCKER_GID= $( id -g ) XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
#
# if you want to run the docker, but you are not logged in as the $ERIGON_USER
# then you'll need to adjust the syntax above to grab the correct uid/gid
#
# To run the command via another user, use
#
ERIGON_USER=erigon
sudo -u ${ERIGON_USER} DOCKER_UID= $( id -u ${ERIGON_USER} ) DOCKER_GID= $( id -g ${ERIGON_USER} ) XDG_DATA_HOME= ~ ${ERIGON_USER} /.ethereum DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose
Makefile は、erigon、prometheus、grafana の初期ディレクトリを作成します。 PID 名前空間は、erigon と rpcdaemon の間で共有されます。これは、別のプロセス (RPCDaemon ローカルモード) から Erigon の DB を開くために必要です。参照: https://github.com/erigontech/erigon/pull/2392/files
Docker のインストールで Docker デーモンを root (デフォルト) として実行する必要がある場合は、上記のコマンドの先頭にsudo
を付ける必要があります。ただし、セキュリティ上の理由から、docker (およびそのコンテナ) を非 root ユーザーとして実行することが推奨される場合があります。これを行う方法の詳細については、この記事を参照してください。
役職
--sync.loop.block.limit=10_000
SNAPSHOT_MADV_RND=false
vmtouch -vdlw /mnt/erigon/snapshots/domain/*bt
ls /mnt/erigon/snapshots/domain/*.kv | parallel vmtouch -vdlw
# if it failing with "can't allocate memory", try:
sync && sudo sysctl vm.drop_caches=3
echo 1 > /proc/sys/vm/compact_memory
Windows ユーザーは、次の 3 つの方法で erigon を実行できます。
提供されているwmake.ps1
PowerShell スクリプトを使用して、Windows 用に実行可能バイナリをネイティブにビルドします。使用構文はmake
コマンドと同じなので.wmake.ps1 [-target]
実行する必要があります。例: .wmake.ps1 erigon
erigon 実行可能ファイルをビルドします。すべてのバイナリは.buildbin
サブフォルダーに配置されます。 Windows 上でネイティブ ビルドを成功させるには、いくつかの要件があります。
chocolatey
パッケージ マネージャーをインストールすることを強くお勧めします - 次の点を参照).wmake.ps1 db-tools
) を構築する必要がある場合は、Windows 用 Chocolatey パッケージ マネージャーをインストールする必要があります。 Chocolatey では、次のコンポーネントをインストールする必要があります: cmake
、 make
、 mingw
by choco install cmake make mingw
。 Windows システムの「パス」変数に C:ProgramDatachocolateylibmingwtoolsinstallmingw64bin があることを確認してください。ウイルス対策に関する重要な注意事項MinGW のコンパイラ検出フェーズ中に、コンパイラの機能をテストするためにいくつかの一時的な実行可能ファイルが生成されます。一部のウイルス対策プログラムは、これらのファイルがWin64/Kryptic.CIS
トロイの木馬 (またはその亜種) に感染している可能性があると検出すると報告されています。これらは誤検知ではありますが、Windows 用セキュリティ製品の 100 以上のベンダーとそれぞれの検出アルゴリズムについては当社では制御できず、これにより Windows ビルドのエクスペリエンスが不快になる可能性があることを理解しています。この問題を回避するには、クローン リポジトリのbuildbinmdbxCMakeFiles
サブフォルダーにウイルス対策の除外を設定するか、次の他の 2 つのオプションを使用して erigon を実行します。
Docker を使用する: docker-compose.yml を参照してください。
WSL (Windows Subsystem for Linux) はバージョン 2 でのみ使用してください。このオプションでは、通常の Linux ディストリビューションと同じように Erigon をビルドできます。データをマウントされた Windows パーティション ( /mnt/c/[...]
、 /mnt/d/[...]
など) に指定することもできますが、その場合はパフォーマンスに影響することに注意してください。これは、これらのマウント ポイントがネットワーク ファイル システムであるDrvFS
使用しており、さらに MDBX が排他的アクセスのためにデータベースをロックしているためです。これは、一度に 1 つのプロセスのみがデータにアクセスできることを意味します。これは、たとえ同じコンピュータ上で実行される場合でも、リモート DB として構成する必要があるrpcdaemon
の実行に影響を与えます。データがネイティブ Linux ファイルシステムでホストされている場合は、制限は適用されません。また、デフォルトの WSL2 環境には、Windows ホストのネットワーク インターフェイスの IP アドレスと一致しない独自の IP アドレスがあることにも注意してください。ルーターのポート 30303 に NAT を設定する場合は、この点を考慮してください。
主なディスカッションは Discord サーバーで行われています。招待状を受け取るには、名前、職業、Discord に参加したい理由の簡単な説明、Erigon について知ったきっかけを書いた電子メールをbloxster [at] proton.me
に送信してください。
erigon.substack.com
x.com/ErigonEth
security [at] torquem.ch
に電子メールを送信します。
htop
間違ったメモリ使用量が表示されるMemoryMap
を使用した Erigon の内部 DB (MDBX) - OS がアプリケーション (linux 、windows) の代わりにすべてのread, write, cache
操作を管理する場合
res
列のhtop
には、「指定されたアプリのページ キャッシュを保持するために使用されるアプリ + OS」のメモリが表示されますが、 htop
でそのアプリがメモリの 90% を使用していると表示されても、同じマシン上でさらに 3 つのアプリのインスタンスを実行できるため、これは有益ではありません。 - その90%
のほとんどが「OS ページ キャッシュ」であるためです。 OS はメモリが必要になるたびにこのキャッシュを自動的に解放します。 「ページ キャッシュ サイズ」が小さいと、Erigon のパフォーマンスにまったく影響を与えない可能性があります。
次のツールは、Erigon の正しいメモリ使用量を示します。
vmmap -summary PID | grep -i "Physical footprint"
。 grep
使用しないと詳細が表示されますsection MALLOC ZONE column Resident Size
アプリのメモリ使用量を示し、 section REGION TYPE column Resident Size
OS ページのキャッシュ サイズを示します。Prometheus
ダッシュボードには、OS ページ キャッシュなしの Go アプリのメモリが表示されます ( make prometheus
、ブラウザーで開きますlocalhost:3000
、資格情報admin/admin
)cat /proc//smaps
Erigon は、ジェネシス同期中に最大 4Gb の RAM を使用し、通常の作業中に最大 1Gb の RAM を使用します。 OS ページ キャッシュは無制限の量のメモリを利用できます。
警告:同じマシン上の Erigon の複数のインスタンスが同時にディスクにアクセスすると、パフォーマンスに影響します。Erigon の主な最適化の 1 つである「ディスクのランダム アクセスを減らす」。 「ブロック実行ステージ」でも依然として多くのランダム読み取りが行われます。これが、このステージが最も遅いステージである理由です。同じディスク上で複数のジェネシス同期を実行することはお勧めしません。 Genesis Sync が成功した場合は、同じディスク上で複数の Erigon インスタンスを実行しても問題ありません。
(gp3 と同様) 次のように読むことができます: #1516 (コメント) 要約すると、ネットワーク ディスクはブロック実行には適していません。これは、データベースからデータを読み取るブロック実行が非並列、非バッチ方式であるためです。トリック: 十分な RAM を投入し、環境変数ERIGON_SNAPSHOT_MADV_RND=false
を設定すると、Erigon はクラウド ドライブでも十分に動作しますが、IO が高くなります。
例: btrfs の autodefrag オプション - 書き込み IO が 100 倍に増加する可能性があります
Gnome Tracker - マイナーを検出して殺害します。
古い方法で Erigon を起動しようとしたときに BuildKit エラーが発生した他の人は、以下を使用できます...
XDG_DATA_HOME=/preferred/data/folder DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 make docker-compose