Websphere性能优化

通过IBM Http Server(下文称为IHS)静态页面分离技术与利用WebSpere Application Server(下文称为WAS)的动态高速缓存(Dynamic Cache)技术优化访问页面性能。客户端访问静态页面无须与后端数据交互,减少了容器与数据源的压力,从而达到优化系统的性能。

IBMHttpServer不但可以作为WAS的前一级Http请求队列的缓冲,减轻WAS的压力,还可以利用其静态页面分离方案减轻部分压力。在系统的部署或者构建的时候,我们可以把一些非重要的静态页面放在IHS中,当客户端发送请求访问该页面资源时,由IHS直接响应请求并将静态页面资源返回客户端,无须再经过WAS,从而达到减轻达到WAS负担的目的。

除了IHS静态页面分离方案,另外还可以利用WAS的动态高速缓存技术,将J2EE应用中静态的(Html、Flash、Css、Js、Jpg、Gif图片等文件)和动态的(需要与数据库、WebService等服务交互才能得到的数据)内容缓存到应用服务器的JVM中(如:Jsp、Servlet、*.do等请求)。在访问相关被缓存的资源时,所有的相关输出都可以直接从JVM的内容中获得,而无须再与数据库、WebService、静态文件等交互,从而有效地提高系统的性能。

IHS分离静态内容方案

整个操作过程主要分3步完成

n关闭Was的FileServingServlet服务

n重新生成插件(Plugin-cfg.xml)

n修改IHS配置文件并拷贝静态文件到指定的目录

关闭Was的FileServingServlet服务

1)在Was中部署的Web应用中分别找到2个在/WEB-INF/目录下面的ibm-web-ext.xmi文件。

参考路径:

ØIBM/WebSphere/AppServer/profiles/节点/conf/cell/applications/应用包名/deployments/应用包名/应用包名/WEB-INF/目录下

ØIBM/WebSphere/AppServer/profiles/节点/应用安装部署目录/应用包名/应用包名/WEB-INF/目录下

2)打开ibm-web-ext.xmi文件,找到fileServingEnabled属性项,把它设为flase,默认是ture。找不到该属性项可直接手工添加(fileServingEnabled="false")。

如:

<?xmlversion="1.0"encoding="UTF-8"?>

<com.ibm.ejs.models.base.extensions.webappext:WebAppExtension

xmi:version="2.0"

xmlns:xmi="http://www.omg.org/XMI"xmlns:com.ibm.ejs.models.base.extensions.webappext="webappext.xmi"xmi:id="WebAppExtension_1260496854906"

fileServingEnabled="false">

<webApphref="WEB-INF/web.xml#WebApp_1260496854890"/>

<jspAttributesxmi:id="JSPAttribute_1260496854906"

name="reloadEnabled"value="true"/>

<jspAttributesxmi:id="JSPAttribute_1260496854907"

name="reloadInterval"value="10"/>

</com.ibm.ejs.models.base.extensions.webappext:WebAppExtension>

3)重启Was,重启完校验配置是否生效。访问Web应用中的静态文件,如会报404错误的,这是正常现象,表示Was中的FileServingservle服务功能已经被关闭了。

重新生成插件(Plugin-cfg.xml)

Ø登陆Was控制台,环境->更新全局Web服务器插件配置->确定,重新生成插件。

Ø服务器->Web服务器->选择相应的web服务器->生产播件->传播插件

Ø检查配置文件是否正取。

