Skip to content

Recurring ~100% I/O pressure stalls with OpenCloud at only ~80–120 MB RSS #3470

Description

@Surfer2010

Description

While investigating a separate OpenCloud memory-growth issue, I discovered another recurring failure mode which appears to be independent of memory exhaustion.

The whole container experiences extremely high I/O pressure for an extended period.

During these events OpenCloud itself is using very little memory.

The event can eventually cause OpenCloud internal services, NATS communication and monitoring requests to time out.

This behaviour has now been captured multiple times.


Environment

OpenCloud runs in Docker inside a Proxmox LXC container.

Host:

Proxmox
kernel 6.8.12-2-pve

OpenCloud has been tested with multiple versions.

One captured occurrence was with:

opencloudeu/opencloud:7.2.4

The same low-memory I/O-stall behaviour has subsequently been reproduced after upgrading OpenCloud, including with OpenCloud 7.5.0.

This makes it unlikely that the problem is specific to 7.2.4.


Important distinction from another memory issue

I also have another failure mode where OpenCloud grows to approximately 6 GiB anonymous RSS.

This issue is NOT about that condition.

During the I/O stall described here, memory usage is completely normal.

For example:

OpenCloud RSS:       ~83 MB
OpenCloud RssAnon:   ~81 MB
entire LXC memory:   ~298 MB
TCP connections:     1

while simultaneously:

CT I/O pressure:     100%

Therefore memory exhaustion cannot explain this particular event.


Example captured on 2026-09-06

At 04:15:

ct_io=100.00
ct_mem=298303488
oc_rss_kb=82960
oc_anon_kb=81296
tcp=1
LISTEN=1

At the same time:

dockge_io=98.57

Five seconds later:

ct_io=100.00
dockge_io=98.71
ct_mem=302305280
oc_rss_kb=82960
oc_anon_kb=81296
tcp=1

This state continued for many minutes.

Examples:

04:16:54
ct_io=100.00
dockge_io=94.81
OpenCloud RSS ~82 MB

04:17:50
ct_io=100.00
dockge_io=95.44
OpenCloud RSS ~82 MB

04:19:43
ct_io=100.00
dockge_io=96.54
OpenCloud RSS ~82 MB

04:20:03
ct_io=100.00
dockge_io=95.56
OpenCloud RSS ~83 MB

There was essentially no network load:

tcp=1
LISTEN=1

So this does not look like a request storm.


Previous reproduction on 2026-09-03

A very similar event occurred several days earlier.

Example:

04:20:04

ct_io=99.99
oc_io=93.26
dockge_io=98.39

ct_mem=351735808

OpenCloud RSS=119988 kB
OpenCloud anon=119860 kB

tcp=1
LISTEN=1

The values remained close to:

ct_io ≈ 100%
oc_io ≈ 85–97%
dockge_io ≈ 85–99%

for an extended period.

Again, OpenCloud memory was only approximately 120 MB.


NATS failures during the I/O stall

During the September 3 occurrence, OpenCloud later logged:

write tcp 127.0.0.1:<port>->127.0.0.1:9233: i/o timeout
nats: stale connection
Disconnected from NATS
context deadline exceeded

Shortly afterwards it reconnected.

We also observed a postprocessing error similar to:

failed to get consumer
context deadline exceeded

The NATS connection involved localhost:

127.0.0.1 -> 127.0.0.1:9233

Therefore the reverse proxy or external network cannot explain that timeout.

The NATS error also appears relatively late in the event.

The I/O stall had already existed before the NATS timeout occurred.

I therefore currently consider the NATS timeout a consequence of the system-wide stall rather than proof that NATS initiated it.


Other processes are affected

During the event, I/O pressure is not limited to the OpenCloud process.

For example, another Docker workload in the same LXC shows very high I/O wait:

dockge_io ≈ 90–99%

This is important because cgroup I/O PSI represents time tasks are stalled waiting for I/O; it does not necessarily mean that Dockge itself generated the I/O.

It suggests that multiple workloads inside the LXC are blocked by a shared storage/I/O bottleneck.


Host scheduling investigation

I checked for scheduled host tasks around the recurring early-morning window.

No obvious Proxmox job matched the start of the event.

Checked items included:

  • systemd timers
  • /etc/crontab
  • cron jobs
  • ZFS scrub/trim schedules
  • fstrim
  • Proxmox backup jobs

No scheduled task was found around the relevant ~04:00–04:30 period that explains the behaviour.

There were also no obvious kernel/ZFS/I/O errors in the host journal during the investigated window.


Monitoring services also stall

Inside the LXC, simple monitoring services start timing out while this is happening.

For example:

opencloud-resource-monitor.service:
start operation timed out

Other small periodic jobs also take unusually long to complete.

Once the I/O pressure disappears, those jobs immediately return to normal.

This suggests they are victims of the I/O blockade rather than its cause.


Interesting read behaviour

During these events the OpenCloud process read_bytes counter continues increasing.

However, process/cgroup accounting during the most severe stalls is difficult to interpret because many processes appear to accumulate physical reads.

During another captured I/O storm we observed very large read_bytes deltas attributed to:

  • opencloud
  • dockerd
  • containerd
  • Dockge/node
  • systemd
  • other processes

I therefore do not want to claim that OpenCloud itself is necessarily generating all of the physical I/O.

It may involve page faults, reclaim, container filesystem behaviour or the underlying storage layer.


Why I am reporting this here

Because multiple processes inside the LXC are affected, I cannot currently prove that OpenCloud is the root cause.

However:

  1. the problem has repeatedly affected an OpenCloud installation,
  2. OpenCloud performs continuous reads during the affected period,
  3. embedded NATS communication eventually times out,
  4. postprocessing/consumer operations have failed during the stall,
  5. the event has been reproduced on different OpenCloud versions,
  6. there is no corresponding memory exhaustion or network request storm.

I would therefore appreciate help determining whether OpenCloud has any scheduled/background operation that could correlate with these early-morning I/O events.


Questions

Are there OpenCloud background tasks that could periodically perform significant storage activity, for example:

  • search indexing/reindexing
  • Bleve maintenance
  • NATS/JetStream maintenance
  • eventhistory
  • postprocessing
  • cleanup jobs
  • metadata/database maintenance
  • scheduled scans

Is there a supported way to enable detailed tracing for these components so that the next occurrence can be correlated with a specific OpenCloud service?

I have persistent 5-second monitoring of:

container I/O PSI
OpenCloud I/O PSI
memory usage
OpenCloud RSS/RssAnon
process read_bytes
TCP states
port 9200 queues

and can collect additional diagnostics during the next occurrence if developers can suggest which OpenCloud-specific metrics or debug endpoints would be most useful.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions