2012-03-01 62 views
2

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

-Xms256m

-Xmx1600m

我想增加RAM的量,优选达到约3GB(很明显,我知道该怎么做,只需增加-Xmx值)。但是,如果我将最大堆空间增加到1600MB以上,Tomcat拒绝启动。我读过的几个网站表示,Tomcat不能使用超过40%的可用RAM,这与我所看到的一致。

是否有增加的内存的Tomcat可以使用比例,这样我就可以增加量的内存的Tomcat可以使用的一种方式?

谢谢, 里克多维

+1

'$ GB'?错字? 4GB? – 2012-03-01 15:52:35

回答

2

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

感谢, 里克

+0

您的答案不正确,32位JVM不限于1.5 GiB的堆空间。限制是OS的进程大小。 – Mikaveli 2012-03-13 12:47:37

+0

@Mikaveli:你能提供证据或引用吗? Rik提出了似乎支持他的结论的实验证据。我想知道他是对还是错。 – LarsH 2012-09-20 14:10:13

+0

@LarsH这里你去:http://www.oracle.com/technetwork/java/hotspotfaq-138619.html#gc_heap_32bit甲骨文表示,一个32位的JVM可以解决接近4 GiB(64位)的Solaris和通常Windows上最高可达1.6 GiB。 – Mikaveli 2012-09-20 15:54:53

3

你的问题很可能是OS相关的,不是的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吉布可寻址空间的使用所有(或大部分)。

这就是说,64位的Windows操作系统的可以被配置为增加32位进程的极限至4吉布(3吉布在32位):

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

然而,如你”正确完成,最好的解决方案是在64位操作系统上使用64位JVM。 Terabyte堆人:

Max memory for 64bit Java:D