fix(cuprate): enable fast_sync and raise DB cache — sustained 45% CPU
The default manifest baked in the exact broken config found on an affected fleet node: no fast_sync (defaults false, forcing full ring-sig/ RandomX verification on every block) and target_max_memory capped at ~2.8GiB, which starved cuprated's DB cache into constant eviction/flush (595GB/24h of block I/O on a node just appending ~2MB blocks every 2 minutes). A reference node with fast_sync = true and an 8GiB cache ran at 2.8% CPU at the same chain height and block rate. Set fast_sync = true and target_max_memory = 8GiB to match the healthy reference config, and raise resources.memory_limit from 4Gi to 10Gi so the container still has headroom above the larger cache. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RR7jRaicvqsJaqQQ92jpPQ
This commit is contained in:
@@ -45,7 +45,12 @@ app:
|
|||||||
|
|
||||||
resources:
|
resources:
|
||||||
cpu_limit: 0
|
cpu_limit: 0
|
||||||
memory_limit: 4Gi
|
# Raised from 4Gi alongside target_max_memory below (see files[] comment)
|
||||||
|
# — 2026-09-03 incident: a 4Gi/3GB-cache config starved
|
||||||
|
# cuprated's DB cache into constant eviction/flush, driving 45% sustained
|
||||||
|
# CPU and ~595GB/24h of block I/O on a fully-synced node. 10Gi leaves
|
||||||
|
# headroom above the 8GiB cache for the process itself.
|
||||||
|
memory_limit: 10Gi
|
||||||
disk_limit: 300Gi
|
disk_limit: 300Gi
|
||||||
|
|
||||||
security:
|
security:
|
||||||
@@ -103,11 +108,23 @@ app:
|
|||||||
# Settings that need to differ from cuprated's own documented defaults
|
# Settings that need to differ from cuprated's own documented defaults
|
||||||
# (verified against `cuprated --generate-config` and `--dry-run` locally,
|
# (verified against `cuprated --generate-config` and `--dry-run` locally,
|
||||||
# 2026-08-21):
|
# 2026-08-21):
|
||||||
|
# - fast_sync: cuprated's own default is false, which performs full
|
||||||
|
# cryptographic verification (ring signatures + RandomX PoW) on every
|
||||||
|
# incoming block instead of trusting checkpointed history. Root-caused
|
||||||
|
# 2026-09-03 as the dominant cause of a sustained 45% CPU node,
|
||||||
|
# vs. 2.8% on a reference node with fast_sync = true — same chain height, same
|
||||||
|
# block rate. Set explicitly rather than relying on the binary
|
||||||
|
# default so fresh deploys don't silently regress into full-verify.
|
||||||
# - target_max_memory: cuprated's own default auto-detects total *host*
|
# - target_max_memory: cuprated's own default auto-detects total *host*
|
||||||
# RAM via sysinfo, which inside a memory-limited container would let
|
# RAM via sysinfo, which inside a memory-limited container would let
|
||||||
# it size caches far past what resources.memory_limit above actually
|
# it size caches far past what resources.memory_limit above actually
|
||||||
# grants — same class of problem bitcoin-knots' -dbcache sizing
|
# grants — same class of problem bitcoin-knots' -dbcache sizing
|
||||||
# comment addresses. Set explicitly, comfortably under the 4Gi limit.
|
# comment addresses. Set explicitly, comfortably under the 10Gi limit.
|
||||||
|
# Previously 3000000000 (~2.8GiB); that starved the DB cache and
|
||||||
|
# forced constant eviction/flush (595GB/24h block I/O on a node just
|
||||||
|
# appending ~2MB blocks every 2 minutes) — raised to 8GiB, matching
|
||||||
|
# the healthy reference node, and
|
||||||
|
# resources.memory_limit above raised in step to keep headroom above it.
|
||||||
# - rpc.restricted.enable: cuprated ships this off by default; flip on
|
# - rpc.restricted.enable: cuprated ships this off by default; flip on
|
||||||
# so the auth:none host port above actually serves something instead
|
# so the auth:none host port above actually serves something instead
|
||||||
# of refusing every connection. port stays at its documented default
|
# of refusing every connection. port stays at its documented default
|
||||||
@@ -128,21 +145,21 @@ app:
|
|||||||
# - tracing.stdout.level / tracing.file.{level,max_log_files}: an
|
# - tracing.stdout.level / tracing.file.{level,max_log_files}: an
|
||||||
# operator reading Cuprated.toml on disk should be able to see and
|
# operator reading Cuprated.toml on disk should be able to see and
|
||||||
# tune the log level directly instead of the file silently omitting
|
# tune the log level directly instead of the file silently omitting
|
||||||
# the whole [tracing] table (verified live on amishparadise
|
# the whole [tracing] table (verified live on the affected node
|
||||||
# 2026-09-01: the deployed file had no [tracing] section at all, and
|
# 2026-09-01: the deployed file had no [tracing] section at all, and
|
||||||
# the level was only discoverable by running `cuprated
|
# the level was only discoverable by running `cuprated
|
||||||
# --generate-config` and diffing). file.level is set to "info", NOT
|
# --generate-config` and diffing). file.level is set to "info", NOT
|
||||||
# cuprated's own raw default of "debug" — matches the reference dev
|
# cuprated's own raw default of "debug" — matches the reference dev
|
||||||
# config this app was built and tested against
|
# config this app was built and tested against (verified 2026-09-01),
|
||||||
# (ssmithx@archy-dev-pa:/home/ssmithx/cuprate/Cuprated.toml,
|
# which deliberately runs file logging quieter
|
||||||
# verified 2026-09-01), which deliberately runs file logging quieter
|
|
||||||
# than the binary default. max_log_files similarly follows that
|
# than the binary default. max_log_files similarly follows that
|
||||||
# reference (14, not the binary default of 7).
|
# reference (14, not the binary default of 7).
|
||||||
files:
|
files:
|
||||||
- path: /var/lib/archipelago/cuprate/Cuprated.toml
|
- path: /var/lib/archipelago/cuprate/Cuprated.toml
|
||||||
content: |
|
content: |
|
||||||
network = "Mainnet"
|
network = "Mainnet"
|
||||||
target_max_memory = 3000000000
|
fast_sync = true
|
||||||
|
target_max_memory = 8589934592
|
||||||
|
|
||||||
[rpc.restricted]
|
[rpc.restricted]
|
||||||
enable = true
|
enable = true
|
||||||
|
|||||||
Reference in New Issue
Block a user