gpt4 book ai didi

java.lang.OutOfMemoryError : Java heap space with 300MB java. exe 上限

转载 作者:行者123 更新时间:2023-11-28 23:54:53 26 4
gpt4 key购买 nike

我有一个基于 web 的应用程序,它在 tomcat5 mysql 上运行并使用 JVM 和 java 等......它工作正常但每次它开始为 java.exe(windows 服务器)获取大约 300MB 的内存时它会崩溃进行查询或任何占用 ram 中任何空间的操作。但是机器服务器本身有 16GB 的 ram....

如何克服这个问题?

我得到的错误是这样的:

错误结果集处理请求异常(4):java.lang.OutOfMemoryError: Java heap space

如果我终止任务 java.exe 并重新启动进程,它会再次运行,直到 java.exe 达到大约 300MB 的内存墙....我已经尝试将 xmx 设置为 1600MB 或更大但无济于事并且没有完全不同....

有人知道这是怎么回事吗?

///////////////

更新评论

好吧,我发现了一些奇怪的事情,如果我将它设置为等于或低于 1024 MB 的任何东西,它就可以工作,并且服务在所有版本的窗口服务器上的 services.msc 中启动。但是如果我将它设置为更多,即使是 1025mb,它也不会启动,除非我精确地设置 24 的倍数,比如 1024、1048、1072 等...直到达到极限...

在总容量只有 4GB 的 Windows Server 2008 32 位上,限制约为 ~1600 左右,但令人惊讶的是,在具有大量内存的 Windows Server 2008 r2 64 位上,限制仅为~1200 左右

这是完全相同的 tomcat5.exe 和 tomcat5w.exe,并以完全相同的方式作为服务安装...所以它没有任何意义...

为什么内存增加超过 1024mb 标记需要以精确的 24mb 增量?为什么会有不同的“墙”,低规范的机器能够达到比高规范的机器更高(1600mb)的内存更多(~1200)

我读到一些关于 JVM 需要连续内存的东西,但这简直是疯了,没有任何意义

最佳答案

因为您只提到“tomcat5”(甚至没有提到 5.5):请注意 Tomcat 5.0 的最后一个版本是在 2004 年发布的,但即使您指的是 Tomcat 5.5,它也已在 2012 年停产. Tomcat 5 基于 Java5,这就是我要寻找的罪魁祸首:

(请注意,这是很久以前的事了,我正在转述我当时还记得的内容。我可能只打对了方向,但不是每个细节)

在那个时代,32 位 Java VM 比现在更普遍,32 位 Windows 上的 32 位进程通常会遇到一个问题:它们需要连续的内存块——可以提供给 32 位进程的绝对最大值(但仅当内存尚未碎片化时)大约为 1.5G - 无论机器有多少内存。

我的一般建议是将-Xmx-Xms 设置为相同 值。在一开始就分配您准备分配的任何内容——无论如何您都需要准备好分配,并且无需等待触发 OutOfMemory 条件的任意事件。也许您的应用程序可以接受 300 或 400 MB,但会尝试分配更多,因为您已允许它使用大于系统可提供的 -Xmx 值来分配。您宁愿在启动进程时(例如,当您坐在计算机旁边时)检测这种情况,而不是在周日晚上凌晨 3 点服务停止时检测到这种情况。

如果您的系统中有任何 32 位组件,请先修复它,然后重试。您可能还希望优先升级到可以获得升级和最新知识的环境,而不是落后超过十年(甚至五年以上,具体取决于您运行的实际版本)。

关于java.lang.OutOfMemoryError : Java heap space with 300MB java. exe 上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53806851/

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