**Motivations:** - Prevent bitcoind crashes caused by heavy RPC calls without timeout - Document bitcoind crash and wallet loading stuck issues - Clean up obsolete files (configure-nginx-proxy.sh, userwallet components, website-skeleton, old fixKnowledge docs) **Root causes:** - RPC calls without timeout causing bitcoind crashes - No pre-check of bitcoind health before heavy operations - Large wallet (315MB) causing long loading times and potential hangs - Missing retry mechanism for transient errors **Correctifs:** - Add timeouts on RPC calls (5 minutes for listunspent, 10 seconds for healthcheck) - Add bitcoind health check before synchronization - Implement retry with exponential backoff - Reduce maximumCount limit from 9999999 to 500000 UTXOs - Improve cron script with pre-checks and better error handling - Add container status verification before script execution **Evolutions:** - New check-services-status.sh script for service diagnostics - Documentation of crash issues in fixKnowledge - Improved logging with timestamps - Better error messages and handling **Pages affectées:** - data/sync-utxos-spent-status.mjs - data/sync-utxos-cron.sh - data/restart-services-cron.sh - data/check-services-status.sh (new) - fixKnowledge/sync-utxos-rpc-optimization.md (new) - fixKnowledge/signet-bitcoind-crash-mining-stopped.md (new) - fixKnowledge/signet-bitcoind-crash-wallet-loading-stuck.md (new) - Removed obsolete files: configure-nginx-proxy.sh, userwallet components, website-skeleton files, old fixKnowledge docs Co-authored-by: Cursor <cursoragent@cursor.com>
7.4 KiB
Signet: bitcoind crash puis blocage en chargement de wallet
Date: 2026-02-08
Auteur: Équipe 4NK
Problème
Bitcoind a planté silencieusement dans le conteneur bitcoin-signet-instance vers 3h08 du matin. Le conteneur reste actif, mais le processus bitcoind n'est plus en cours d'exécution. Au redémarrage du conteneur à 07:12, bitcoind est bloqué en chargement de wallet ("Loading wallet…").
Symptômes
-
Conteneur actif mais bitcoind planté :
- Le conteneur Docker est "Up" mais bitcoind n'est plus en cours d'exécution
ps auxdans le conteneur montre uniquemententrypoint.sh,run.sh,mine.sh,tail -f /dev/null- Pas de processus
bitcoind
-
RPC inaccessible :
bitcoin-cliretourne :Could not connect to the server 127.0.0.1:38332curlvers le RPC depuis l'hôte : connexion reset (exit 56)- Le port 38332 est toujours en écoute côté hôte (mapping Docker) mais il n'y a plus de processus RPC derrière
-
Blocage en chargement de wallet :
- Après redémarrage, bitcoind est bloqué en "Loading wallet…"
bitcoin-cli getblockchaininforetourne :error code: -28 error message: Loading wallet…- CPU à 100% mais aucun progrès visible
- Wallet volumineux : 315MB (
wallet.dat)
-
Erreurs des services dépendants :
- Dashboard : erreurs "socket hang up" et "read ECONNRESET"
- Script
sync-utxos-cron.sh: erreurs de connexion RPC
Impact
- Fonctionnalité : Tous les services dépendants de bitcoind sont hors service
- Mining : Le minage est arrêté
- API : L'API d'ancrage ne peut plus fonctionner
- Dashboard : Le dashboard ne peut plus afficher les données de la blockchain
Root causes
-
Crash silencieux de bitcoind :
- Bitcoind a planté silencieusement vers 3h08 sans message d'erreur dans les logs
- Dernière activité normale : bloc miné à 02:54:29 (height 13139)
- Nouveau bloc reçu à 03:08:48 (height 13140)
- Après cela, plus aucune activité jusqu'au redémarrage à 07:12:16
-
Wallet volumineux :
- Le wallet
custom_signetfait 315MB - Le chargement du wallet peut prendre beaucoup de temps ou bloquer si le wallet est corrompu ou trop volumineux
- Le wallet
-
Absence de détection automatique :
- Le conteneur Docker reste actif même si bitcoind plante
- Aucun mécanisme de redémarrage automatique de bitcoind dans le conteneur
- Le script
check-services-status.shdétecte le problème mais ne le corrige pas automatiquement
Diagnostic
Vérifier l'état actuel
-
Vérifier les processus dans le conteneur :
docker exec bitcoin-signet-instance ps auxSi bitcoind n'apparaît pas, il a planté.
-
Vérifier l'état du RPC :
docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getblockchaininfoSi erreur "Could not connect" ou "Loading wallet…", bitcoind est planté ou bloqué.
-
Vérifier les logs :
docker logs bitcoin-signet-instance --tail 100 docker exec bitcoin-signet-instance tail -50 /root/.bitcoin/signet/debug.log -
Vérifier la taille du wallet :
docker exec bitcoin-signet-instance du -sh /root/.bitcoin/signet/wallets/custom_signet/
Utiliser le script de diagnostic
./data/check-services-status.sh
Si "RPC: HORS SERVICE", bitcoind a planté.
Correctifs
Solution immédiate : Redémarrer le conteneur
docker restart bitcoin-signet-instance
Attendre 60-120 secondes que bitcoind démarre et charge le wallet, puis vérifier :
docker exec bitcoin-signet-instance bitcoin-cli -datadir=/root/.bitcoin getblockchaininfo
Si le wallet reste bloqué en chargement
Si après redémarrage, bitcoind reste bloqué en "Loading wallet…" pendant plus de 5 minutes :
-
Arrêter le conteneur :
docker stop bitcoin-signet-instance -
Vérifier l'intégrité du wallet :
docker exec bitcoin-signet-instance ls -lah /root/.bitcoin/signet/wallets/custom_signet/Vérifier la présence de
wallet.dat-journal(fichier de journalisation) -
Redémarrer avec vérification :
docker start bitcoin-signet-instance docker logs bitcoin-signet-instance -fSurveiller les logs pour voir si le wallet se charge correctement.
-
Si le wallet est corrompu :
- Sauvegarder le wallet actuel
- Essayer de réparer avec
bitcoin-wallet(si disponible) - Ou restaurer depuis une sauvegarde
Solution préventive : Améliorer la détection et le redémarrage automatique
-
Améliorer le script
check-services-status.sh:- Détecter si bitcoind est planté même si le conteneur est actif
- Proposer automatiquement un redémarrage si le problème est détecté
-
Ajouter un healthcheck Docker :
- Créer un healthcheck qui vérifie que le RPC bitcoind répond
- Configurer Docker pour redémarrer automatiquement le conteneur si le healthcheck échoue
-
Surveillance proactive :
- Ajouter un cron job qui exécute
check-services-status.shtoutes les 5 minutes - Envoyer une alerte si bitcoind est hors service
- Ajouter un cron job qui exécute
Prévention / suivi
- Surveillance régulière : Exécuter
./data/check-services-status.shrégulièrement (ou via cron toutes les 5 minutes) - Logs : Surveiller les logs bitcoind pour détecter les problèmes avant qu'ils ne causent un crash
- Sauvegardes : Sauvegarder régulièrement le wallet et la chaîne
- Investigation : En cas de répétition des crashes, investiguer (RAM, disque,
dmesgOOM, logs bitcoind complets)
Note importante sur les crons et la cause probable
Le script restart-services-cron.sh n'est PAS actuellement dans les crontabs.
Cause probable du crash récurrent vers 3h : Le script sync-utxos-cron.sh s'exécute à 3h00 et fait un appel RPC très lourd (listunspent avec maximumCount: 9999999). Avec un wallet volumineux (315MB) et potentiellement des centaines de milliers d'UTXOs, cet appel peut :
- Consommer beaucoup de mémoire
- Prendre beaucoup de temps
- Causer un crash de bitcoind si la mémoire est insuffisante ou si bitcoind est déjà dans un état fragile
Recommandation pour ajouter restart-services-cron.sh à 4h :
✅ OUI, c'est prudent d'ajouter restart-services-cron.sh à 4h, car :
- Le script a été amélioré pour gérer les wallets volumineux (timeout de 5 minutes, détection du chargement de wallet)
- Cela permettra de redémarrer bitcoind automatiquement après un crash potentiel vers 3h
- Le redémarrage à 4h laisse le temps au script
sync-utxos-cron.shde se terminer (ou d'échouer) avant le redémarrage
⚠️ Mais il faut aussi :
- Surveiller les logs pour confirmer que le crash est bien lié au script
sync-utxos-cron.sh - Considérer d'optimiser le script
sync-utxos-spent-status.mjspour réduire la charge sur bitcoind - Surveiller la mémoire disponible pour bitcoind
Configuration recommandée :
# Ajouter dans crontab
0 4 * * * /home/ncantu/Bureau/code/bitcoin/data/restart-services-cron.sh
Cela redémarrera bitcoind tous les jours à 4h, ce qui permettra de récupérer automatiquement après un crash potentiel vers 3h.
Pages affectées
data/check-services-status.sh(script de vérification)fixKnowledge/signet-bitcoind-crash-wallet-loading-stuck.md(ce document)fixKnowledge/signet-bitcoind-crash-mining-stopped.md(documentation similaire)