Resonite-Issues icon indicating copy to clipboard operation
Resonite-Issues copied to clipboard

Memory leak as worlds are visited

Open ssmucny opened this issue 9 months ago • 5 comments

Describe the bug?

When I join worlds my system memory keeps increasing. Even if I close worlds the memory usage usually stays steady. Eventually even swap space is filled and the entire system freezes up requiring a hard system restart.

To Reproduce

System Details

Operating System: Bazzite 41 KDE Plasma Version: 6.2.5 KDE Frameworks Version: 6.10.0 Qt Version: 6.8.1 Kernel Version: 6.12.12-203.bazzite.fc41.x86_64 (64-bit) Graphics Platform: Wayland Processors: 16 × AMD Ryzen 7 5800X3D 8-Core Processor Memory: 31.3 GiB of RAM Graphics Processor: AMD Radeon RX 7900 XTX Manufacturer: Micro-Star International Co., Ltd. Product Name: MS-7C92 System Version: 1.0

Proton GE-Proton9-22-rtsp17 Running Wivrn a82cd97 (~0.22-0.23) streamed over Wi-Fi

Steps to Reproduce

Join and leave new worlds until memory fills up slowly as I watch the system monitor. Game starts to stutter before entire system freezes. By the time everything dies Resonite will be using over 20 GB of memory even if I only have one world loaded.

Current workaround is to watch memory usage and restart Resonite when total memory usage gets dangerously high.

Expected behavior

Game properly garbage collects unneeded objects/resources and keeps working.

Screenshots

No response

Resonite Version Number

2025.3.11.1347

What Platforms does this occur on?

Linux

What headset if any do you use?

Quest 2

Log Files

https://github.com/Yellow-Dog-Man/Resonite-Issues/issues/3928#issuecomment-2746732045

Additional Context

I talked to at least one other person who has encountered this. I still need to get some log files out of this, which may be challenging since the game doesn't shut down gracefully.

I'll be adding more details to this issue as I get some more specific examples to help demonstrate.

Reporters

@ssmucny

ssmucny avatar Mar 14 '25 22:03 ssmucny

I am also observing similarly significant memory usage growth behavior after having switched to Arch about a week ago. Whereas previously I could keep Resonite running for a day or more at a time under Windows 10, I am now rarely able to keep my client open for over 8-12 hours in even a single (somewhat busy, very cluttered, persistent) gridspace headless before the OOM killer kicks in. Visiting asset-rich worlds and lots of user join/leave activity seems to drastically accelerate the issue. It appears to happen with or without any mods.

Operating System: Arch Linux KDE Plasma Version: 6.3.3 KDE Frameworks Version: 6.12.0 Qt Version: 6.8.2 Kernel Version: 6.13.7-arch1-1 (64-bit) Graphics Platform: X11 Processors: 14 × Intel Xeon W-2275 CPU @ 3.30GHz Memory: 46.8 GiB of RAM (ECC RDDR4) Graphics Processor: NVIDIA GeForce RTX 2080 SUPER

Proton GE-Proton9-22-rtsp17-1 Running WiVRn, either notpeelz' WiVRn solarxr-patches branch (8ecf96d) or mainline WiVRn git + nightly APK on Quest 2 Resonite Beta 2025.3.18.23

I am now logging my Resonite client's performance metrics and have captured some data from one OOM crash event in the last 24h.

Image

In each of these runs you can see significant initial memory use on load and at least very slight growth-over-time in all. The horizontal red underlines beneath the graph timescale between the vertical blue annotations denote individual Resonite runs. The sharp step response in the swap usage at around 14:00 PST roughly corresponds to a number of images and a short video being spawned into the world.

Attached is a log from the highlighted crashed run (08:12 - 16:39 PST).

SPINCOAT - 2025.3.18.23 - 2025-03-22 08_12_33.zip

I'll keep an eye on zis and see if I can conjure more specific/less noisy example data.

mxjessie avatar Mar 23 '25 08:03 mxjessie

2200 hours in. Yeah ive noticed this as well. Resonite on windows as well just... Doesnt seem to properly clean itself up. After like 4 to 5 hours i have to restart because even exiting al worlds to local doesnt clear the ram useage. It can peak at over 20 gigs sometimes (tho due to running servers on the same machine i rarely get past 17 before requiring a restart of the game

Redd56 avatar Mar 23 '25 08:03 Redd56

Here is a log file I generated from a session that ran out of memory: SS-LD3 - 2025.3.18.23 - 2025-03-23 22_03_44.log

Loaded 4/5 worlds:

  • custom cloud home
  • New User Help
  • Code 4 Open Door
  • Hidden Star Theater
  • Copper 9 WIP (died while loading)

Another Run from today

SS-LD3 - 2025.3.27.1177 - 2025-03-27 23_56_46.log

This is a screenshot of my memory usage when I quit this session. I turned a spare SSD into about 2 TB of swap space, so I can stay in the game 'indefinitely' though I do get large studders occasionally (maybe when it is sending data to swap). Resonite hovered around 18 GiB of physical memory usage with most of the swap space also as you can see being from the process as well. VRAM is high but nowhere near the physical limit of my GPU and can be ignored. Image

ssmucny avatar Mar 24 '25 02:03 ssmucny

~~Still a bit premature to draw any conclusions, but I am seeing drastically reduced rate-of-memory-consumption on the current prerelease while worldhopping or idling in busy worlds, as well as significantly lower memory usage overall in multi-hour sessions. The Splittening may have squashed this.~~ Disregard, I have been monitoring the wrong thing in the prerelease, and am still seeing significant memory usage and growth -- albeit, now seemingly entirely isolated to Renderite.

mxjessie avatar Aug 08 '25 23:08 mxjessie

OK, so, I'm on the .NET10 prerelease, this issue started again while I was entirely AFK, and I think I caught some additional deets on this.

Image

This session's been going for about 13 hours. All I've done is join a gridspace and do a little bit of avatar work, then I fell asleep and went to work after. About three hours before I got home from work, the linear memory growth began. I believe it was triggered by the creation and uploading of a session thumbnail at 11:15:51 PM, as this corresponds with both these periodic pips in memory usage and the start of this ramp-up.

Image
ℹ11:13:50 PM.840 (FPS: 215):    Updated: https://thumbnails.resonite.com/8fb40e9c-2006-4e82-b54b-04c479fe33ea.webp -> https://thumbnails.resonite.com/d03f14f8-f8c2-46e3-a6cb-eff5e7155021.webp
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.Avatar
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.UrlDisplay
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.ProgressBar
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.TextDisplay
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Userspace.RadiantDash.Freeform
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.DocumentDisplay
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.AudioPlayer
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.NoticeDisplay
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.Camera
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.UserSettings.Color.Primary
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.ColorDialog
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.Home
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Userspace.RadiantDash.Offset
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.UserSettings.Color.Enabled
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.WorldLoadingIndicator
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.Keyboard
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Userspace.RadiantDash.Scale
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.VideoPlayer
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.AudioStreamController
ℹ11:14:01 PM.539 (FPS: 225):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.Favorites.NamePlate
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-qualia, Path: U-Engi.mirracle.presetData1
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-qualia, Path: G-Resonite.HelpTab.TeamMemberClickCount
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-qualia, Path: U-Engi.mirracle.currentVersion
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-qualia, Path: U-Engi.mirracle.settingsData1
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-qualia, Path: U-Engi.publicFolder
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-GrayBoltWolf, Path: U-GrayBoltWolf.sessionFacet.version
ℹ11:14:02 PM.748 (FPS: 218):    Running refresh on: OwnerId: U-Resonite, Path: G-Resonite.HelpTab.TeamMemberClickCount
ℹ11:15:51 PM.836 (FPS: 212):    Updated: https://thumbnails.resonite.com/d03f14f8-f8c2-46e3-a6cb-eff5e7155021.webp -> https://thumbnails.resonite.com/df275f1a-a213-4c9d-a24a-6d8478d1ccaf.webp
ℹ11:16:08 PM.892 (FPS: 222):    SIGNALR: BroadcastStatus - Contact status for U-qualia.
        UserSessionId: 39c60c58-1a60-41f6-8b24-3a96edd499f7.
        Type: GraphicalClient
        OutputDevice: Screen
        IsMobile: False
        OnlineStatus: Online
        IsPresent: True
        LastPresenceTimestamp: 11/22/2025 7:16:08 AM
        LastStatusChange: 11/22/2025 7:16:08 AM
        AppVersion: 2025.11.21.1184+ResoniteModLoader.dll
        CompatibilityHash:
        CurrentSessionIndex: 1 to AllContacts

While writing this ticket, I hit F3, F11 for an IPC memory dump, F9 for a background worker diagnostic, and F10 for the static asset report (attached). The whole session log is here.

tailpulse - 2025.11.21.1184 - 2025-11-21 12_50_57.log

20251122-staticassetreport.txt

I also have about 2.5 gigs of strace of all Renderite threads, using the following command:

strace -p "$(pidof 'Z:\home\qualia\.steam\debian-installation\steamapps\common\Resonite\Renderer\Renderite.Renderer.exe')" -ff -t -v -o Renderite # everything, huge
strace -p "$(pidof 'Z:\home\qualia\.steam\debian-installation\steamapps\common\Resonite\Renderer\Renderite.Renderer.exe')" -ff -t -v -o Renderite -e trace=%memory,%ipc,%signal,%net,%file # seems more relevant

as well as pmap output from all threads; two dumps taken a few minutes apart with:

for i in $(ps -o lwp= -Lp `pidof 'Z:\home\qualia\.steam\debian-installation\steamapps\common\Resonite\Renderer\Renderite.Renderer.exe'`); do pmap -p -XX $i > Renderite.$i & done

so I have some data to comb through later. I OOM'd a few minutes ago, started a new session, and grabbed a few hundred megs more of comparison data. If anyone has any suggestions for data reduction techniques here I'm all ears. And, if anyone might find this raw data particularly interesting, I have a 62MB tarball of all this data I can provide .. somehow.

mxjessie avatar Nov 22 '25 12:11 mxjessie