2

我一直在尝试让我的 C# 游戏的服务器在 Linux 上运行,它运行良好,除了一个问题:垃圾收集器似乎没有将任何内存还给操作系统,所以它最终达到了限制并且崩溃。

我注意到在释放大量内存(更改地图或玩家离开)的操作之后使用 System.GC.Collect 可以防止 OutOfMemoryError,但它仍然使用除了大约 30MB 的可用内存(1GB)之外的所有可用内存,这仍然使它可能尝试分配少量内存时崩溃。

我不认为这是内存泄漏,因为在 Windows 上,当有一个玩家在线时,它最多使用 60MB,但是让一个人反复连接和断开连接足以耗尽 Linux 服务器上的所有内存。

单--版本:

Mono JIT compiler version 2.10.8 (tarball Mon Feb 25 19:25:00 MSK 2013)
Copyright (C) 2002-2011 Novell, Inc, Xamarin, Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  x86
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            Included Boehm (with typed GC and Parallel Mark)

操作系统是CentOS,VPS平台是OpenVZ。

4

1 回答 1

1

这可能是垃圾收集器问题。尝试使用mono --gc=sgen参数开始游戏。我知道它在某些情况下有效。

于 2013-02-26T19:55:21.370 回答