Tomcat:调整内存比例

Posted

技术标签:

【中文标题】Tomcat:调整内存比例【英文标题】:Tomcat: adjust memory proportions 【发布时间】:2012-03-20 03:08:34 【问题描述】:

我有一个运行在具有 4GB RAM 的 Windows 2008 Server 上的 Tomcat 实例。服务器专用于这个应用程序,所以我非常希望能够将大部分 RAM 专用于 Tomcat。我的 Tomcat 设置目前有以下 java 选项:

-Xms256m

-Xmx1600m

我想增加 RAM 的数量,最好增加到 3GB 左右(显然我知道怎么做,只需增加 -Xmx 的值)。但是,如果我将最大堆空间增加到 1600MB 以上,Tomcat 会拒绝启动。我读过的几个网站说 Tomcat 不能使用超过 40% 的可用 RAM,这似乎与我所看到的一致。

有没有办法增加 Tomcat 可以使用的内存比例,以便我可以增加 Tomcat 可以使用的内存数量

【问题讨论】:

【参考方案1】:

尽管有 64 位服务器,但我只安装了 32 位 Java/Tomcat。我卸载了 Java 和 Tomcat 并安装了 64 位版本,一切正常。似乎问题在于 32 位 Java 只能处理 1.5 GB。

【讨论】:

你的回答不正确,32 位 JVM 不限于 1.5 GiB 的堆空间。限制是操作系统的进程大小。 @Mikaveli:你能提供证据或引用吗? Rik 提供了似乎支持他的结论的实验证据。我想知道他是对还是错。 @Mikaveli:谢谢。它没有明确说明 64 位 Windows 上的 32 位 JVM,但它确实说“在运行 32 位 VM 的 64 位操作系统上,最大堆大小可能高于 [我猜 1.6GB] "以及您提到的有关 Solaris 的一些信息。 @LarsH 他的回答是“32 位 Java 只能寻址 1.5 GB”——我已经证明这种说法是不正确的。一个 32 位的 JVM 可以处理近 4 GiB。此外,如果您阅读了我的回答,您会发现 Windows 是限制因素 - 其中 32 位进程被限制为 2 GiB,即使在其 64 位操作系统上也是如此(默认情况下)。【参考方案2】:

您的问题可能与操作系统有关,而不是 Tomcat / Java。 Windows 操作系统将 32 位进程的内存分配总量限制为 2 GiB(默认情况下)。

它只允许您分配大约 1.5 GiB 堆空间的原因是因为还有其他内存分配给进程(JVM / 库开销、perm gen 空间等)。

Why does 32-bit Windows impose a 2 GB process address space limit, but 64-bit Windows impose a 4GB limit?

其他现代操作系统 [咳嗽 Linux] 允许 32 位进程使用全部(或大部分)4 GiB 可寻址空间。

也就是说,64 位 Windows 操作系统可以配置为将 32 位进程的限制增加到 4 GiB(32 位为 3 GiB):

http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx

但是,正如您所做的那样,最好的解决方案是在您的 64 位操作系统中使用 64 位 JVM。太字节堆任何人:

Max memory for 64bit Java:D

【讨论】:

以上是关于Tomcat:调整内存比例的主要内容,如果未能解决你的问题,请参考以下文章

tomcat调整运行内存

tomcat最多能占多大内存?

tomcat 修改内存配置

如何配置Tomcat的JVM虚拟机内存大小

如何设置Tomcat的JVM虚拟机内存大小

Tomcat性能优化及JVM内存工作原理