笔记:Java 性能优化权威指南 第9、10、11章 GlassFish、Web应用、Web Service、EJB性能调优

一、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 使用继承










原文地址:https://www.cnblogs.com/leeeee/p/7276230.html