Commands to check your node

Each command says what it tells you and what a healthy result looks like. They assume the setup from the setup guide, where plain bitcoin-cli reaches the node. Samples are illustrative.

Try them in the lab

The node lab runs most of these in your browser against a simulated node. Use it to see what healthy and broken output look like before you run them on yours.

Is it running?

Tells you whether systemd sees the node as alive. Check this before debugging anything else.

service status
$ systemctl status bitcoind --no-pager
● bitcoind.service - Bitcoin daemon
     Active: active (running) since ...

Good: active (running). failed or inactive: read the logs.

Sync progress

Tells you how far the node has validated the chain. headers is the height of the best chain the node knows about, blocks is how many it has fully checked.

sync
$ bitcoin-cli getblockchaininfo | grep -E 'blocks|headers|verificationprogress|initialblockdownload|size_on_disk|pruned'
  "blocks": 969640,
  "headers": 969640,
  "verificationprogress": 0.99999,
  "initialblockdownload": false,
  "size_on_disk": 800000000000,
  "pruned": false,

Good: blocks equals headers (or trails by a block or two), initialblockdownload is false. During the first sync, blocks is lower than headers and verificationprogress rises toward 1, slowly at first. Bad: blocks unchanged for hours, see sync stuck.

Peers

A node needs peers to receive blocks. These show how many it has and who they are.

peers
$ bitcoin-cli getconnectioncount
10
$ bitcoin-cli getnetworkinfo | grep -E 'subversion|networkactive|connections'
  "subversion": "/Satoshi:X.Y.Z/",
  "networkactive": true,
  "connections": 10,
  "connections_in": 0,
  "connections_out": 10,
$ bitcoin-cli getpeerinfo | grep -E '"(addr|inbound|subver)"'
    "addr": "203.0.113.5:8333",
    "inbound": false,
    "subver": "/Satoshi:X.Y.Z/",

Good: about 10 outbound connections (connections_out). connections_in stays at 0 unless TCP port 8333 is reachable from the internet, which is optional. Bad: 0 connections after a few minutes, or networkactive: false: check the machine's internet access and DNS. Tor-only nodes see different numbers, see Tor and privacy.

Disk and memory

The two resources that most often stop a node. A full disk is the common one.

disk and memory
$ df -h /var/lib/bitcoind
Filesystem      Size  Used Avail Use% Mounted on
/dev/nvme0n1p2  1.8T  820G  900G  48% /
$ free -h
               total        used        free      shared  buff/cache   available
Mem:           7.6Gi       1.9Gi       0.3Gi        10Mi       5.4Gi       5.6Gi
Swap:          1.0Gi          0B       1.0Gi

Good: Use% below about 90 and still stable, available memory not near zero, little or no swap in use. Bad: disk at 100% or memory almost gone with heavy swap: see disk space & pruned and lower dbcache in the config.

Mempool

The mempool holds transactions your node has seen and not yet seen in a block. It is only informative once the node is in sync.

mempool
$ bitcoin-cli getmempoolinfo
{
  "loaded": true,
  "size": 12000,
  "bytes": 4500000,
  "usage": 30000000,
  "maxmempool": 300000000,
  "mempoolminfee": 0.00000100,
  ...
}

Good: loaded is true and size is not stuck at 0 once you are synced and have peers. size is the transaction count and usage is memory, capped by maxmempool. A big or small mempool reflects network activity and says nothing about your node's health.

Logs

The log says what the node is doing right now and why it failed. Under systemd it goes to the journal and to debug.log, with the same content.

logs
$ journalctl -u bitcoind -n 20 --no-pager
... bitcoind[1234]: 2026-10-02T12:00:00Z UpdateTip: new best=0000... height=969640 ... progress=0.999990 cache=...
$ sudo tail -n 20 /var/lib/bitcoind/debug.log

Good: regular UpdateTip lines while syncing, then one about every ten minutes once synced. Lines mentioning disk, corrupt or Error need attention. The log can contain IP addresses, so redact it before posting it anywhere.

Stop and restart

These change state

Stopping interrupts the node, and a clean stop can take up to ten minutes while it flushes data. Always stop through systemd or bitcoin-cli stop. Killing the process can force a longer check at the next start.

stop and start
$ sudo systemctl stop bitcoind
$ sudo systemctl start bitcoind

Good: after a start the node is back to active (running) and blocks catches up with headers within minutes. If it keeps failing, fix the cause shown in the logs instead of restarting in a loop.

Related

FAQ

Are these commands safe to run?

Everything outside the last section only reads state. The last section stops and starts the node, which is safe but interrupts it.

Why does bitcoin-cli say it cannot connect?

bitcoind is not running, is still starting, or bitcoin-cli is looking in the wrong data folder. Run systemctl status bitcoind first. If you followed the setup guide, make sure the bitcoin-cli alias from step 7 is active.

My numbers differ from the samples.

Expected. Block heights, sizes and peer addresses are examples. Compare the shape and the fields named in each section; the values will differ.

Practice in the lab

Run these commands against a simulated node. Nothing to install.

Open the lab