gpt4 book ai didi

java - 使用 -Xss2G 时出现 JVM OutOfMemoryError

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:18 27 4
gpt4 key购买 nike

我有一个问题,当我尝试在 Linux 上启动一个 2G 堆栈大小的程序时,JVM 几乎立即退出并出现内存不足错误。

运行没有问题

-Xmx8G -Xss2047m

这些标志立即导致 jvm 退出并出现内存不足异常

-Xmx8G -Xss2048m

盒子有 32GB 的内存,几乎没有其他东西在运行,所以我确信我实际上并没有用完可用内存。我假设存在某种系统限制,但我正在努力找出它到底是什么。

我正在运行 RHEL 7.4 并使用 OpenJDK 1.8.0_151

“ulimit -a”的输出:

core file size          (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 127929
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 8192
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

关于我应该调整什么以使其以完整的 2GB 或更高容量运行的任何想法?

最佳答案

这是一个 JVM 错误。当 ThreadStackSize 四舍五入为 1K 的倍数时,该值被转换为 int,参见 arguments.cpp :

  // Internally track ThreadStackSize in units of 1024 bytes.
FLAG_SET_CMDLINE(intx, ThreadStackSize,
round_to((int)long_ThreadStackSize, K) / K);

因此,2G 溢出为负数,随后对 pthread_create 的调用失败。

漏洞 JDK-8178491已在 JDK 10 中修复。

很难想象需要如此大的堆栈的真实情况。但是,如果你真的想创建一个堆栈超过 2GB 的线程,你可以使用 Thread constructor。接受 stackSize 作为参数:

    public Thread(ThreadGroup group,
Runnable target,
String name,
long stackSize)

关于java - 使用 -Xss2G 时出现 JVM OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782116/

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