Skip to content

Java heap space OOM and recurring DAO resync prompt on 1.10.4:0 #9

Description

@helix-nine

Tracking a report from #8 that was not resolved before merge. 1.10.4:0 is on community-beta; this should be settled before promotion to community-prod.

Symptom

@martinbarilik reported, after updating to 1.10.4:0:

  • Java heap space — a JVM OutOfMemoryError, surfaced through Bisq's error dialog.
  • "Your Bisq DAO state needs to be resynced." — recurring, and not fixed by resyncing.
  • Cannot invoke "javafx.scene.Node.getScene()" — a NullPointerException.

His words: "can any of this changes cause DAO being not synced and needed resyncing and getting it even after resync? I had this before here and there, but struggling with it ever since this update constantly."

That last part matters — it was intermittent before 1.10.4:0 and became constant after.

Working theory

These are most likely one failure, not three. An OOM during DAO block parsing leaves the persisted DAO state inconsistent with the chain; Bisq detects the hash mismatch and prompts for a resync; the resync re-parses the entire BSQ chain, which is the most memory-intensive thing Bisq does, and OOMs again. That loop explains why resyncing never sticks. The Node.getScene() NPE is plausibly downstream of the same exhaustion — once the heap is gone, half-constructed UI is a normal way for it to surface.

Two candidate root causes, and they are not mutually exclusive:

  1. Packaging. Dockerfile sets SELKIES_ENCODER="x264enc,jpeg", so the desktop stream is software-encoded with libx264. That has a materially larger resident footprint than the KasmVNC pipeline it replaced in the same release. On a box where headroom was already marginal, that is the kind of change that turns intermittent into constant. Note that nothing in Update Bisq to 1.10.4 and migrate desktop to Selkies #8 changes the JVM heap ceiling directly — neither master nor the PR branch sets -Xmx — so the mechanism would have to be reduced headroom rather than a smaller ceiling.
  2. Upstream. A 1.10.4 regression or increase in DAO parsing memory requirements, independent of packaging. Both @martinbarilik and @BeeJoe leaned this way initially.

Diagnostics needed

From an affected install:

# JVM ceiling and actual usage, plus what else is resident
start-cli package attach bisq -n bisq-sub -- ps -eo pid,rss,args --sort=-rss

# container memory picture
start-cli package attach bisq -n bisq-sub -- free -m

# does the OOM land inside DAO parsing?
start-cli package attach bisq -n bisq-sub -- grep -n -i "OutOfMemory\|heap space" /config/.local/share/Bisq/bisq.log

For the third, the ~50 lines preceding each hit are the useful part. Also needed: total RAM on the host box, which makes the rest interpretable.

What would distinguish the two causes

  • If the Selkies/GStreamer processes account for a large share of resident memory and the JVM is hitting a ceiling sized off what's left, that points at (1) and the fix is a packaging change — an explicit -Xmx for Bisq, a lighter encoder setting, or a declared hardwareRequirements.ram.
  • If the JVM ceiling is unchanged from 1.10.3:4 and the OOM still occurs at the same point in DAO parsing, that points at (2) and belongs upstream at bisq-network/bisq.

Comparing resident memory between 1.10.3:4 and 1.10.4:0 on the same box would separate these directly, if anyone still has the older revision available.

Impact

If (1), this needs a 1.10.4:1 before promotion to community-prod. If (2), it should be reported upstream and noted in instructions.md as a known limitation with a minimum-RAM recommendation.

cc @BeeJoe @martinbarilik

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions