一、GlassFish调优
1、网络调优:
创建套接字连接池,适当重用这些连接,而不是每个请求创建一个连接;设置适当的超时时间,一旦这些资源占用不频繁,就可以释放。
2、JDBC 执行时间:
利用动态Java追踪工具BTrace ,可以查找出慢速的数据库交互。
3、磁盘IO
服务器日志设置为所需最小级别。
将事务日志文件配置到快速磁盘上或者有写缓存的磁盘阵列上,避免事务管理器在事务日志写入时候导致磁盘瓶颈。
JMS消息也最好保存到SSD或有写缓存的磁盘阵列。
4、资源池
资源池需要调优的参数:最小、稳定状态和最大连接数。
通用准则:最大值为HTTP Worker 线程池的最大值,稳定态的池大小为CPU核数。
监控池中空闲连接数、等待连接个数,调节池大小。如果空闲数一直为0,等待数一直大于0,则说明池太小。
二、Web 容器调优
1、容器模式
默认是开发模式,正式调整为生成模式。
2、安全管理器
开启安全管理器会有性能代价
3、JVM调优
指定server模式,使用CMS收集器。如果需要分布式垃圾收集,则不要禁用System.gc().
4、HTTP监听器
(1)、线程池:
初始线程数 MinCount 为CPU核数,线程数Count为2*CPU核数;监控工作线程数BusyCount,配置最大线程数MaxCount=BusyCount。
(2)、Acceptor:
设置Selector 的 acceptor-threads为处理器数;
监控队列中连接数、最近平均排队连接数、队列中被拒绝数调节最大连接数;
监控keep-alive的连接数、命中缓存数、拒绝数、超时数调节超时时间,最大连接;
监控Http 的状态码,改正错误;将请求转换到新地址比重定向的性能好;
三、Web应用调优
1、使用Servlet 的init() 方法执行代价昂贵的一次性操作。
2、<%@include file="" %> 是静态引用资源;<jsp:include page="" /> 动态生成响应。
3、剔除多余空格,压缩JS 和CSS 。
4、设置JavaBean的合适范围:page、request、session、application。
5、el表达式取代Scriptlet
6、HTTP压缩:配置http-listener 的压缩属性Compression、comprehensiveMimeType、comprehensiveMinSize
7、内容缓存:如放在memcached 中。
8、session持久化:默认session保持在内存中,可保持在分布式缓存如Redis中。
9、静态文件缓存:放在Apache中,不在JVM内存中。
四、Web Service 性能调优
书中基于SOAP
五、EJB 性能调优
1、ORB线程池:初始设置最小容量为处理器数量,最大容量为2*处理器数量,监控用于处理的请求数、等待处理的请求数进行调节。
2、EJB缓存:根据缓存命中率调节。
3、事务属性:Required、Required New、Mandatory、Not Supported、Supports、Never。一般使用Required。
4、控制反序列化:用transient 标记不需要序列化的字段。
5、缓存静态资源:数据源、JMS对象、JNDI查询的会话Bean
6、Local接口替代Remote接口
7、乐观锁替代悲观锁
8、缓存查询结果
9、 FetchType:FetchType.LAZY 延迟加载, FetchType.EAGER 提前载入
10、连接池:连接池的数量至少等于处理请求数的线程数
11、批量更新:避免在循环中操作数据库,一个使用SQL语句完成。
12、读取时候不带事务:TransactionAttributeType.SUPPORTS
13、实体Bean 使用继承