GlassFish性能优化
我的废话:
任何优化都是建立在应用场景的需求上,有许多因素要考虑,如应用程序的类型,系统,Java版本,系统的硬件架构,系统环境的部署架构,用户并发数量,预期的响应时间和网络带宽,还需要根据你系统最大吞吐量、平均每秒完成的交易数量,等内在、外在的因素。所以没有绝对的最佳优化方案,都是根据实际的系统运行情况、测试报告 得出分析数据,才能知道具体需要优化的方向和需要优化的侧重点。
本文提到的GlassFish性能优化最终目的是让一个运行在GlassFish中的应用系统能支持的最大用户数同时在一个理想的响应时间内完成各项任务。
Sun公司推出的GlassFish v2应用服务器是一个高性能的应用服务器。本文将指导一些刚刚接触GlassFish的朋友如何调整、优化GlassFish应用服务器。
下面将按照几个部分介绍,实现您的应用程序在GlassFish服务器上运行的更高的性能。
1.Java的版本
让你的GlassFish服务器,运行在最佳的JDK环境中,不是需要最新的JDK版本,而且最佳的。经过H.E.的简单测试,建议采用SUN JEE6.0 版本。
2.JVM运行模式
注意你的JVM运行模式,一般都是在Server的状态下,但是你也需要注意一下,因为,在开发环境下(一般使用的是client JVM) 调试将要在Server JVM上运行的java程序时,最少指定jvm为server jvm,这样可以更早地发现问题,具体说明见SUN的描述
http://java.sun.com/docs/hotspot/HotSpotFAQ.html
或者可以看看一个国外论坛的帖子
http://www.coderanch.com/t/385923/Java-General/java/JVM-Server-Mode-vs-Client
3.Java Heap Size
关于这个话题这个就不多说了,如果服务器内存为2G,可以调整堆内存为-Xms1024m, -Xmx1024m。还可以去参考我写的另外一篇文章“谈谈Java虚拟机优化与垃圾回收”, 但是值得一提的是,windows xp的内存最大使用范围是3个G,如果你在windows上做优化测试,需要注意一下这点。
4.HTTP线程数
为了提高并发连接数,需要增大线程数,默认的最大线程数一般比较小,但此值不是设的越大越好,应该恰到好处的去设置它,太小了,执行队列中将会积累很多待处理的任务,太大了,则会消耗大量的系统资源从而影响整体的性能。在产品模式下默认为25个执行线程。可以根据需要设置你最佳的数目。这个可以在GlassFish控制台里面进行设置。可以以25*CPU个数为基准进行调整。2颗CPU就是100个。
5.HTTP文件缓存
如果您的应用程序包含静态文件,建议启用HTTP文件缓存来优化性能。 小文件的内容读取到JVM堆在媒体上的文件是内存映射到GlassFish上的。还要求必须是一个静态资源,自定义Servlet或者动态页面不会被缓存。另外,以避免从每个请求都被文件系统缓存。可分为基于用户定义的大小限制为小,中和大。可以在 “配置> YOURSERVER-config> HTTP 服务”配置里修改。
6.web.xml
检查你的web.xml文件,例如 development=true/false, genStrAsCharArray=true/false。虽然不是关键点,但这个开发和运行模式的区别。
7.JDBC 连接池
一般按照我们的经验,建议设置的参数值与HTTP请求处理线程的数量相同。下面,我们以MySQL为例,设置 statement 的缓存如下:
<property name="cachePrepStmts" value="true"/>
<property name="prepStmtCacheSize" value="512"/>
<property name="useServerPreparedStmts" value="false" />
8.日志
关闭你认为可以忽略的输出日志,日志的输出是对系统I/O的一种消耗,所以因为合理的去使用GlassFish中输出的日志。可以在“配置> YourSERVER-config> 诊断服务”中关闭你认为可以忽略的选项。
9.Keep Alive
提高Keep Alive的连接数量,对AJAX站点来说这点很重要,很多页面刷新需要经常请求服务器处理,提高Keep Alive连接数目可以复用打开的连接,减少请求的时间。
10.DNS查找
如果你是在没有域名的环境中运行你的应用服务,你需要关闭DNS查找设置,“配置> YOURSERVER-config> HTTP 服务–DNS 查找”中进行修改。
11.部署
如果你发布的是一个Web的应用程序,并且其中包含JSP页面,你可以选择“应用程序> Web 应用程序-预编译 JSP:已启用”打钩,这样就不会第一次访问JSP页面的时候感觉速度慢了,因为GlassFish服务器已经帮你预编译过了。
相关文章
GlassFish 优化技巧 -GlassFish HTTP/1.1 GZIP
Glassfish(EJB) 与Quartz Job Scheduler整合
GlassFish JMS 集群
GlassFish 文档
GlassFish 数据库连接池的配置步骤(图解)
–end–

本文由J2ee企业顾问-黄毅创作,并已采用创作共用署名2.5中国大陆版许可证授权。





