為什麼我的伺服器只有 5 個玩家線上時的記憶體使用率如此之高?
我最近啟動了一個普通的 Linux Minecraft 伺服器 (v1.7.2),並且遇到了高 RAM 使用率導致伺服器斷開連接的問題。我最多分配了 3.5 GB。
我一個小時前重新啟動了伺服器並一直在監視它。我注意到當玩家斷開連接時,記憶體使用量並沒有減少,並且隨著更多玩家加入,記憶體使用量只會增加。
- 5 名玩家登錄時,RAM 使用率為 63% (2.1 GB)。
- 伺服器上只有 3 個玩家,記憶體使用率為 58.9%。
啟動伺服器時我也收到此錯誤:
您的平台沒有提供完整的低級 API 來可靠地訪問直接緩衝區。除非明確要求,否則始終首選堆緩衝區以避免潛在的系統不穩定。
我用來啟動伺服器的命令是:
java -Xms512M -X3584M -jar minecraft_server.jar
什麼可能導致高記憶體使用,為什麼當玩家數量減少時它沒有減少?
我看到了一些可能的問題,這些問題可能會幫助您的伺服器以更少的記憶體執行。
玩家視距
在包括我自己在內的許多伺服器上,伺服器屬性文件中的 ViewDistance 參數可能過高。減小該值將導致為玩家載入的區塊減少,但如果您將其設置得太低,即低於 3,那麼您將無法看到足夠遠的距離來玩得開心。
這很容易通過減少 server.properties 文件中的“view-distance”參數來解決。
命令行參數
我發現您在問題中粘貼的問題存在一個小問題:
Java -Xms512M - X3584M -jar minecraft_server.jar
儘管我假設您正在嘗試將記憶體上限設置為 3.5GB,但我找不到只是“X”的 java 參數。這應該是這樣的:
Java -Xms512M - Xmx3584M -jar minecraft_server.jar
或者更簡單的版本:
Java -Xms512M -Xmx3.5G -jar minecraft_server.jar
如果您願意嘗試,每次重新啟動時將最大限制降低 512mb,並測量其性能。在某些奇怪的情況下,您可能會看到實際使用的記憶體有所減少。
使用 Java 7
根據我過去的經驗,在 Ubuntu 伺服器上執行,在 Java7 而不是 Java6 下執行 Craftbukkit 伺服器使用的 RAM 顯著減少。
切換到 Bukkit
儘管這對您來說可能是一個不需要的選項,但它絕對有效。使用 Craftbukit,可以在http://bukkit.org/上下載大量外掛,這些外掛有助於提高伺服器性能並降低資源使用率。
“正常”取決於每個玩家的位置以及載入的塊中發生的情況。
如果玩家分散開,那麼(顯然)會載入更多的塊,並且必須處理更多的生物。此外,紅石裝置將為您的世界添加許多塊更新。
您需要了解您的里程可能會有所不同。有些只能使用 1.5 GB,有些則必須處理 3 GB。您可能根本沒有使用交換空間,而且您的 JRE 版本也很重要。
所以是的,5 人玩時 2 GB 是正常的。