`
liuzhiyi7288
  • 浏览: 32383 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

打造高并发安全系統(ssh)应该注意的几个问题

 
阅读更多

文章来自于: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

 

分享到:
评论

相关推荐

    藏经阁-如何打造支撑百万用户的分布式代码托管平台.pdf

    3. 高并发的效率:用户量的增加会导致系统性能下降。 为了解决这些问题,我们需要设计一个更加可靠、可扩展的架构。 二、云代码托管平台的架构实现 云代码托管平台的架构设计需要考虑稳定性、安全性、扩展性等...

    改造Kuberntetes打造SAE容器云

    1. **资源调度优化**:Kubernetes的默认调度策略可能无法满足大规模、高并发的应用需求。SAE可能会引入更智能的调度算法,如预热策略,以确保服务的稳定性和响应速度。 2. **Serverless特性**:SAE强调无服务器架构...

    网上书店系统设计与实现.docx

    - **性能测试**:评估系统在高并发访问情况下的响应速度和稳定性。 - **安全测试**:检查是否存在潜在的安全漏洞,如SQL注入、XSS攻击等。 维护阶段主要包括监控系统的运行状态,及时修复出现的问题,以及定期更新...

    鲜花需求分析

    为了解决上述市场痛点,通过构建基于SSH框架的鲜花电商平台,可以从以下几个方面入手: 1. **前端界面优化**:采用温馨浪漫的设计风格,打造一个美观舒适的用户界面,提升用户的第一印象,激发购买欲望。 2. **鲜花...

    Ansible-go-gsc.zip

    在IT行业中,Ansible是一个备受推崇的自动化工具,尤其在配置管理和应用部署方面表现出色。本文将深入探讨Ansible的基本概念、工作...通过学习和实践,我们可以结合两者的优点,提高运维效率,打造高质量的互联网应用。

Global site tag (gtag.js) - Google Analytics