Minecraft(我的世界)中文论坛

 找回密码
 注册(register)

!header_login!

只需一步,立刻登录

查看: 251687|回复: 44

[服务器应用] Aikar: 调整JVM —— 非常有效的服务器启动参数

  [复制链接]
幻境雲達達 当前离线
积分
21611
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-1-4
查看详细资料
 楼主| 发表于 2019-5-22 08:13:03 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 幻境雲達達 于 2021-2-4 21:24 编辑



Aikar: 调整JVM —— 非常有效的服务器启动参数

原文地址: https://aikar.co/category/minecraft/

介绍

  • 经过数周的学习JVM,参数和测试各种搭配,我总结出了一套高效的MineCraft垃圾收集系统。我已经在我的服务器上测试过这些,并且已经使用很多年了。然后我向大家宣布了我的研究,直到今天,许多服务器已经使用我建议的参数很多年了,并且帮助我改进了垃圾收集行为。
  • 这些参数是大量研究的结果,并且在各种规模的服务器,各种类型的服务器中反复证明了自己是有效的!
  • 我强烈建议使用这些参数来启动您的服务器,这些参数有助于你的服务器良好运行,不会出现大的垃圾回收高峰,CPU占用率可能过高,但是您的服务器TPS将会变得整体稳定。
  • 如果这些参数帮助到你了,请考虑捐助我。

要使用的Java启动参数

  • 使用这些参数仅仅需要更改 Xmx 和 Xms 。这些参数应该适用于任何大小的内存,即使是500MB也同样适用。
  1. java -Xms6G -Xmx6G -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:MaxGCPauseMillis=100 -XX:+DisableExplicitGC -XX:TargetSurvivorRatio=90 -XX:G1NewSizePercent=50 -XX:G1MaxNewSizePercent=80 -XX:G1MixedGCLiveThresholdPercent=35 -XX:+AlwaysPreTouch -XX:+ParallelRefProcEnabled -Dusing.aikars.flags=mcflags.emc.gs -jar paperclip.jar
复制代码

推荐使用的服务器核心

  • 如果你还没有使用Spigot的改进版Paperspigot,你真的需要换掉了!Paperspigot是一个比Spigot速度更快的版本,具有巨大的性能提升。它还有Bug和漏洞修复系统,许多新动能以及大量新的API供开发人员使用,具有更好的体验。
  • Paperspigot是Spigot的替代品,每个Bukkit/Spigot插件的工作方式都相同,换用Paperspigot对你来说没有任何坏处!


推荐内存

  • 我建议使用10GB内存,无论你有多少玩家!如果你买不起10GB内存,你也要尽可能争取,但也要确保给你的系统留一些内存,G1GC在内存高的服务器上运行效果更好。
  • 超过10GB内存可能会有点多余,但应该没问题,实际上很少有服务器真正需要10GB内存以上。
  • 如果运行MC的内存为10GB或者更少,则不应该调整这些参数。

更旧一代内存需求

如果您你的玩家数量很多且使用超过10GB的内存,并且看到旧一代延迟峰值,您可能需要调整以下内容:
  • -XX:G1MaxNewSizePercent=60
  • -XX:G1NewSizePercent=40

参数详细说明

1. -Xms 和 -Xmx 相同,为什么?
  • 你不应该让 Xmx 完全占用你机器的全部内存,你的服务器会使用整个 Xmx 的内存。
  • 然后,你应该确保除了Xmx之外,你的机器还有剩余内存,来运行服务器系统以及非MC服务器的东西。如果Xmx低于Xmx,你有未使用的内存!未使用的内存就代表浪费了内存。G1的内存越多,运行效果就越好。G1自适应地选择给每个区域多少内存来优化,如果您的内存超过了达到最佳暂停时间所需的内存,那么g1只会将多余的内存推到旧一代中,而不会对您产生影响。
  • 改善GC行为的基本思想是确保对象尽快清除,随着G1的内存越多,你就能更好的保证将对象尽快清除。
  • G1的运行方式与以前的垃圾收集器不同,能够更有效地处理更大的堆,它不会使用它不需要的内存,整个运行方式不同,并且没有太大的堆积,这是行业内广泛认可的,在G1下确保 -Xms 和 -Xmx 相同!

2. UnlockExperimentalVMOptions :
  • 下面的一些选项会用到。

3. TargetSurvivorRatio:
  • 我觉得你一定会看到这里,好消息!他实际上是一个很好地参数,此参数控制提升前可以使用多少生存空间,如果空间过满,就会推向旧一代,原因是能够处理内存分配峰值。然而,大多数情况下MC的分配率相当稳定,并且当它稳定时可以安全地提高这个值以避免出现问题。

