[Bug] Potential memory leak related to VR overlay. #57

Closed
opened 2026-04-05 16:15:52 +02:00 by MrUnknownDE · 0 comments
Owner

Originally created by @xuan25 on 2/26/2026

Describe the bug

Potential memory leak on VR overlay function calls in the DotNet process.

To Reproduce

  1. Launch the VRCX application with default settings and login

Expected behavior

The memory usage should be stable and not increasing overtime.

Screenshots

N/A

What version you are running

VRCX
(Linux) 2026.02.11

Additional context

VRCX is using over 7 Gigs of RAM on my system after 48 hours of running, and it seems to be increasing over time.

Here is the stat of the related processes:

 ❯ ps -o pid,user,pri,ni,vsz,rss,%mem,%cpu,etime,cmd -fp $(pgrep vrcx)
    PID USER     PRI  NI    VSZ   RSS %MEM %CPU     ELAPSED CMD
   2407 xuan      19   0 2020923092 7332268 11.5 4.4 1-23:40:21 /opt/vrcx/vrcx --ozone-platform-hint=auto
   2419 xuan      19   0 34129096 292  0.0  0.0  1-23:40:21  \_ /opt/vrcx/vrcx --type=zygote --no-zygote-sandbox
   4114 xuan      19   0 34854532 90840  0.1 0.5 1-23:40:21  |   \_ /opt/vrcx/vrcx --type=zygote --no-zygote-sandbox
   4671 xuan      19   0 34493964 6436  0.0 0.0  1-23:40:20  |       \_ /opt/vrcx/vrcx --type=zygote --no-zygote-sandbox
   2420 xuan      19   0 50906300 1584  0.0 0.0  1-23:40:21  \_ /opt/vrcx/vrcx --type=zygote
   2444 xuan      19   0 50906324 4544  0.0 0.0  1-23:40:21  |   \_ /opt/vrcx/vrcx --type=zygote
   4523 xuan      19   0 1478626016 305052  0.4 0.4 1-23:40:21  |       \_ /opt/vrcx/vrcx --type=zygote
   4399 xuan      19   0 34007144 25664  0.0 0.0 1-23:40:21  \_ /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none 

By examining the core dumps of the DotNet process, it seem that the memory is being consumed primary by the 3 \times 10^6 of System.String objects.

Here is a truncated stat of the heap:

...
7f595ef7bfd8     1,545       111,240 Microsoft.JavaScript.NodeApi.DotNetHost.TypeProxy
7f595e680b98     1,448       115,840 System.Signature
7f595e3f8d38       257       137,788 System.Int32[]
7f595e4d2b48     2,659       155,544 System.String[]
7f5960ae8788       763       201,432 System.Diagnostics.Process
7f595ee7cd98     2,427       213,576 System.Reflection.RuntimeParameterInfo
7f59622626e8     2,036       244,320 System.Diagnostics.ProcessInfo
7f5962263488     2,061       244,952 System.Diagnostics.ThreadInfo[]
7f595d46a160     6,488       259,520 System.RuntimeType
7f595e5673f8     2,663       276,952 System.Reflection.RuntimeMethodInfo
7f5962262e68    14,374       804,944 System.Diagnostics.ThreadInfo
7f595e4a7d30       110     1,878,714 System.Char[]
363c001e2c60     8,649    11,057,232 Free
7f595e5ad9e8     1,285    13,880,527 System.Byte[]
7f5961319a90        17    50,332,056 System.Collections.Concurrent.ConcurrentQueueSegment<System.Collections.Generic.KeyValuePair<System.String, System.String>>+Slot[]
7f595e3fbe30 3,167,571 7,010,975,478 System.String
Total 3,236,253 objects, 7,092,562,876 bytes

By dumping the content of all the System.String objects, it seems that there are some repeated patterns over and over again that are related to the VR overlay function calls, such as:

...

updateOnlineFriendCount
22
configUpdate
{"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true}
lastLocationUpdate
{"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null}
nowPlayingUpdate
{"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""}
wristFeedUpdate

updateOnlineFriendCount
22
configUpdate
{"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true}
lastLocationUpdate
{"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null}
nowPlayingUpdate
{"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""}
wristFeedUpdate

updateOnlineFriendCount
22
configUpdate
{"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true}
lastLocationUpdate
{"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null}
nowPlayingUpdate
{"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""}
wristFeedUpdate

updateOnlineFriendCount
22
configUpdate
{"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true}
lastLocationUpdate
{"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null}
nowPlayingUpdate
{"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""}
wristFeedUpdate

...
*Originally created by @xuan25 on 2/26/2026* **Describe the bug** Potential memory leak on VR overlay function calls in the DotNet process. **To Reproduce** 1. Launch the VRCX application with default settings and login **Expected behavior** The memory usage should be stable and not increasing overtime. **Screenshots** N/A **What version you are running** VRCX (Linux) 2026.02.11 **Additional context** VRCX is using over 7 Gigs of RAM on my system after 48 hours of running, and it seems to be increasing over time. Here is the stat of the related processes: ```sh ❯ ps -o pid,user,pri,ni,vsz,rss,%mem,%cpu,etime,cmd -fp $(pgrep vrcx) PID USER PRI NI VSZ RSS %MEM %CPU ELAPSED CMD 2407 xuan 19 0 2020923092 7332268 11.5 4.4 1-23:40:21 /opt/vrcx/vrcx --ozone-platform-hint=auto 2419 xuan 19 0 34129096 292 0.0 0.0 1-23:40:21 \_ /opt/vrcx/vrcx --type=zygote --no-zygote-sandbox 4114 xuan 19 0 34854532 90840 0.1 0.5 1-23:40:21 | \_ /opt/vrcx/vrcx --type=zygote --no-zygote-sandbox 4671 xuan 19 0 34493964 6436 0.0 0.0 1-23:40:20 | \_ /opt/vrcx/vrcx --type=zygote --no-zygote-sandbox 2420 xuan 19 0 50906300 1584 0.0 0.0 1-23:40:21 \_ /opt/vrcx/vrcx --type=zygote 2444 xuan 19 0 50906324 4544 0.0 0.0 1-23:40:21 | \_ /opt/vrcx/vrcx --type=zygote 4523 xuan 19 0 1478626016 305052 0.4 0.4 1-23:40:21 | \_ /opt/vrcx/vrcx --type=zygote 4399 xuan 19 0 34007144 25664 0.0 0.0 1-23:40:21 \_ /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none ``` By examining the core dumps of the DotNet process, it seem that the memory is being consumed primary by the $3 \times 10^6$ of `System.String` objects. Here is a truncated stat of the heap: ``` ... 7f595ef7bfd8 1,545 111,240 Microsoft.JavaScript.NodeApi.DotNetHost.TypeProxy 7f595e680b98 1,448 115,840 System.Signature 7f595e3f8d38 257 137,788 System.Int32[] 7f595e4d2b48 2,659 155,544 System.String[] 7f5960ae8788 763 201,432 System.Diagnostics.Process 7f595ee7cd98 2,427 213,576 System.Reflection.RuntimeParameterInfo 7f59622626e8 2,036 244,320 System.Diagnostics.ProcessInfo 7f5962263488 2,061 244,952 System.Diagnostics.ThreadInfo[] 7f595d46a160 6,488 259,520 System.RuntimeType 7f595e5673f8 2,663 276,952 System.Reflection.RuntimeMethodInfo 7f5962262e68 14,374 804,944 System.Diagnostics.ThreadInfo 7f595e4a7d30 110 1,878,714 System.Char[] 363c001e2c60 8,649 11,057,232 Free 7f595e5ad9e8 1,285 13,880,527 System.Byte[] 7f5961319a90 17 50,332,056 System.Collections.Concurrent.ConcurrentQueueSegment<System.Collections.Generic.KeyValuePair<System.String, System.String>>+Slot[] 7f595e3fbe30 3,167,571 7,010,975,478 System.String Total 3,236,253 objects, 7,092,562,876 bytes ``` By dumping the content of all the System.String objects, it seems that there are some repeated patterns over and over again that are related to the VR overlay function calls, such as: ``` ... updateOnlineFriendCount 22 configUpdate {"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true} lastLocationUpdate {"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null} nowPlayingUpdate {"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""} wristFeedUpdate updateOnlineFriendCount 22 configUpdate {"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true} lastLocationUpdate {"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null} nowPlayingUpdate {"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""} wristFeedUpdate updateOnlineFriendCount 22 configUpdate {"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true} lastLocationUpdate {"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null} nowPlayingUpdate {"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""} wristFeedUpdate updateOnlineFriendCount 22 configUpdate {"overlayNotifications":true,"hideDevicesFromFeed":false,"vrOverlayCpuUsage":false,"minimalFeed":false,"notificationPosition":"topCenter","notificationTimeout":3000,"photonOverlayMessageTimeout":6000,"notificationTheme":"sunset","backgroundEnabled":false,"dtHour12":false,"pcUptimeOnFeed":false,"appLanguage":"en","notificationOpacity":100,"isWristDisabled":true} lastLocationUpdate {"date":null,"location":"","name":"","playerList":[],"friendList":[],"progressPie":false,"onlineFor":null} nowPlayingUpdate {"url":"","name":"","length":0,"startTime":0,"offset":0,"elapsed":0,"percentage":0,"remainingText":"","playing":false,"thumbnailUrl":""} wristFeedUpdate ... ```
MrUnknownDE added the BugBugBugBugBugBugBugBugBugBugBugBugBugBugBug labels 2026-04-05 16:15:52 +02:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github/VRCX#57