我有一个Spring应用程序在Linux 64上的Tomcat 9.0.6中运行。因为它需要大量内存,所以我想尝试一下OpenJ 9 JVM,它在这方面应该更高效(Hotspot的当前堆限制:- Xmx 128 G)。我安装了64位的adaptopenjdk-8-jdk-openj 9:
/usr/lib/jvm/adoptopenjdk-8-jdk-openj9/bin/java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
Eclipse OpenJ9 VM (build openj9-0.14.2, JRE 1.8.0 Linux amd64-64-Bit Compressed References 20190521_315 (JIT enabled, AOT enable
OpenJ9 - 4b1df46fe
OMR - b56045d2
JCL - a8c217d402 based on jdk8u212-b04)
启动tomcat会导致以下错误:
This JVM package only includes the '-Xcompressedrefs' configuration. Please run the VM without specifying the '-Xnocompressedrefs' option or by specifying the '-Xcompressedrefs' option.
设置此选项后,出现以下错误:
JVMJ9GC028E Option too large: '-Xmx'
JVMJ9VM015W Initialization error for library j9gc29(2): Failed to initialize
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
文档不是很清楚,但我找到了这个:https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/mm_gc_compressed_refs.html
Compressed references are used by default on a 64-bit IBM SDK when the value of -Xmx, which sets the maximum Java heap size, is in the correct range. Start of changes for service refresh 2 fix pack 10On AIX®, Linux and Windows systems, the default range is 0 - 57 GB. For larger heap sizes, you can try to use compressed references by explicitly setting -Xcompressedrefs.End of changes for service refresh 2 fix pack 10 However, larger heap sizes might result in an out of memory condition at run time because the VM requires some memory at low addresses. You might be able to resolve an out of memory condition in low addresses by using the -Xmcrs option.
所以基本上,至少JDK的这个版本只支持compressedref,为了使用它,我必须手动设置它,因为我的Xmx高于默认启用的范围,但这失败了,因为我的操作系统已经分配了大部分〈4GB的内存范围,但需要一些内存来使用compressedref。因为我永远不能保证不会出现这种情况,有没有什么方法可以让我在没有compressedrefs的情况下使用OpenJ 9?2这甚至会在内存消耗方面产生好处吗?3或者有没有什么方法可以让我在使用非常高的Xmx设置的情况下使用compressedrefs?
我也尝试过设置此选项,但没有任何帮助:https://www.ibm.com/support/knowledgecenter/SSYKE2_8.0.0/openj9/xmcrs/index.html?view=embed
我如何找到正确的大小?1G和64 m失败了。即使我找到了正确的设置,这个值如何保证操作系统还没有分配所有较低的内存地址?
2条答案
按热度按时间kkbh8khc1#
使用压缩的refs JVM的限制是57G,如果指定了
-Xnocompressedrefs
选项,则无法运行它。57G部门记录如下:https://www.eclipse.org/openj9/docs/xcompressedrefs/
发行说明中提到了
-Xnocompressedrefs
问题:https://github.com/eclipse/openj9/blob/master/doc/release-notes/0.15/0.15.md参考:https://github.com/eclipse/openj9/issues/479
以下内容介绍了如何创建一个支持这两种功能的JVM:https://github.com/eclipse/openj9/issues/643
https://github.com/eclipse/openj9/pull/7505
(With感谢Eclipse OpenJ9 slack社区的帮助,特别是Peter Shipton)
qmb5sa222#
我发现这个版本允许使用非压缩的dref,从而解决了我的问题:https://adoptopenjdk.net/releases.html?variant=openjdk8&jvmVariant=openj9#linuxxl