4. G1NewSize Percent:
  • 这是一个非常重要的参数,在CMS和其他Generations中,调整新的GC会产生固定大小的新GC,通常使用 -xmn 来设置。有了G1,就变好了!你现在可以为新一代制定整体所需范围的百分比,通过这些设置,我们告诉G1不要使用默认的5%用于新一代,而是至少给它50%!这样MineCraft具有极高的内存分配率,在一个有30个玩家的服务器上每秒最少800兆字节!
  • 这在,意味着MC真的需要更多的关注新一代,以便能够支持这种分配率,如果你的新Gen太小,你将每秒运行Gen1-2次,这样真的很糟糕,你会感觉到很多卡顿,TPS也会很低,服务器无法保证GC的使用量。

5. G1MixedGCLiveThresholdPercent:
  • 控制何时在新的GC集合中包含混合GC,以保证旧GC集合的整洁,而不执行常规的旧GC集合。当你的内存低于这个百分比的时候,旧的GC不会包含混合GC,混合GC不像完整的那么沉重,所以对老的GC集合进行小的增量清理可以减少内存使用量。

6. AlwaysPreTouch:
  • AlwaysPreTouch 获取内存并在进程启动时保留,确保它是连续的,从而提高其效率。 提高了操作系统内存访问速度。

7. +DisableExplicitGC:
  • 许多插件自认为他们知道如何控制内存,并尝试调用垃圾收集。 执行此操作的插件会触发完整的垃圾回收,从而引起极高的延迟峰值。 此参数禁止插件尝试执行此操作,从而保护您免受其错误代码的影响。

8.MaxGCPauseMillis=100:
  • 此参数控制在为新一代指定内存使用的最小和最大范围。
  • 这是您希望服务器暂停收集多长时间的“目标”。 100等于2个刻度,目标是最多丢失2个刻度。 这样会导致短暂的TPS下降,但是Spigot和Paper都可以立即弥补这一下降,这意味着它对您的TPS没有任何有意义的影响。 低于100ms的延迟玩家基本感觉不到。

9.+ParallelRefProcEnabled:
  • 优化GC过程中使用多个线程进行。

使用大内存分页

  • 对于大内存分页来说,保证 Xms 和 Xmx 相同更重要!大内存分页需要为其指定所有内存,否则最终可能无效果。 操作系统不会使用此内存,因此请使用它。
  • 另外此参数只支持Java8,不能在Java7上使用。
  1. -XX:+UseLargePagesInMetaspace
复制代码


评分

参与人数 12人气 +17 金粒 +64 收起 理由
FA洛 + 1 对我这个从未开过服的人帮助很大啊.
大大的咸鱼 + 1 + 20 Ssssssssssssssssssss
liaoxu2003 + 1 神乎其技!6的飞起!
lzy001 + 1 MCBBS有你更精彩~
Link和glx + 2 + 8 MCBBS有你更精彩~
GCreeper + 1 + 5 MCBBS有你更精彩~
Ling_Haner + 2 MCBBS有你更精彩~
冷枫小乐 + 2 + 5 爱了爱了,支持
cc7w + 3 MCBBS有你更精彩~
MC-骨灰 + 1 + 6 MCBBS有你更精彩~
Color_yr + 20 MCBBS有你更精彩~
langyo + 2 有点干货

查看全部评分

森林蝙蝠 当前离线
积分
9822
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2016-6-16
查看详细资料
发表于 2019-5-22 08:36:21 | 显示全部楼层
这是spigot的东西,未必适用于forge/sponge和catserver。
回复

使用道具 举报

linbo10 当前离线
积分
843
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-2-25
查看详细资料
发表于 2019-5-22 12:47:59 | 显示全部楼层
请问一下面板服可以不可以修改?使用
回复

使用道具 举报

幻境雲達達 当前离线
积分
21611
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-1-4
查看详细资料
 楼主| 发表于 2019-5-22 13:28:06 | 显示全部楼层
linbo10 发表于 2019-5-22 12:47
请问一下面板服可以不可以修改?使用

部分面板有更改参数功能
回复

使用道具 举报

Freez!流年 当前离线
积分
1614
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-2-11
查看详细资料
发表于 2019-5-22 22:20:09 | 显示全部楼层
我修改启动参数后tps为-0.01 -0.03 -0.08 真的。。。。
核心版本为1.14.1的paperclip-37
回复

使用道具 举报

幻境雲達達 当前离线
积分
21611
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-1-4
查看详细资料
 楼主| 发表于 2019-5-23 05:08:11 | 显示全部楼层
