Java 8 内存不足:使用Java8的元空间

Java 8 内存不足:使用Java8的元空间,java-8,jetty-8,metaspace,java-memory-leaks,Java 8,Jetty 8,Metaspace,Java Memory Leaks,我的产品有256MB的内存。我已将Java6升级到Java8。 然后,我开始面临与Java8有关的内存问题。 使用Java8时,内存消耗会随着时间的推移而增加 使用相同的代码,java 6的内存消耗是稳定的 我对metaspace、java8进行了大量探索,并发现了以下metaspace参数 我尝试了以下组合,但出现了内存不足错误 1.MaxMetaspaceSize 50M MaxMetaspaceFreeRatio 60米 MinMetaspaceFreeRatio 50米 2.MaxMet

我的产品有256MB的内存。我已将Java6升级到Java8。 然后,我开始面临与Java8有关的内存问题。 使用Java8时,内存消耗会随着时间的推移而增加 使用相同的代码,java 6的内存消耗是稳定的 我对metaspace、java8进行了大量探索,并发现了以下metaspace参数

我尝试了以下组合,但出现了内存不足错误

1.MaxMetaspaceSize 50M MaxMetaspaceFreeRatio 60米 MinMetaspaceFreeRatio 50米

2.MaxMetaspaceSize 30M

3.MaxMetaspaceSize 40M

4.MaxMetaspaceSize 50M

5.MaxMetaspaceSize 80M

但在2到3小时后,outofmemory元空间错误出现

有人能解释一下什么是元空间选项MaxMetaspaceSize、MaxMetaspaceFreeRatio、MinMetaspaceFreeRatio吗?

如何确定合适的尺寸? 这些值的正确组合是什么,以避免生产中出现outofmemory实例并减少内存消耗?

问题已得到解决。 发现JAXB存在已知问题。
  • 使用了stringbuffer而不是string
  • 删除了不必要的JAXBContext实例。
  • 请参阅此链接
  • 我不明白,为什么开发人员总是拿这些选项胡闹。默认值是无限元空间。因此,如果您不知道哪些限制是最好的,请不要指定任何限制。如果我们不指定限制,它可能会导致巨大的本机内存分配。是的,如果您指定限制,它可能会导致
    OutOfMemoryError
    。这是你的选择……如果我不设置任何metaspace属性,metaspace会不断增加,即使GC没有从metaspace清理/卸载类。为什么会这样?当GC运行时,我应该做些什么来清理元空间?你没有。如果一个软件有内存泄漏,没有JVM选项可以修复。你必须修复软件。