

- java -server -Xmx最大内存M -Xms最小内存M -Xss512K -Xaggressive -Xalwaysclassgc [-XcompilationThreads4] -Xconmeter:dynamic [-Xgcpolicy:metronome] -Xshareclasses [-Xtune:virtualized] -jar 服务端核心.jar




作者: tian051011

| 服务端:PaperSpigot-1.14.4-git147 装了一些常用插件(EssentialX,CoreProtect,Residence) 运行3分钟 使用gc命令查看内存占用: 使用默认JVM,不加任何优化参数,空载内存占用: ![]() 算是无功无过吧 使用OpenJ9,不加任何优化参数,空载内存占用: ![]() 内存占用明显下降,但还能更给力点吗? 使用OpenJ9,加上我的优化参数,空载内存占用: ![]() 无论是分配内存还是使用内存都下降了,这还只是空载的状态 使用jconsole监控: 使用OpenJ9,不加任何优化参数 ![]() ![]() 使用OpenJ9,加上我的优化参数: ![]() ![]() |


| -server 服务器运行模式,为持久运行优化 -Xms 初始堆大小,一般是物理内存的1/64(<1GB),和-Xmx一样大可以节省一点CPU资源 -Xmx 最大堆大小,一般是物理内存的1/4(<1GB),不过MC服务端对于内存的要求挺高的,能用上的都用上吧 -Xss 每个线程的堆栈大小,OpenJ9默认是1024KB,不过另一位服主的帖指出,对于MC,512KB足够了 -Xaggressive 更激进的性能优化,OpenJ9的文档指出它会在未来版本作为默认选项 -Xalwaysclassgc 始终在全局垃圾回收期间执行动态类卸载检查,减少内存占用 -XcompilationThreads4 指定JIT编译器使用的编译线程数,最高只能设到4,如果服务器物理核心不足4个,设置成物理核心的一半 -Xconmeter:dynamic 动态检测大对象区或小对象区域的使用情况 -Xgcpolicy:metronome 启用metronome垃圾收集器,可以让垃圾收集时的瞬卡更短暂。仅支持AIX(没人用这个开MC服吧)和Linux,Windows就不要加了。 -Xshareclasses OpenJ9的高速类共享功能,减少内存占用与启动时间,适合多个JVM运行相似代码的环境,或定期重启JVM的环境,对于群组服非常有用。 -Xtune:virtualized 假如你的服务器运行在虚拟化环境中(例如阿里云、腾讯云等等),使用这一选项可以在空闲时减少OpenJ9 VM CPU消耗,有可能会略微提升性能与减少内存占用,不过代价是吞吐量的少量损失。实体机环境不要加! |

借用一下@shangenbo 的图:![]() 在高级启动设置中的这个选项填入下面的代码,[]内的代码还是要看情况使用:
不同的启动器可能需要在不同位置设置,不过原理是相通的 |

| 1.此优化仅适用于OpenJ9 2.优化效果因环境差异可能会不同 3.如果换了参数后出现了问题,请回贴报告 |

