Troubleshooting: Run a node
The guidance displayed on this page will change based on your selected configuration:
- Operating system:
- Linux, MacOS, Arm64
- Windows
- Network:
- Arbitrum One (Nitro)
- Arbitrum One (Classic)
- Arbitrum Nova
- Arbitrum Sepolia
- Localhost
- Node type:
- Full node
- Archive node
- Validator node
At the end of this troubleshooting guide, you'll find a Generate troubleshooting report button. Clicking this button will generate a report that includes your selected configuration. You can include this report when asking for help.
Using this page to generate a troubleshooting report is helpful because it gathers the information that we need in order to resolve your issue.
Step 1: Try the troubleshooting checklist
If you're running into unexpected outputs or errors, the following checklist may help you independently resolve your issue.
Step 2: Look for your scenario
Common troubleshooting scenarios and solutions are detailed below.
You can check logs by different log types: info, warn, and error.
- Logs type:
- Info
- Warn
- Error
| Scenario | Solution |
|---|---|
You see | This is expected behavior. You'll see this when your node removes old |
You see | This is usually because your node shuts down ungracefully. In most cases, it will recover in a few minutes, but if it not, you may have to re-sync your node. Remember to shut down your node gracefully with the following command: |
| Your local machine is running out of memory | Nitro (and Geth) can consume a lot of memory depending on the request load. It's possible that your machine may run out of memory when receiving tons of requests. |
Your Arbitrum node can’t connect to your parent chain node on | This is often because of a Docker port configuration issue. See https://stackoverflow.com/questions/43884981/unable-to-connect-localhost-in-docker. |
You specified your snapshot file path via the | This is usually because the snapshot file isn't mounted to your Docker container. Mount it and change the file path to your Docker container’s mount point. |
You get | This often happens when Cloudflare attempts to block botnets and other malicious actors but accidentally blocks node runners. |
You see | This usually because your node hasn’t synced to the latest state, it’s a normal behavior. |
You see | Please check your parent chain endpoint because there is something going wrong on that endpoint; you can check it. |
You see | This is a normal behavior while the node is catching up to the tip of the chain; once a node has been fully synced, "Resuming state snapshot generation" shouldn't be logged unless it falls behind again. |
You see | You started the node with |
| Scenario | Solution |
|---|---|
You see | This is because you get two discontinuous batches; this might be because of your parent chain endpoint issues. You can change to another endpoint and set nitro --init.reorg-to-batch A |
You see | This is because your node db crashed and lost some messages. You can try to set --init.reorg-to-message-batch x-1 |
You see | This is usually because an ungraceful shutdown caused a corrupted database; try restarting the node without a prune flag, and after your node goes back to normal, then graceful shut it down and restart to prune it. |
You see | This often happens when you connect to a beacon chain endpoint while the blob you are querying is expired. To resolve this error, connect to a beacon endpoint that supports historical blob data (see List of Ethereum beacon chain RPC providers ). |
You see | Arbitrum Nitro doesn’t need P2P mode, so you can ignore this log. |
You see | Nitro is checking one of the expected locations for WASM machine artifacts, but that particular |
You see | The feed delivered messages out of the expected order; the node skipped ahead in its broadcast queue. This typically self-heals as later messages arrive. If it persists, check your feed URL connectivity or try a fallback feed via |
You see | The feed server didn't agree to compression during the WebSocket handshake. This is informational—the node continues without compression and your sync is unaffected. You can ignore this warning. |
You see | The feed server closed the WebSocket connection. The broadcast client will automatically reconnect; no operator action is needed unless EOF repeats continuously. Persistent EOFs suggest a network/firewall issue or that all configured feeds are unreachable. |
You see | The delayed-inbox accumulator your node computed doesn't match the onchain one at message N—typically caused by a parent-chain endpoint serving inconsistent data or by a reorg. Switch to a different parent-chain RPC and restart; if it persists, re-sync from a recent snapshot. |
You see | The delayed inbox produced a sequence number that is not the next expected one—usually a parent-chain RPC inconsistency or a reorg on the parent chain. Switch to a different parent-chain RPC; if the gap persists, re-sync the node. |
You see | Your local state database is inconsistent—typically caused by an ungraceful shutdown or by enabling |
You see | Same root cause as the |
| Scenario | Solution |
|---|---|
You see | Your parent chain node might not sync to the latest state, please wait after it finishes syncing. |
You see | Once it catches up, the node will check the state against the latest confirmed assertion bonded onchain; if it doesn’t match, it will log this error. Usually, this is because of db corruption, so you might need to re-sync the blockchain; using a snapshot might help: https://snapshot-explorer.arbitrum.io/ |
You see | It indicates that there has been an issue with batch posting on the network. This could occur if your batch poster didn't post a batch for an extended period. Common reasons include the node being shut down inadvertently or the batch poster running out of funds, leading to no new blocks being produced or posted by the batch poster. |
You see | Usually, because you are running on an old node version, try to upgrade your node. Also, you modify your node’s code; please refer to the continue set. |
You see | In most cases, this error is caused by your parent chain endpoint's rate limit or other issues, you can check your parent chain endpoint. If the error still persists, please ask in our discord node-running channel. |
You see | The transaction streamer received a message whose index doesn't match the next expected one—your node's local DB is behind or ahead of the sequencer feed. Restart the node; if the gap persists, re-sync from a snapshot or use |
You see | The parent-chain RPC returned a block header your node expected to exist—usually your parent-chain endpoint hasn't synced to the height nitro asked for, or the endpoint serves a different chain history. Wait for the parent-chain node to finish syncing, or switch to a fully-synced parent-chain RPC. |
You see | Nitro tried to read an inbox accumulator or sequencer-batch metadata entry that is not yet present in the local consensus database. This can happen transiently while the inbox reader or message extractor is still catching up, and batch-posting paths intentionally treat this as an ephemeral error for the first few minutes. If the error keeps repeating, make sure the node has caught up, your parent-chain RPC can serve the relevant SequencerInbox / delayed inbox logs, and the local database or snapshot is not missing historical inbox data. Try restarting with a healthy parent-chain RPC; if the same index remains missing, re-sync from a recent snapshot. |
You see | The data directory you pointed nitro at already contains files that don't belong to a fresh DB. Either empty the directory before init, or point |
You see | A feed message was signed by an address that is not in your allowed signer list. Check that |
You see | The broadcast client failed to connect to any feed URL you configured. Check network/firewall rules for outbound WebSocket connections, verify the feed URLs in |
Step 3: Generate a troubleshooting report
- Complete the above troubleshooting checklist.
- Fill in the below form.
- Click Generate troubleshooting report.
- Copy and paste the generated report text when asking for support on Discord or any other support channel.
Node startup command (make sure to remove any sensitive information like, i.e., private keys)
Unexpected output
Tip: Paste the ~100 lines of output before and including the unexpected output you're asking about. You can use the following command to get the logs:
docker logs --tail 100 YOUR_CONTAINER_IDGenerate troubleshooting report
Complete the checklist above before generating...