`
blackhost
  • 浏览: 14151 次
社区版块
存档分类
最新评论

能否通过集群部署来突破32位机上的JVM内存限制,我的理解请大家指正。

阅读更多
我的意思是,单个JVM的内存数不能大于1.5G,那么对于很多服务器,例如有32G内存的小型机,部署一个应用内存上的浪费岂不是太大了,根本无法完全发挥它的优势嘛!

而且,在我们的应用中,有的时候是可能突破1.5G限制的,尽管很少会出现,即使出现了也可以通过代码去解决,但是我总觉得眼睁睁得看着32G的内存却用不上,感觉可惜了。

后来我想,集群部署是不是可以解决这个问题,通过把应用部署在4-5个虚拟服务器上,每个受管服务器都有一个1.5G的JVM,这样4个话不久有6G的JVM可用空间了吗?

不知道我的理解对不对?有没有其他的好法子呢?欢迎大家参与讨论并指正!


如果用集群部署,假设我的系统使用的Spring+Hibernate技术,那么当我把应用部署到集群上后,除Session是状态复制外,其他的操作会不会也被复制。

比如,我在应用中写一个定时写数据库的定时器,如果部署到集群上,假设有4个集群服务器,我的定时器是12:00启动,那么到12:00时,会不会所有的受管服务器都启动定时器,实际部署中,我发现有这个问题,就是写了4份数据到数据库中了。

像这种问题,又如何处理呢?难道不用集群?
分享到:
评论
14 楼 houniao 2009-10-03  
xiaoyu 写道
可能楼主还想在服务器安装一个魔兽世界玩玩,所以就。。。。。要32位的OS。


人家说的服务器32位的,莫非你能把32位字长的cpu虚拟成64位?

PS. 难道非得把内存全用完了才爽吗? 如果觉得jdk的最大内存还不够,不能结合其它cache手段,比如memcache来做呢。这样不也减轻了程序对jdk的内存占用。另外的32位os能支持这么多内存吗?
13 楼 puroc 2009-09-30  
直接换成64位的JDK。也不建议把一个JVM设置的过大。

1)在一个主机上部署多个应用是可以的。有的服务器,一个进程是根本没有办法完全利用系统资源的。所以可以部署多个,来提供对系统资源的利用。
2)定时器在每个JVM中都有,肯定会出现你说的问题。可参考quartz框架的集群方案。
12 楼 zhxp791008 2009-09-30  
首先jvm的内存肯定不能开得太大,太大反而会导致应用暂停问题。
集群是个好的方案,在一台物理机器上开启几个应用。session的复制、fail恢复等,如果在你的应用中有定时器东东,建议两种方案:
1、定时器单独一个应用,只部署一个。
2、这个定时任务加入到数据的job中搞定,
我认为第二种方案更好。
11 楼 xiaoyu 2009-09-30  
可能楼主还想在服务器安装一个魔兽世界玩玩,所以就。。。。。要32位的OS。

10 楼 someone 2009-09-30  
LZ的想法是可行的,曾经使用过类似部署方法。
服务器操作系统是Win2003(32位),内存16G。
采用Apache+Tomcat,Apache和Tomcat的连接使用mod_jk,不复制Session。
其中Tomcat开4个实例,因为是Session sticky,所以可以正常使用session。对于应用程序级别的共享资源,尽量避免,对于必须使用的情况,则设置独立于Web的服务,比如缓存等。
9 楼 sohuexe 2009-09-30  
the_definitive_guide_to_terracotta_cluster_the_jvm_for_spring_hibernate_and_pojo_scalability 这本书或许不错,要的话留言!
8 楼 lz_cleaner 2009-09-30  
上64位,直接搞定,何必去找那个麻烦。
7 楼 lnaigg 2009-09-30  
企业级应用来说,集群是一个重点话题,解决方案多如牛毛。

网络、硬件、内存、中间件、应用各个级别都有集群方案,而各种方案都有好处也有技术限制的。

做集群更多要考虑是如何提高应用性能的扩展能力,所以LZ就不要只盯着JVM这点内存限制了,就算用了64位jvm也有可能要做集群。

应用设计的初期就应该考虑到应用的规模,而对应做出集群的考虑。如果你的应用就定位在单服务器上跑的,那考虑那么多干啥。
6 楼 pipilu 2009-09-30  
不知道你这个集群的作用是什么,是为了负载均衡么?那什么会出现向数据库写入重复数据的情况呢?
如果觉得服务器还可以更多的利用,那就在上面多跑几个应用呗,多几个jvm进程。
5 楼 whaosoft 2009-09-30  
mwmw 写道
确切的说对这个不是很了解,但是Windows已经提供了相应的能够扩展内存的解决方案(AWE),Linux下肯定也有这样的解决方案。

还有一种是JVM级别的cluster (Terra-cotta),通过这种集群也能很好的利用内存。

但是一个很重要的问题是GC,如果你把内存开的很大,到时候Full GC的时候pause的时间会很长,反而会很影响性能。也是要考虑的。


是呀 java的gc挺讨厌的
4 楼 treblesoftware 2009-09-30  
ZL,难道非得装32位的系统?装个64位的系统,64位的JVM不就行了?
3 楼 mwmw 2009-09-29  
确切的说对这个不是很了解,但是Windows已经提供了相应的能够扩展内存的解决方案(AWE),Linux下肯定也有这样的解决方案。

还有一种是JVM级别的cluster (Terra-cotta),通过这种集群也能很好的利用内存。

但是一个很重要的问题是GC,如果你把内存开的很大,到时候Full GC的时候pause的时间会很长,反而会很影响性能。也是要考虑的。
2 楼 humaeks 2009-09-29  
楼上请注意楼主的32位机

数据库的定时器可以利用数据库锁定解决。把那条计划任务从待执行变成执行中,可以保证只有一个jvm拿到。
1 楼 joyfun 2009-09-29  
单个内存不超过1.5G估计是上个世纪的事情了
现在的64位jdk可以支持到2T
如果应用到集群上 定时器之类的东西肯定要修改一下代码 用任务调度来实现

相关推荐

Global site tag (gtag.js) - Google Analytics