為什么我的Minecraft服務(wù)器總是使用100%的可用RAM?
我有一個(gè)minecraft服務(wù)器(1.16.5),托管在一個(gè)VPS上,有16GB的內(nèi)存,我和8個(gè)朋友在服務(wù)器上玩,它使用了我所有的內(nèi)存,我們玩香草生存,但我看不出這會(huì)如何導(dǎo)
解答動(dòng)態(tài)
您正在設(shè)置這兩個(gè)選項(xiàng):
-Xms14G-Xmx14G
This意味著JVM應(yīng)該從14gb(-Xms)開始,并增長(zhǎng)到14gb(-Xmx)堆RAM的最大使用量。實(shí)際的RAM使用率會(huì)更高,因?yàn)閖ava本身、加載的類、垃圾收集臨時(shí)內(nèi)部等都需要一些空間。這反過來意味著JVM從一開始就將分配接近16 GB的內(nèi)存。
現(xiàn)在,在Linux系統(tǒng)上,這不會(huì)在一開始就物理分配所有14 GB的堆—JVM要求Linux分配14 GB的內(nèi)存GB,Linux告訴JVM“給你”,但是那些ram頁面只有在被寫入之后才會(huì)被分配給JVM。在JVM真正寫入所有RAM之前,它需要幾秒鐘到1-2小時(shí)的播放時(shí)間,所以到那時(shí),OS至少會(huì)有一部分RAM到自己。一旦14 GB被填滿,Java將開始它的第一次垃圾回收-因此它將在內(nèi)部釋放大量?jī)?nèi)存,但不會(huì)將這些內(nèi)存返回給您的系統(tǒng)。
這意味著您的Linux的磁盤緩存非常低,這意味著比必要的磁盤訪問要多得多,這通常意味著很多延遲。(這在VPS上可能更好一些,在VPS上磁盤訪問通過主機(jī),主機(jī)本身可能有一些緩存)。
您真正應(yīng)該做的是將-Xms和-Xmx參數(shù)降低到可用RAM的一半,在您的情況下是8GB。然后,通過打開GC日志并檢查日志文件,檢查Minecraft真正需要多少RAM。
對(duì)于java14(您應(yīng)該與紙張一起使用),將其添加到j(luò)avai中位置:
Xlog:gc*:gc.log日志:時(shí)間,級(jí)別,標(biāo)記:filecount=5,filesize=1024k 這將生成一個(gè)名為gc.log日志在服務(wù)器目錄中(加上,隨著時(shí)間的推移,一些老一代人gc.log日志.0等等。這些文件包含關(guān)于每次GC運(yùn)行的信息,有趣的行如下所示這個(gè):年輕人(正常)(G1疏散暫停)10247M-gt;0.0B(8176.0M)幸存者:16.0M-gt;2790.4M(16.0G)] 在本例中,您感興趣的是堆值:這里,16GB來自-Xmx,10.7GB在GC之前使用,2790MB在GC之后使用。
我關(guān)心的JVM參數(shù)之一--XX:+DisableExplicitGC.
Minecraft-Java服務(wù)器是基于Java的,因此在Java虛擬機(jī)(JVM)中運(yùn)行。在startup命令中提供的參數(shù)告訴JVM如何操作、使用什么配置等。
根據(jù)Oracle文檔(Oracle擁有Java):
使用-XX:+DisableExplicitGC禁用對(duì)垃圾回收(). 請(qǐng)注意,JVM在必要時(shí)仍然執(zhí)行垃圾收集。
通過提供此參數(shù),您告訴服務(wù)器的JVM禁用系統(tǒng)垃圾收集。在不太詳細(xì)的情況下,垃圾收集器會(huì)自動(dòng)管理Java程序的內(nèi)存。正如引用所說,它仍將根據(jù)需要執(zhí)行垃圾收集,但在您的情況下似乎不需要這樣做(可能是因?yàn)楦鶕?jù)Xmx參數(shù),您仍有~2Gb或RAM可用)。一位消息人士說,通過設(shè)置此參數(shù),可能會(huì)延遲垃圾收集事件更長(zhǎng)的時(shí)間。
因此,我將嘗試將參數(shù)更改為-XX:-DisableExplicitGC,或者干脆將其刪除。- End
免責(zé)聲明:
本頁內(nèi)容僅代表作者本人意見,若因此產(chǎn)生任何糾紛由作者本人負(fù)責(zé),概與琴島網(wǎng)公司無關(guān)。本頁內(nèi)容僅供參考,請(qǐng)您根據(jù)自身實(shí)際情況謹(jǐn)慎操作。尤其涉及您或第三方利益等事項(xiàng),請(qǐng)咨詢專業(yè)人士處理。