gpt4 book ai didi

java - 如何修复 Java 中的 "Requested array size exceeds VM limit"错误?

转载 作者:太空狗 更新时间:2023-10-29 22:39:50 24 4
gpt4 key购买 nike

是否有一个日志选项可以让 tomcat 记录错误的查询而不是仅仅抛出这个?

SEVERE: java.lang.OutOfMemoryError: Requested array size exceeds VM limit

(尝试日志级别为FULL,但只捕获上面的)

这些信息不足以进一步调试
或者,是否可以通过调整以下内容分配更多内存来解决此问题?

-Xms1024M -Xmx4096M -XX:MaxPermSize=256M

更新

-Xms6G -Xmx6G -XX:MaxPermSize=1G -XX:PermSize=512M

(以上似乎效果更好,继续监控)

最佳答案

我怀疑您可能正在对大型索引使用排序。这是我绝对知道 Lucene 可能需要大数组的一件事。无论哪种方式,您都可能想尝试使用具有以下选项的 64 位 JVM:

-Xmx6G -XX:MaxPermSize=128M -XX:+UseCompressedOops

最后一个选项会将 64 位内存指针减少为 32 位(只要堆小于 32GB)。这通常会减少大约 40% 的内存开销,因此它可以帮助显着扩展您的内存。

更新:很可能您不需要这么大的永久代大小,当然不是 1G。你可能对 128M 没问题,如果你继续使用 Java 6,你会得到一个特定的错误。由于你在你的服务器中被限制为 8G,你可以使用较小的 perm 为堆分配 7G将军小心不要进入交换,这会严重降低 Java 的运行速度。

我注意到您在更新中没有提到 -XX:+UseCompressedOops。如果您还没有尝试过,那会有很大的不同。您可以通过减小 eden 的大小来为老一代提供更多空间,从而挤出更多空间。除此之外,我认为您只需要更多的内存或更少的排序字段。

关于java - 如何修复 Java 中的 "Requested array size exceeds VM limit"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5497259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com