我一直在尝试让我的 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。