论坛首页 Java企业应用论坛

JVM内存最大能调多大

浏览 45334 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-16  
这个还跟os相关的
0 请登录后投票
   发表时间:2007-05-16  
正常情况下
在Windows平台上不要超过1G
可以调其它的参数
如Heap Space内存
隔代收集算法


并不是内存越大就越运行的越好
0 请登录后投票
   发表时间:2007-05-16  
Why Windows?
0 请登录后投票
   发表时间:2007-05-16  
因为Linux下我没有调过
所以只说Windows下面的
0 请登录后投票
   发表时间:2007-05-17  
这里有人压根在胡扯. 32bit程序最大内存访问空间是4G, 2的32次方,这是硬件决定的,跟windows linux没有任何关系. Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配3G给进程,1G留给核心的.


但是对于某些linux和windows,他们的OS进程确实可以访问到4G以上内存, 这是通过一些特殊技术得到的,redhat linux AS 2.1 或者AS3.0下是通过VLM,windows adv. server则是AWE技术.


参数如下:

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE

16GB以上只能选3GB或者PAE一种.


但是对于其他进程来说还是突破不了4G上限,甚至包括oracle也是如此,在oracle中,则是通过将内存当作文件来访问的,虚拟一个 /dev/shm 的文件系统,这个文件系统是完全由内存组成的,这样才突破4g的限制。

0 请登录后投票
   发表时间:2007-05-17  
我建议你做Tomcat集群。当然前提是你的程序支持Cluster。每个JVM都可以用1G左右。这是一种充分利用内存、增加系统负载能力的办法。
IBM的WAS部署时可以选择分布式部署,也就是在一台应用服务器上,装两个WAS,然后把应用发布到这两台WAS上,前面有个apache做负载均衡。当然啦,这不是cluster。Tomcat是否也可以这样,我没有试过,理论上是可以。CMS网站大多数都这样。


不过,一定要注意,你们的应用系统,在Tomcat上究竟需要多大内存,不是越大越好。越大,往往意味着GC的时间越长,要知道,在GC期间,是个Stop The World(STW)过程,系统不对外响应,多CPU、并行处理也不能改变这个事实。请保证你们的GC时间在0.2到0.5s以内,我以前是作WAS的,WAS有专门工具。

如果你们系统持续运行一个月,也用不到600M的heap,那么把heap增加到1000M并不会增加系统性能。要是在WAS下,你把heap最大值和最小值都设成一样,只会导致更多的碎片,更差的性能。当然,sun的默认GC策略是复制+分代策略,所以不会有IBM JVM这样的问题。
http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
http://java.sun.com/docs/hotspot/gc1.4.2/faq.html

不妨看看我这篇没完成的文章:http://zwchen.iteye.com/blog/74737


  • Garbage Collection and Storage Allocation techniques.rar (496.8 KB)
  • 描述: 楼上帖子的证据: 这里有人压根在胡扯. 32bit程序最大内存访问空间是4G, 2的32次方,这是硬件决定的,跟windows linux没有任何关系. Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配3G给进程,1G留给核心的.
  • 下载次数: 156
0 请登录后投票
   发表时间:2007-05-18  
是啊,即使能上4G也不要轻易使用,垃圾收集的暂停会搞得你很痛苦的,除非你的服务对实时性要求不高,偶然暂停一两秒都无所谓。
0 请登录后投票
   发表时间:2007-05-19  
ray_linn 写道
这里有人压根在胡扯. 32bit程序最大内存访问空间是4G, 2的32次方,这是硬件决定的,跟windows linux没有任何关系. Windows2000上不能利用超过4G的内存,一般是2G的内存保留给进程,2G内存保留给核心的。在Windows2000 Advanced Server上可以分配3G给进程,1G留给核心的.


但是对于某些linux和windows,他们的OS进程确实可以访问到4G以上内存, 这是通过一些特殊技术得到的,redhat linux AS 2.1 或者AS3.0下是通过VLM,windows adv. server则是AWE技术.


参数如下:

multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Advanced Server" /3GB /PAE

16GB以上只能选3GB或者PAE一种.


但是对于其他进程来说还是突破不了4G上限,甚至包括oracle也是如此,在oracle中,则是通过将内存当作文件来访问的,虚拟一个 /dev/shm 的文件系统,这个文件系统是完全由内存组成的,这样才突破4g的限制。




/dev/shm默认是系统内存的1/2,最大能到多大,或者说ORACLE目前是多大。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics