Memory leak as worlds are visited
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
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.
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.
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
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.
~~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.
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.
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.
ℹ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.