Freez!流年 发表于 2019-5-22 22:20
我修改启动参数后tps为-0.01 -0.03 -0.08 真的。。。。
核心版本为1.14.1的paperclip-37 ...

?????不会吧233

怎么会这样哦
回复

使用道具 举报

Freez!流年 当前离线
积分
1614
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-2-11
查看详细资料
发表于 2019-5-23 05:46:13 | 显示全部楼层
XJue_DaDa 发表于 2019-5-23 05:08
?????不会吧233

怎么会这样哦

就感觉有点奇怪。。。内存我给的6G-6G
回复

使用道具 举报

当前离线
积分
11370
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-1-1
查看详细资料
发表于 2019-5-24 13:17:40 | 显示全部楼层
我觉得,这篇文章既然是面对腐竹的,来教他们调整他的服务器的教程,
直接翻译的详细说明未免有些太硬核了,专业名词对于不专业的腐竹可能难以理解。
建议按照自己的理解,写成通俗易懂的白话解释,再把原文翻译折叠起来,或许更好一些。
回复

使用道具 举报

幻境雲達達 当前离线
积分
21611
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-1-4
查看详细资料
 楼主| 发表于 2019-5-24 13:18:27 | 显示全部楼层
1582952890 发表于 2019-5-24 13:17
我觉得,这篇文章既然是面对腐竹来调整他的服务器的教程,
直接翻译的详细说明未免有些太硬核了,专业名词 ...

对于我来说难度真的大。。理解不了。。

只能这样硬翻译。。
回复

使用道具 举报

ysy960108 当前离线
积分
6195
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2014-4-11
查看详细资料
发表于 2019-5-26 21:28:31 | 显示全部楼层
森林蝙蝠 发表于 2019-5-22 08:36
这是spigot的东西,未必适用于forge/sponge和catserver。

Spigot,Sponge之类的服务端都是Java应用,任何Java应用都可以用到JVM优化。
回复

使用道具 举报

omysho 当前离线
积分
183
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2014-6-26
查看详细资料
发表于 2019-6-23 02:40:51 | 显示全部楼层
有些翻译问题,估计是楼主对 JVM 不是很熟悉:

New Generation -> 新生代(实际上应该是 Young Generation,原作者也写错了)
Old Generation -> 老生代

这两个都是 JVM 术语,指的是 JVM 内存结构的区域,具体可以看下图:



可以看到,实际上原作者也搞错了,其实并没有什么 New Generation,而应该是 Young Generation

顺便解释一下 G1NewSize Percent 这个设置的意义:

在 G1 垃圾回收算法中,上面的 Young Generation 的大小是通过算法动态调整的,这个参数指定的是 Young Generation 的最小百分比。
默认值是 5%,那为什么要调高这个值呢?JVM 把内存分了很多部分,当 Young Generation 里面的一个块(比如 Eden)分配满了之后,会触发一次 Minor GC 进行垃圾回收,然后把没有回收掉的内存放到下一个内存区域。垃圾回收会重新调整内存,于是机器就会卡顿。而对于 MC 来说,动态变化的东西很多,很多对象的内存都不会持续很长时间,因此有很多内存都是处于 Young Generation 的。如果 Young Generation 的内存过小,那么就会频繁触发 GC,导致卡顿。因此,这里直接给 Young Generation 一半的空间,减少其 GC 频率。
回复

使用道具 举报

幻境雲達達 当前离线
积分
21611
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2015-1-4
查看详细资料
 楼主| 发表于 2019-6-23 08:38:57 | 显示全部楼层
omysho 发表于 2019-6-23 02:40
有些翻译问题,估计是楼主对 JVM 不是很熟悉:

New Generation -> 新生代(实际上应该是 Young Generation ...

感谢,这方面确实不懂,强行翻译出来自己都觉得丢人。
回复

使用道具 举报

26790top 当前离线
积分
2272
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2014-8-19
查看详细资料
发表于 2019-6-27 07:51:05 | 显示全部楼层
感谢分享,码住码住
回复

使用道具 举报

索隆嘎嘎嘎 当前离线
积分
526
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2019-4-18
查看详细资料
发表于 2019-6-27 08:08:02 来自手机 | 显示全部楼层
感谢分享
回复

使用道具 举报

Xiao_FD 当前离线
积分
248
帖子
主题
精华
贡献
爱心
钻石
人气
下界之星
最后登录
1970-1-1
注册时间
2019-6-28
查看详细资料
发表于 2019-6-28 23:13:21 | 显示全部楼层
呃呃呃呃呃呃呃呃呃呃呃呃 不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2021-6-20 18:33 , Processed in 0.077531 second(s), Total 36, Slave 30 queries, Release: Build.2021.06.13 1634, Gzip On, Redis On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2020 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表