C# Unity MLAPI服务器以100%CPU运行

C# Unity MLAPI服务器以100%CPU运行,c#,unity3d,C#,Unity3d,我正试图用他们新的MLAPI(中级网络API)制作一款Unity游戏。我完全遵循了这一点,没有做任何改变,游戏在我的本地(Linux)PC上运行良好 我更改了连接IP并将构建文件复制到我租用的云服务器(DigitalOcean Ubuntu 20.04),并使用了标志-mlapi server,以及-batchmode-nographics选项,但我仍然怀疑它试图在CPU上模拟图形 100%的CPU问题似乎是,建议的解决方案包括行Application.targetFrameRate=30。我尝

我正试图用他们新的MLAPI(中级网络API)制作一款Unity游戏。我完全遵循了这一点,没有做任何改变,游戏在我的本地(Linux)PC上运行良好

我更改了连接IP并将构建文件复制到我租用的云服务器(DigitalOcean Ubuntu 20.04),并使用了标志
-mlapi server
,以及
-batchmode-nographics
选项,但我仍然怀疑它试图在CPU上模拟图形

100%的CPU问题似乎是,建议的解决方案包括行
Application.targetFrameRate=30。我尝试执行以下操作(
targetFrameRate
在未禁用vSync时被忽略):

然而,当我移动客户机时,我仍然获得100%的CPU(当然,每个操作在服务器上立即执行(!?)的额外奖励,但在每个客户机上执行1秒之后)


这到底是怎么回事?网上有人建议这可能与套接字轮询有关,但当我启动两个实例时,其中一个实例被杀死(CPU不足)。请注意,单台服务器的响应速度仍然很快。

这个问题似乎只发生在只有一个内核的Linux机器上。我尝试将单核上的fps减少到1,这确实将CPU减少到5%以下,但只有在启动单台服务器(例如,在端口7778上)时才会出现。一旦我在端口7779上启动第二台服务器,我们就回到100%的CPU状态。总之:

安装程序 结果 1个岩芯,每秒60帧,1个实例 100%CPU(坏) 1个岩芯,1个fps,1个实例
考虑到探查器不是为linux+内核编写的,我建议您使用AppMetrics。这样,您至少可以手动诊断性能下降。我们将其用于容器式应用程序,以诊断导致服务器端性能峰值的原因。忘了提及,我使用的是
htop
,而不是内置的Unity profiler。这是一个包含两个对象的空场景,正如教程中所述
switch (mlapiValue)
{
    case "server":
        netManager.StartServer();
        // https://docs-multiplayer.unity3d.com/docs/troubleshooting/troubleshooting
        QualitySettings.vSyncCount = 0;
        Application.targetFrameRate = 1;
        break;
    case "host":
        netManager.StartHost();
        break;
    case "client":
        netManager.StartClient();
        break;
}