Skip to main content

Troubleshoot validator problems

Use this guide to solve the most common validator problems.

Validator has 0 voting power

If your validator has 0 voting power, your validator has become auto-unbonded. On the mainnet, validators unbond when they do not vote on 9500 of the last 10000 blocks (50 of the last 100 blocks on the testnet). Because blocks are proposed every ~5 seconds, a validator that is unresponsive for ~13 hours (~4 minutes on testnet) become unbonded. This problem usually happens when your JMESd process crashes.

To return the voting power back to your validator:

  1. If JMESd is not running, restart it:


    _1
    jmesd start

  2. Wait for your full node to reach the latest block, and run:


    _1
    jmesd tx slashing unjail <jmes> --chain-id=<chain_id> --from=<from>

    • <jmes> is the address of your validator account.
    • <name> is the name of the validator account. To find this information, run jmesd keys list.
☢️caution

If you don't wait for JMESd to sync before running unjail, an error message will inform you that your validator is still jailed.

  1. Check your validator again to see if your voting power is back:

_1
jmesd status

If your voting power is less than it was previously, you may have been slashed for downtime.

JMESd crashes because of too many open files

The default number of files Linux can open per process is 1024. JMESd is known to open more than this amount, causing the process to crash.

  1. Increase the number of open files allowed by running ulimit -n 4096.

  2. Restart the process with jmesd start.

    If you are using systemd or another process manager to launch JMESd, you might need to configure them. The following sample systemd file fixes the problem:


    _16
    # /etc/systemd/system/jmesd.service
    _16
    [Unit]
    _16
    Description=JMES Udo Node
    _16
    After=network.target
    _16
    _16
    [Service]
    _16
    Type=simple
    _16
    User=ubuntu
    _16
    WorkingDirectory=/home/ubuntu
    _16
    ExecStart=/home/ubuntu/go/bin/jmesd start
    _16
    Restart=on-failure
    _16
    RestartSec=3
    _16
    LimitNOFILE=4096
    _16
    _16
    [Install]
    _16
    WantedBy=multi-user.target

JMESd crashes because of memory fragmentation

As described in this issue, huge memory allocation can cause memory fragmentation issue. Temporal solution is just using small wasm cache size like 50~100MB.

v0.5.10+:


_1
contract-memory-cache-size = 100

v0.5.7~v0.5.9:


_1
write-vm-memory-cache-size = 100

The validator is not active

  • The validator is jailed. To solve this problem, unjail the validator by running:

    jmesd tx slashing unjail <jmes> --chain-id=<chain_id> --from=<from>

  • The validator is not in the active validator set. Only the top 100 validators are in this set. To fix this problem, increase your total stake to be larger than the 100 validator.