has been experiencing noticeable frame drops recently, as reported by their players and confirmed by their development team. Upon investigating, they determined that the issue lies on Roblox’s end. In the Micrprofiler, they observed spikes in the ‘Replicator GC job’ related to ‘Part/Model Removals’, which is associated with streaming. These spikes exacerbated and became more frequent in longer server sessions (server sessions that were up for 1 hour or longer).
They made adjustments to the streaming settings by decreasing the StreamingTargetRadius from 1040 to 400 and changing StreamOutBehavior to Default, which has resolved the problem for now. However, this is just a temporary solution as they aim to increase the target radius once this issue has been fully resolved.
Thank you for providing the microprofile. Is the length of the Replicator GC Job steps in that profile typical of what is encountered when this issue occurs?
I do want to mention that there are other games that are experiencing this issue, is this configuration going to remain specific to 4618049391 and 17371491481, or will it be universally applied?
For the first places where the issue was reported, 4618049391 and 17371491481, I can confirm that the issue appeared due to the use of JointsService, and due to a very large number of joints being stored in JointsService.
While JointsService has been deprecated since 2019, the performance impact that resulted in the long frames was not intended, and we will develop a fix.
I noticed very large joint counts in JointsService for both 4618049391 and 17371491481, over 160,000 in one of them and over 40,000 joints in the other. This, along with the fact that the issues were reported to be longer with longer server sessions, leads me to believe that there are likely joints being left in JointsService and not completely removed in those experiences. Perhaps joints are being added to JointsService but never removed? Having over 160k joints in an experience seems high.
I recommend checking that joints are properly being cleaned up, and if possible not storing the joints in JointsService. This is usually a simple matter of changing the parent of the joint to be one of the parts in the joint rather than JointsService. This can also help ensure the joint is destroyed when the part is destroyed. If you are using A-Chassis then I think it is a one line change to stop using JointsService.
I did not see usage of JointsService in 4637668954 or 8265622251, but I was also not able to reproduce the performance issue with those experiences. They were updated recently so I’m wondering if they were using JointsService but are no longer.
You can still use A-Chassis vehicles, but we recommend you store the joints under the associated parts rather than in joints service. If I remember correctly it might be a simple one line change from something like: