Java的垃圾回收机制(转)
一。谁在做Garbage Collection?
来自:http://flynewton.blog.163.com/blog/static/12693071320098112220157/
前段时间一直在运用memcached来保存session的集群方案,这的确是实现HA和HP的一个好方案。但是在实现上还存在不少的bug。我和大家分享另外一种HA方案:JVM堆级群集。
JVM-level clustering主要是通过terracotta来实现,terracotta在2003年成立,代码是最近才开源的,license对企业也没有太 大的限制,据相关的报道,terracotta正努力劝服sun,让JVM-level clustering成为标准,嵌入到JDK中。然后它的企业版应用主要是靠服务攒钱,它的战略有点象Redhat。在这里我先介绍一下 Terracotta
Terracotta到底是什么呢?官方是这样定义的:Open Terracotta is an enterprise-class, open-source, JVM-level clustering solution. JVM-level clustering simplifies enterprise Java by enabling applications to be deployed on multiple JVMs, yet interact with each other as if they were running on the same JVM. Terracotta extends the Java Memory Model of a single JVM to include a cluster of virtual machines such that threads on one virtual machine can interact with threads on another virtual machine as if they were all on the same virtual machine with an unlimited amount of heap.
Terracotta实现了什么?
1) 堆级的复制:集群时需要拷贝的对象在堆之间进行
2) 超大的虚拟堆:由于是JVM层次的集群,所以堆要比单个JVM大很多
3) 多种集群锁语法:distributed wait/notify and synchronized
4) 运行实时监控
5) 无需序列化实现集群
6) Find-Grained Changes:由于集群时,terracotta不要求序列化,所以对象拷贝可以细化到对象中的每一个field,就是说在进行replication 的时候,当对象发生变化的时候,不需要整个对象进行拷贝,只需要拷贝发生变化的那个field。P.s.这点也是我最喜欢的,这对于性能的提高会有明显的 效果
Terracotta能给我们做什么?(这个很简单,我也不做翻译了)
- HTTP Session Replication - Tomcat, Weblogic, Websphere
- Distributed Cache - from java.util.Hashmap to OSCache, we support it,
- Work/Manager Distributed Queries - Coordination is easy with Terracotta. We even have code to get you started on the Terracotta Forge
- POJO Clustering/Spring integration- Everything from Spring Beans to java.util.HashMap
- Collaboration/Coordination - Use a queue, use distributed wait/notify, or even Cyclic Barrier (We love Cycle Barrier ) with Terracotta coordination across VMs is as easy as coordination across threads
p.s. tomcat现在支持的版本有5.0,5.5,6.0;weblogic官方测试过的只有8.1,websphere只支持CE,6.1预计会在今年夏季测试完成,估计就是最近,如今还支持Lucence和Wicket的集群。具体可以查看他的官方网站
如果实习AOP的人应该对Terracotta的工作原理很容易理解。Terracotta一个很重要的概念是bytecode instrumentation,这种对字节流监控的技术在很多AOP的项目中都用到,例如AspectJ,AspectWerkz。
Terrocotta的介绍到此为止。
作为一个HA方案的设计者,在运用一项新技术的时候必须评估它给现有项目带来的风险,特别是terrcotta还没有足够的成熟。
1) 如果运用了terracotta,我们现有的项目需要有哪些方面的修改,这点我估计也是大家最关心的。由于terracotta运用了bytecode instrumentation的技术,所以我们现有的项目基本上不需要做任何修改。Terracotta提供一个配置文件tc-config.xml, 我们只需要在这个配置文件里配置一些必须参数就可以实现集群(p.s.官方提供了pojo,spring,tomcat,weblogic的预配置模版; 这点比用memcached来保存session要简单,而且考虑的问题要少,毕竟官方就支持用terracotta来管理session)。我现在的项 目是在tomcat下跑,需要做集群,众所周知,tomcat集群的replication性能是非常非常低的,但是如果运用sticky模式的话就不能 完全实现failuer-over。在这个时候terracotta就解决了这个问题,我用terracotta来管理我的session,由于它不需要 序列话和它find grained changes的机制,所以不存在大对象拷贝的问题,例如我有十个点,其中一个点发生了变化,它不会立刻把变化拷贝到所有点上,只会当某个点需要变化的时 候才把变化发送到该点上。我从一些监控工具里面发现,terracotta捕获了所有httpsession到terracotta的 sessiondata中,你会发现根本不存在httpsession,terracotta相当于一个代理,当httpsession getAttribute的时候,代理会从sessiondata中取到相对应的值,然后付给httpsession,具体的实现有兴趣的可以看看源代码
2) 性能的变化,把terracotta集成到项目后性能是否能有明显的提升?在官方文档中,对terracotta http session clustering和weblogic8.1 http session clustering做了一个比较(如果大家感兴趣的话,我可以以后配合实际再写篇有关terracotta方面性能测试的文章),结果让人比较让人惊讶
Measure |
Gain from Terracotta |
Throughput |
67% increase in TPS |
Memory Use |
6-7 x reduction in garbage collection cycles |
Latency |
? 50% reduction ? Queue depth never exceeds 125, vs. 280- 560 for WebLogic |
3) Terracotta的扩展性。Terracotta是纯java编写的,源码开源,可以自己修改源代码进行扩展。而且terracotta很活跃,从它的策略来看,会有不错的发展和不久就会流行起来。
4) 从这点来看Terracotta相当一个中央服务器,那会不会terracotta出现single-point的问题呢?terracotta server本身支持集群
好像写得太多了。说说我现在项目的HA方案吧,我正在实现和测试的方案是这样的:
Apache+5 tomcat+2 terrcotta server cluster+2 mysql cluster,在这个方案中还是存在单点问题,就是apache,我曾经考虑过用四层交换机来代替apache做balance
感兴趣的同学,欢迎对JVM-level Clustering和我的HA方案进行讨论
相关推荐
代理可以捕获到JVM级别的信息,如垃圾回收的频率和时间,线程的状态,以及方法调用的堆栈跟踪等。这些信息对于理解应用程序的行为和性能至关重要。 项目提供的Kafka集成使得数据可以实时流式传输到Kafka集群,这...
- 包括单一JVM读/写Bean、读/写集群等典型应用场景。 #### 十、集群架构概述 **1. JBoss Clustering Framework** - 该框架是JBoss集群功能的核心,它定义了集群中各个组件之间的交互模式。 **2. 高可用分区(HA ...
总之,通过Linux、Nginx和Tomcat的组合,我们可以构建一个高可用的Web服务集群,同时借助源码级别的定制,可以进一步优化系统的性能和功能。这个过程涉及的技能涵盖了系统管理、网络配置、Java应用服务、源码编译等...
将服务器实例添加到新创建的集群中,每个实例都需指派给集群,并且配置相应的资源,如JVM参数、库路径等。 5. **配置负载均衡**: 配置全局负载均衡策略,例如基于请求的负载均衡或基于会话的负载均衡。这可以...
这可以通过在集群级别设置Session Affinity规则来完成。 9. **部署应用程序** 将应用程序部署到集群,而不是单个服务器。这样,应用程序将在所有集群成员间自动分发,确保高可用性。 10. **健康检查与故障恢复** ...
- **日志管理**:合理配置日志级别,避免不必要的日志记录导致性能下降。 综上所述,通过对Tomcat服务器进行合理的配置优化以及集群搭建,可以显著提升其性能和可靠性。此外,结合有效的性能测试手段,可以进一步...
这可以通过配置JVM级别的session复制,或者使用基于共享存储(如内存数据库或分布式缓存)的session共享实现。 3. **通信机制**:Tomcat实例之间需要进行通信,以便同步session状态和其他关键信息。这可以通过...
- **日志和监控**:合理配置日志级别,使用性能监控工具(如JVisualVM)定期检查服务器状态,以便及时发现和解决问题。 - **连接池优化**:调整数据库连接池的大小,避免过多打开和关闭连接,同时设置合理的超时和...
在与Terracotta等其他开源JVM集群框架的比较中,Shoal强调了其基于API的事件通知模型,这有助于解决分布式系统中的数据复制问题。相比之下,Terracotta采用字节码增强的方式,更适合数据复制。Shoal的设计目标是提供...
- **配置JVM定制属性:** 可能还需要设置一些JVM级别的参数,以满足特定应用的需求。 - **配置Web定制属性:** 例如设置最大线程数、连接超时等。 - **修改cookie name:** 为保持会话的一致性,可能需要修改cookie...
- **高级配置选项**:如网络配置、日志级别调整、安全设置等,帮助用户进一步优化Terracotta集群的性能。 #### 六、最佳实践与案例分析 - **性能优化技巧**:介绍如何通过合理的配置和调优策略提高Terracotta集群...
4. **配置资源**:如数据源、JMS队列和主题等,需要在集群级别配置,以便所有成员都能访问。 5. **部署应用**:应用需以集群模式部署,这样它们会在所有成员上自动分布。 6. **设置故障转移策略**:定义如何处理...
在集群环境下,部署通常需要设置为集群级别的,以确保应用程序在所有节点上可用。 **添加虚拟主机** 虚拟主机允许在一个物理服务器上托管多个网站,每个网站有自己的域名。在WebSphere中,通过管理控制台创建虚拟...
1. **JVM调优**:调整JVM的堆大小、垃圾收集策略等,以适应应用性能需求。 2. **WebLogic配置优化**:例如,调整线程池大小、会话超时、日志级别等。 3. **监控与管理**:启用WebLogic Server的监控功能,定期检查...
- **日志级别**: 调整日志级别,平衡调试信息和性能需求。 - **JTA 参数**: 增大 JTA 参数设置,提升事务处理能力。 ##### 2.7 集群验证 - **验证方法**: - 启动集群中的各个服务器实例,确认它们都能正常运行...
代码级别优化可以减少资源消耗和提升性能,而JVM调优包括内存分配和垃圾回收策略的调整。GC调优要根据实际应用的类型和需求来定制。存储性能优化则关注数据库和文件系统的读写速度。 综上所述,JVM的性能优化是一个...
在扩展性方面,随着集群规模的扩大,NameNode的压力、RPC操作的压力、作业调度的压力以及JVM的内存限制等因素都对集群的扩展性提出了更高的要求。 Hadoop版本特性部分提到了资源调度的改进,例如调度器改造支持Job...
2. JVM 参数调优:如 `-Xms` 和 `-Xmx` 设置初始和最大堆内存,`-XX:NewRatio` 控制年轻代和老年代的比例,`-XX:SurvivorRatio` 调整新生代中 Eden 区和 Survivor 区的比例。 3. 日志优化:减少日志输出,降低 I/O ...
Log4j 是一个广泛使用的 Java 日志框架,它允许程序员灵活地控制日志记录的级别和格式。在集群环境下,Log4j 的配置需要特别考虑,以避免不同服务器的日志信息混杂在一起。 首先,集群环境中的日志配置问题在于所有...