NGK3 发表于 2019-8-9 01:56
emmm...模组服用了也可以嘛?
2019-08-08 18:00:00
| 我不介意再说一遍: JVM调优的目的是 让高性能硬件发挥出它本应该发挥出的效果(因为硬件性能的提升和卡不卡并不是线性增长的关系), 并不是让渣机逆天改命. 我不明白为什么现在给个参数上来就用内存占用甚至是 CPU 占用来表明参数有多牛逼, 是作者根本就不懂还是把读者当成**. 举一个**的例子: 你不停的调用系统 gc, 内存占用当然下降了, 而且我可以和你保证内存占用非常低, 但是服务器吞吐量反而下降了. 如果你说你的调优是有效的, 最起码应该对比前后 GC 耗时吧, 并发垃圾回收虽然不会 STW, 但是好歹也会占用电脑性能啊, 并发收集的过程吞吐量必定会跟着下降. 当然了, 如果你认为服务器堆性能的追求就是 "带更多人" 的话, 那确实不用关心别的. |
2019-08-09 00:20:00
凋灵兔子 发表于 2019-8-9 08:20
算了, 叫不醒就不叫了
2019-08-09 06:21:00
酷车手BB弹 发表于 2019-8-9 11:13
用Velocity尝试了下,内存占用是下来了许多,但GC的时候CPU消耗异常的高。。
2019-08-09 06:29:00
tian051011 发表于 2019-8-9 14:21
因为内存占用对于大多数不懂技术的服主比较直观...我也没说是“逆天改命”,就说是“锦上添花”
我已经补 ...
2019-08-09 09:39:00
超级无敌兔 发表于 2019-9-24 19:34
为什么说呢?这一点是从哪里看的?
2019-09-25 14:34:00
2019-10-03 02:42:00
Damnie 发表于 2019-10-3 10:42
这些参数与工业模组有冲突 导致卡在加载界面2/7处1.12.2 HMCL 客户端
补充:很多模组的情况下 没参数的情况 ...
2019-10-03 03:54:00
Damnie 发表于 2019-10-3 17:12
能 不用JVM参数就能启动
2019-10-03 09:24:00
tian051011 发表于 2019-10-3 17:24
那应该就是工业mod对OpenJ9的兼容性不好 可以试试更新工业mod版本和OpenJ9版本 ...
2019-10-03 11:32:00
2
指定jit用其他等级编译mc的方法,disableMethodHandleInlineWithoutPeeking是防崩的,在openj9 0.18测试,用openjdk11,-Dfml.queryResult=confirm只是防卡控制台 |
2020-02-28 05:00:00
1a2s3d4f1 发表于 2020-2-28 13:00
-Xaggressive 这个参数建议不用,使用后tps会变低(可能java11上是这样,java8位置)
0.16.0以上的openj9默 ...
2020-02-28 13:17:00
tian051011 发表于 2020-2-28 21:17
感谢你所提供的相关信息与资料 我正在用这些资料重新试验 不久后应该会在帖子里加入相关补充内容 ...
2020-03-02 09:43:00
2020-03-14 04:35:00
当你老爹 发表于 2020-3-14 12:35
复制粘贴楼主的参数,并且没有加入其它参数,OpenJDK最新版...
内存减半,性能优化减半!负优化无敌!
1.12.2C ...
2020-03-16 10:45:00
tian051011 发表于 2020-3-16 18:45
你好,请问你能否提供更多详细信息,例如服务器配置,OpenJDK与OpenJ9的具体版本号,CatServer的具体版本 ...
2020-03-16 11:31:00
shangenbo 发表于 2019-8-9 16:22
改天研究研究J9参数配g1gc cms J9不能用,所以一直不打算用J9 (J9目前兼容性也有点。。。) ...
2020-04-23 13:53:00
超级无敌兔 发表于 2020-7-2 17:07
1.16貌似用不了openj9,会把cpu吃满
2020-07-03 08:26:00
1a2s3d4f1 发表于 2020-7-3 16:26
感觉是1.16特有bug,用原生openjdk-hotspot也可以吃满,openj9 98% ,hotspot也是98%的cpu占用
目前测试到D ...
2020-07-03 08:56:00
2020-07-10 10:20:00
看来不是什么服务器都能用呀2020-07-11 07:40:00
明少OL 发表于 2020-7-11 15:40
看来不是什么服务器都能用呀
我那个spigot服,用楼主这个性能大幅度下降,6个人压测,tps掉到16以 ...
2020-07-11 09:47:00
明少OL 发表于 2020-7-11 15:40
看来不是什么服务器都能用呀
我那个spigot服,用楼主这个性能大幅度下降,6个人压测,tps掉到16以 ...
2020-07-12 02:42:00
1a2s3d4f1 发表于 2020-7-12 10:42
感觉是个服就不能用
如果是j9的服,建议用这个:
https://steinborn.me/posts/tuning-minecraft-openj9/再 ...
2020-07-12 16:53:00
2020-07-14 15:55:00
明少OL 发表于 2020-7-14 23:55
你那个倒是跟我那个参数差不多,本来我服务器配置是完全够的,这些参数也就起到个锦上添花的作用了,CPU ...
2020-07-15 04:24:00
1a2s3d4f1 发表于 2020-7-15 12:24
gencon gc 适合短命对象多的东西,mc1.8以后刚好服务端短命对象多(他那个教程似乎是怎么说的) ...
2020-07-15 05:28:00
梦想与未来 发表于 2020-10-3 13:00
错误: 找不到或无法加载主类 [-XcompilationThreads4]装上openj9 不用楼主的代码可以运行qaq
...
2020-10-05 15:59:00
