性能优化总结
2013-9-15
Hellion
经过N个项目,感觉每个项目总有那么一个阶段在做性能优化,或长或短。总结这些项目的优化经验,以备后续项目使用。项目框架:JAVA Struts2 JSF Spring Hibernate Oracle SQLServer。
系统性能优化主要涉及到一下4个层面内容:
1、 应用服务器配置
2、 应用开发架构方面
3、 数据库方面
4、 外部系统接口
1.1 应用服务器配置方面
1、 JVM的内存。如果是windows系统尽量使用64位的JVM平台,因为在32位JVM在windows下总内存最多只能到2G,很多时候会不够。Linux相对好一点,32位平台可以使用到4G内存。
2G内存的推荐内存参数:-server-Xms1024m -Xmx2048m -XX:PermSize=64M -XX:MaxPermSize=256m –verbose:gc
Weblogic/Websphere /Tomcat内存配置参数基本都一致
内存监控工具:jconsole; 从gc日志也大致能发现内存是否不够用
更多JVM内存相关信息可以搜索:jvm 内存性能 优化 。网上有更详细的说明,比如垃圾回收算法、内存区域划分等信息。
2、 网页压缩。目前系统用到的js库、css和页面上加载的数据越来越多,经常出现一个网页加载的内存是以M计算的,这样在非局域网的网络条件下网络传输时间也是一个很影响用户对性能体验的因素。
Tomcat内置了压缩功能,在Connector中配置compression="on" compressableMimeType="text/html,text/xml,text/plain,text/javascript,text/css"即可。
Weblogic/Websphere貌似没有内置压缩功能,可以外加一个Apache解决。
更多内容可以搜索:web 前端性能 优化
1.2 应用开发架构方面
1、 Hibernate配置:
a) 应使用数据库连接池
b) 配置batch_size:<propkey="hibernate.jdbc.batch_size">200</prop>
2、 struts2配置:
a) 模板Cache参数: struts.freemarker.templatesCache=true。此参数很影响服务器的CPU性能
b) struts.devMode=false
c) 更多详细信息可以搜索 struts2 性能优化
3、 在系统基础架构层面应提供Cache机制。Cache机制应该架构在Service层。对常用的数据进行Cache,可以极大减少数据库访问;Cache应根据具体业务定义自动失效和重新加载机制,一般定义5-30分钟内;Cache的数据应只使用为查询和界面显示,涉及到数据库更新的时候应该重新从数据库中加载。
4、 架构层面应有对数据批量查询、新增、更新的底层方法封装。
5、 开发规范方面:
a) DAO层禁止非必要的关联配置,尽量考虑只使用Many to One的关联
b) 关联必须使用主键关联,这样才能使用上Hibernate的Lazy load
c) 对复杂业务应用可考虑使用SQL的写法
d) 单个业务功能操作的数据库交换次数应写入开发规范,控制不能超过20个
e) 禁止在大集合循环体内部进行数据库操作
1.3 数据库方面
1、 配置相关:
a) Oracle主要涉及到内存和表空间的配置。详细内容可以参考http://blog.csdn.net/tianlesoftware。tianlesoftware大神整理了Oracle的很详细的学习文档,基本上想要的都能在他的文档里面找到。下载地址:
http://blog.csdn.net/tianlesoftware/article/details/7335660
b) SQLServer需要特别注意事务锁隔离级别,2005默认的配置容易导致阻塞和死锁。修改参数方式:
ALTER DATABASE DB
SET ALLOW_SNAPSHOT_ISOLATION ON
GO
ALTER DATABASE DB
SET READ_COMMITTED_SNAPSHOT ON
go
2、 SQL优化相关
a) 工具:查询分析器
b) 合理使用索引
1.4 外部系统接口方面
1、 获取数据:性能优先顺序:数据库方式->接口方式
2、 提交数据:
a) 尽量使用批量提交方式
b) 在能够进行异步处理的业务场景下,尽量使用异步方式。异步方式可以考虑数据库队列和Spring的异步线程。