玩转GlassFish V2的隐藏配置

【IT168 技术文档】摘要: 基于向后兼容的考虑,sun在最新发布的GlassFish V2中隐藏了很多配置选项,GlassFish项目组成员Jean-Francois Arcand在本文中向广大开发人员揭示了这些隐藏的属性,希望对大家深入使用GlassFish有所帮助。

因 为从GlassFish V1开始,Grizzly已经替代了Sun's Application Server (SJSAS)里面的Sun WebServer runtime,为了避免与以前的版本不兼容,官方没有公开在GlassFish的domain.xml中作为属性或者元素的一些配置选项。我们会在下一 个V3版本发布的时候解决这个问题,不过现在这些隐藏的特性还在沉睡中,是时候公开它们了!下面公开的这些属性有些是高度NIO(非阻塞I/O)相关,有 些不是。

-Dcom.sun.enterprise.web.connector.grizzly.selector.timeout==xxx : 其中xxx表示毫秒为单位的时间,表示一个NIO Selector为了等待事件(用户请求)阻塞多长时间。缺省状态下是1000(表示阻塞一秒钟)。在一些应用环境下,增加这个值可以减少CPU 占用,不过不推荐修改这个值除非你很重视CPU占用率,而这种情况最可能发生在你的服务器 没有足够内存 的时候。

-Dcom.sun.enterprise.web.connector.grizzly.displayConfiguration=true: 把Grizzly的内部配置写入服务器 log(比如创建线程的数量,多少对象被缓存等)。

-Dcom.sun.enterprise.web.connector.grizzly.enableCometSupport=true: 在所有的http-listener开启Comet支持,包括Admin-gui。

-Dcom.sun.enterprise.web.connector.grizzly.useDirectByteBuffer=true: 用direct ByteBuffer代替heap ByteBuffer。如果你的应用使用大量内存或者做很多写操作的话,打开直接字节缓存会提高执行效率。

-Dcom.sun.enterprise.web.connector.grizzly.pipelineClass=className: 用一个自定义的线程池替换缺省的Grizzly线程池。通过实现简单的Pipeline接口你可以很容易构造自己的线程池。

-Dcom.sun.enterprise.web.connector.grizzly.algorithmClassName=className: 用一个自定义的http分析器替换现有的分析器。如果你想基于一些特定的应用请求头优化分析过程,那么这个会有帮助,不过因为它可能会打断http的处理逻辑,所以你要使用的话必须非常小心。

-Dcom.sun.enterprise.web.connector.grizzly.maxSelectors=xxx: xxx表示在未完成的读操作中用来读取更多字节的临时NIO Selector的数量。缺省值是20,不过如果你运行在一个低速的网络 上,通过调节它可以在很大程度上提高执行效率。

-Dcom.sun.enterprise.web.connector.grizzly.factoryTimeout= 5000: 当Grizzly试图从一个浏览器请求中读取数据的时候,当读操作发生时数据可能还没准备好。缺省状态下,线程会等待5秒钟,然后再终止请求。在一些慢速(或者快速)的网络中,修改这个值可以显著的提高执行效率(拥有更高的通过率)。

-Dcom.sun.enterprise.web.connector.grizzly.asyncHandlerClass=className: c替换缺省的Grizzly的异步请求处理(ARP)AsyncHandler实现。如果你想在应用中使用ARP的话,这个选项对你很有用。

-Dcom.sun.enterprise.web.connector.grizzly.asyncHandler.ports=8080,4848: 定义支持ARP策略的端口号。

-Dcom.sun.enterprise.web.connector.grizzly.enableSnoop=true: 在服务器log中存储 requests/response信息。在调试的时候很有用,不过它会显著降低执行效率,因为所有的request/response字节都要被转化成字符串。

-Dcom.sun.enterprise.web.connector.grizzly.readTimeout=5000: 表示Grizzly在抛弃连接以前等待读取开始的时间。如果你经常遭受DOS攻击的话,减少这个值可以显著提高你的站点效率。

-Dcom.sun.enterprise.web.connector.grizzly.writeTimeout=30000: 表示Grizzly 在停止等待浏览器读取相应数据之前的等待时间。缺省情况下,如果浏览器在30秒之内没有读到全部的响应数据,Grizzly会断开连接。修改这个值有助于提高在慢速(或者快速)网络下的效率。

-Dcom.sun.grizzly.comet.notificationHandlerClassName=classname: 如果你使用Comet,你可能希望通过提供自定义的通知策略来提升服务器的push效率。

-Dcom.sun.grizzly.http.bufferResponse=true: 表示在发向客户端之前缓存整个响应数据。在这个情况下,因为你只需执行一次写操作而不是多次,所以它可能会提升效率。

-Dcom.sun.enterprise.web.connector.grizzly.OOBInline=true: 参考JDK的定义。

-Dcom.sun.enterprise.web.connector.grizzly.protocolFinders= xxx: 注入你自己的Protocol finder。如果你希望在你个服务器上打开单个tcp端口,在这个端口上同时服务于好几个协议(不止是http)的话,这个配置对你非常有用。

-Dcom.sun.enterprise.web.connector.grizzly.protocolHandlers=className: w当一个协议被发现以后(参考上一个属性),把它重定向到正确的container/server等。

上面所有的属性都需要用jvm-options元素添加到domain.xml里面:

<jvm-options>-D....</jvm-options>

同时,下面这些属性可以被增加到domain.xml里面的http-service下面:

<property name="xxx" value="xxx"/>

compression=on|off 开启|关闭http压缩。

selectorThread=className: 修改缺省的基于HTTP的SelectorThread,用你自己的实现来代替。具体作法可以用the JRuby extension 做为一个实例来参考。

rcmSupport=true: 打开资源消耗管理扩展。

maxPostSize=number : 增加Grizzly可以处理的最大post数量。

cometSupport=true : 为一个特定的端口开启Grizzly Comet支持(不是所有的porhttp-listener)。

哟呼! Grizzly没有什么隐藏的地方了 :-)!

你可能感兴趣的:(Web,配置管理,sun,Comet,Glassfish)