文章来自于:http://blog.csdn.net/yancaobisi/article/details/6881188
最近验收会终于开完了,也算是稍微松了一口气,之前系统定位是分布式部署,但是到了最后上线阶段又改为集中部署,这样性能问题就成了当前比较棘手的一件事,项目上线后频繁出线内存溢出、数据库锁表问题,加上后来压力测试时出现的系统并发慢的问题,经过这N久的折磨后,现在终于有了一些成果,下面简单记录一下,记录下来供大家参考交流,其中难免瑕疵之处欢迎大家指正
1、 应该尽量减小service事务代码块的大小,在事务中对记录进行修改时,会对相应表加锁,如:A事务对table1 和table2表的记录进行修改,那么B事务再对table1 和table2表的记录进行修改时会等A事务commit以后才能获得table1和table2的锁,这样事务太长并发量大的时候系统就会变慢
2、 事务里对表的更新操作应该按一定顺序,如果顺序不同则可能会出现数据库表死锁的情况,如:A事务先对两张表的修改顺序是table1、table2,而B事务对两张表的修改顺序是table2、table1,这样并发执行的时候就会出现死锁情况
3、 程序里指定事务隔离级别,默认是数据库的隔离级别,mysql是行级锁,sql server是表级锁,如果是sql server则需要开启快照模式
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="load*" read-only="true" />
<tx:method name="sum*" read-only="true" />
<tx:method name="count*" read-only="true" />
<tx:method name="auto*" read-only="true" />
<tx:method name="*" isolation="READ_COMMITTED" timeout="60000"/>
</tx:attributes>
</tx:advice>
4、 开启hibernate二级缓存(建议使用EHcache),这样大大提高效率
<prop key="hibernate.cache.use_query_cache">
${hibernate.cache.use_query_cache}
</prop>
<prop key="hibernate.cache.provider_class">
${hibernate.cache.provider_class}
</prop>
hibernate.cache.use_query_cache=true
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
dao中查询前使用getHibernateTemplate().setCacheQueries(true);
5、 如果有系统出现内存溢出没有规律的现象,则应该考虑常用模块是否有程序中有遍历集合循环查询数据库的问题,排除这种情况后就只能在配置上下手了,以jboss4.2.3为例说明
set JAVA_OPTS=-server –Xms512m -Xmx512m-XX:PermSize=512m -XX:MaxPermSize=512m -XX:+UseParallelGC-XX:+UseParallelOldGC
详细参数说明大家可以在网上自己查找,这里需要指出的是JVM有一个最大内存限制,网上说这个限制一般是 2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),有说64位操作系统没这个限制的,但本人在64位的widows2008上验证,同样有这个限制
程序问题往往是造成内存溢出的主要原因,大家一定要注意自己代码的质量
6、 使用集群,web应用服务器集群(可以使用apahce+modjk+tomcat/jboss或者linux下使用LVS+Keepalived),数据库如果使用sql server可以使用2008版本自带的集群,如果是mysql建议使用双机热备来增强安全性
最终架构:
参考文章:
http://wanglq.blog.51cto.com/783560/194666
http://www.cnblogs.com/happyhippy/archive/2008/11/14/1333922.html
http://blog.sina.com.cn/s/blog_5ca9fdd80100ecrs.html
相关推荐
"SSH众筹管理系统"是一个基于SSH(Struts2 + Spring + Hibernate)框架开发的综合性后台管理系统。SSH框架是Java Web开发中常用的一种技术栈,它整合了三个强大的开源框架:Struts2负责表现层,Spring负责业务层,...
综上所述,SSH学生管理系统是一个综合运用了Spring、Struts和Hibernate三大框架的Web应用,涵盖了系统架构、数据库设计、业务逻辑、安全控制等多个方面,旨在提供高效、便捷的学籍管理服务。通过持续优化和维护,...
8. **测试**:在开发过程中,单元测试、集成测试和压力测试都是必不可少的,以确保每个组件的功能正常,并且在高并发环境下也能稳定运行。 综上所述,SSH框架在学生选课系统中发挥着关键作用,通过整合这三个框架,...
在这个"SSH2实现的商城系统"中,我们主要探讨以下几个核心知识点: 1. **Struts2**:Struts2是一个MVC(Model-View-Controller)框架,负责处理HTTP请求,控制应用程序流程,并将数据传递给视图层。它的核心特性...
8. **部署与扩展**:系统可能采用Tomcat、Jetty等应用服务器部署,考虑到未来可能的高并发需求,还可以设计成分布式或集群架构,通过负载均衡技术分摊压力。 以上是对"ssh学生在线考试系统"的基本介绍,包括了SSH...
银行管理系统是一个典型的业务复杂、安全性要求高的应用场景,SSH框架的结合可以很好地满足这些需求。 **Struts** 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,主要负责控制应用程序的...
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他服务。在这个项目中,“SSH编写的网页投票系统”是指利用SSH框架来开发的一个用于收集和处理用户投票的应用程序。SSH通常指的是...
一个基于SSH框架的网上答疑系统通常包含以下几个关键部分: 1. **用户模块**:用户注册、登录、个人信息管理等。SSH框架可以提供用户认证和授权服务,Spring Security可以用来增强系统的安全性。 2. **问题模块**...
在本套“SSH登录验证系统”中,我们将深入探讨SSH的原理、配置以及如何构建一个安全的登录管理系统。 首先,SSH的核心功能是提供加密的网络通信,包括命令行接口的远程控制和文件传输。它通过公钥基础设施(PKI)...
"SSH教务管理系统"是一个基于SSH(Struts2、Hibernate和Spring)框架的教育管理软件,主要用于提升学校教务工作的效率和准确性。SSH是Java Web开发中的一个流行组合,提供了模型-视图-控制器(MVC)架构模式,使得...
SSH_经典案例_宠物管理系统是一个实际应用中的项目,旨在通过SSH技术来构建一个安全的、功能丰富的宠物管理平台。在这个系统中,SSH不仅提供了数据传输的安全性,还作为后端服务器与前端交互的基础。 SSH主要包括三...
在这个系统中,“学生成绩管理系统”利用SSH框架实现了一个简单但实用的功能,便于管理和查看学生的学习成绩。以下是关于SSH框架及本系统的详细解析。 1. **Spring框架**: Spring是一个全面的后端开发框架,提供...
它可以提供高可用性、高并发性的数据服务,支持复杂的查询操作,同时具备良好的扩展性和稳定性,满足了SSH公司人事管理系统对数据管理的需求。 综上所述,SSH公司人事管理系统利用SSH框架实现了高效的人事信息管理...
SSH仓库管理系统是一个基于SSH(Secure Shell)协议的用于管理和存储版本控制代码的系统。SSH是一种网络协议,主要用于安全地远程登录、数据传输以及执行命令。在IT领域,SSH经常与Git仓库管理工具相结合,用于保障...
SSH框架,全称为Struts2、Spring和Hibernate...总的来说,这个基于SSH框架的教务管理系统展示了如何利用现代Java Web技术解决实际问题,其设计和实现对于学习和理解SSH框架以及提升教育信息化水平具有重要的实践意义。
SSH网上选课系统是一种基于Struts、Spring和Hibernate三大开源框架构建的Web应用程序,常用于教育领域的信息化管理系统,如高校的选课系统。这个系统能够为学生提供方便、高效的在线选课服务,同时也能帮助教务部门...
在这个系统中,SSH框架的运用是非常常见且高效的。SSH,即Struts、Spring和Hibernate,是Java Web开发中的三大神器,它们各自承担着不同的职责,共同构建出稳定、灵活的业务逻辑。 Struts是MVC(Model-View-...
"红黑联盟 软件说明.url"可能是一个安全相关的网站,提示用户在部署和使用过程中需要注意的安全问题。 总的来说,SSH在线考试系统是一个集成了多种技术的复杂项目,它展示了SSH框架在实际应用中的强大功能。开发者...
SQL Server 2005是微软的一款企业级数据库管理系统,提供高性能、高可用性和安全性。而MySQL则以其轻量级、开源和高效的特点,广泛应用于小型到大型的Web应用。 5. **文件夹结构**: - `04 MySQL`:这部分可能包含...
SSH在线考试系统是一种基于模型-视图-控制器(MVC)设计模式的Web应用程序,它整合了Struts2、Hibernate和Spring三个强大的开源框架。这个系统的主要目标是提供一个便捷、安全的在线测试平台,让教师可以创建、管理...