打开IHS/Plugins/conf/web服务名/plugin-cfg.xml.找到UriGroup项,检查其配置。如Uri中的配置还是指定为Name=”/*”,须注释该行配置,否则IHS会将所有的请求都返回给WAS处理,那么所有访问静态内容都会报404错误。可通过手工配置相应无须过滤的Uri。

具体参考配置如下:

<UriGroupname="default_host_kpiCluster_URIs">

<!--<UriAffinityCookie="JSESSIONID"

AffinityURLIdentifier="jsessionid"name="/*"/>-->

<UriAffinityCookie="JSESSIONID"AffinityURLIdentifier="jsessionid"name="/*.do"/>

<UriAffinityCookie="JSESSIONID"AffinityURLIdentifier="jsessionid"name="*.jsp*"/>

<UriAffinityCookie="JSESSIONID"AffinityURLIdentifier="jsessionid"name="/j_security_check"/>

<UriAffinityCookie="JSESSIONID"AffinityURLIdentifier="jsessionid"name="/ibm_security_logout"/>

</UriGroup>

修改IHS配置文件并拷贝静态文件到指定的目录

1)在IHS的默认路径,打开\IBMHTTPServer\conf\http.conf文件,找到如下配置:

#

#DocumentRoot:Thedirectoryoutofwhichyouwillserveyour

#documents.Bydefault,allrequestsaretakenfromthisdirectory,but

#symboliclinksandaliasesmaybeusedtopointtootherlocations.

#

DocumentRoot"D:\IBM\HTTPServer/htdocs/en_US"

#

#ThisshouldbechangedtowhateveryousetDocumentRootto.

#

<Directory"D:\IBM\HTTPServer/htdocs/en_US">

可将D:\IBM\HTTPServer/htdocs/en_US设置为新的目录,自定义新的静态页面目录。

我们将非重要的静态文件放到E:\PageFiles\2009-12-11\目录下,配置如下:

DocumentRoot"E:\PageFiles\2009-12-11"

<Directory"E:\PageFiles\2009-12-11">

2)把应用中的静态文件拷到上述在Httpd.conf配置文件定义好的路径中去。

最后可根据上面的配置,将静态文件都是从Was应用中拷贝到E:\PageFiles\2009-12-11\目录中。

3)重新启动IHS

通过页面再次访问静态页面,此时不会再出现404错误了,IHS接到请求访问静态页面内容时,会直接读取E:\PageFile\2009-12-11\返回页面请求,通过该配置可以进一步减轻Was的压力。

启用WAS动态高速缓存

启用动态高速缓存服务同样也分为3步

n在WAS控制台上启用动态高速缓存服务

n为应用服务器配置Servlet高速缓存

ncachespec.xml配置文件

在WAS控制台上启用动态高速缓存服务:

1)登录Was的管理控制台

2)在管理控制台中,启用“服务器->应用程序服务器->Server1->容器服务->动态高速缓存服务”

(勾上‘在服务器启动时启用服务’)

3)确定并保存配置

为应用服务器配置Servlet高速缓存:

1)在管理控制台中,启用“服务器->应用程序服务器->Server1->Web容器设置->Web容器->启用servlet高速缓存

(勾上‘启用servlet高速缓存’)

2)确定并保存配置

cachespec.xml配置文件

1)在应用目录下WEB-INF/下增加cachespec.xml配置文件,通过该文件指定缓存对象。

内容如下:注意红色部分,要正确指定cachespec.dtd文件位置,一般情况下是在/IBM/WebSphere/Appserver/properties目录下。

<?xmlversion="1.0"?>

<!DOCTYPEcacheSYSTEM"D:\IBM\WebSphere\AppServer\properties\cachespec.dtd">

<cache>

<cache-entry>

<class>servlet</class>

<name>index.jsp</name>

<cache-id>

<componentid="*"type="parameter">

<required>false</required>

</component>

<componentid=""type="pathinfo">

<required>false</required>

</component>

<componentid="host"type="header">

<required>false</required>

</component>

<timeout>180</timeout>

</cache-id>

</cache-entry>

</cache>

2)在完成前三步后,在服务器上安装CacheMonitor组件,来监控刚才配置的动态高速缓存(DynamicCache)是否成功运行。

发布IBM/WebSphere/AppServer/installableApps/CacheMonitor.ear,并且将该应用与要业务应用部署在用一个Server下。

3)部署完毕后,重启整个WAS。

4)测试校验部署是否生效。

分别访问:

Øhttp://127.0.0.1/index.jsp

Øhttp://127.0.0.1/index.jsp?123

通过访问http://127.0.0.1/cachemonitor就可以查看到index.jsp已进行了缓存

如图所示:

以上的两种技术一种是基于WEB服务器一级别的优化,另一种则是基于Websphere应用服务器上的优化,合理的使用两种技术,可更有效的帮助应用系统提高性能。

虽然在WASV6以上的版本中,WebContainer对于Http请求采用了非阻塞I/O方式,使得IHS的这一功能作用已经非常弱化,但在大并发访问的情况下,还是建议大家使用IHS+WAS架构,使用IHS缓冲客户端请求与并且利用其得静态页面技术,直接返回静态资源,减轻应用服务器压力;开启Was动态高速缓存,缓存一些变动较少的Jsp、Servlet等资源,进一步有效的优化系统的性能。分别将IHS与WAS部署到两台物理主机上,可以让在系统在性能扩展上更加灵活,利用垂直扩展优化可更有效的提高系统的性能。

相关推荐