我一直在努力让我的 C# 游戏的服务器在 Linux 上运行,它运行良好,除了一个问题:垃圾收集器似乎没有将任何内存返回给操作系统,所以它最终到达限制和崩溃。
我注意到在释放大量内存(更改 map 或玩家离开)的操作之后使用 System.GC.Collect 可以防止 OutOfMemoryError,但它仍然使用除了大约 30MB 的可用内存 (1GB) 之外的所有内存,这仍然使得当尝试分配较小的内存量时,它可能会崩溃。
我不认为这是内存泄漏,因为在 Windows 上,当有一个玩家在线时它最多使用 60MB,但是让一个人反复连接和断开连接足以用完 Linux 服务器上的所有内存.
单声道 --version:
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。
最佳答案
这可能是垃圾收集器的问题。尝试使用 mono --gc=sgen
参数开始游戏。我知道它在某些情况下有效。
关于c# - Linux VPS 上的单声道垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15096833/