2

LinuxでC#ゲームのサーバーを実行しようとしていますが、1つの問題を除いてはうまく機能します。ガベージコレクターは、OSにメモリを返さないようであるため、最終的に制限に達し、クラッシュします。

大量のメモリを解放する操作(マップの変更、またはプレーヤーの離脱)の後にSystem.GC.Collectを使用すると、OutOfMemoryErrorが防止されますが、使用可能なメモリ(1GB)の約30MBを除くすべてが使用されるため、少量のメモリを割り当てようとするとクラッシュします。

Windowsでは1人のプレーヤーがオンラインの場合に最大60MBを使用するため、メモリリークではないと思いますが、1人で接続と切断を繰り返すだけで、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)

OSはCentOSで、VPSプラットフォームはOpenVZです。

4

1 に答える 1

1

おそらくガベージコレクターの問題です。パラメータを使用してゲームを開始してみてくださいmono --gc=sgen。私はそれがいくつかの場合に機能することを知っています。

于 2013-02-26T19:55:21.370 に答える