存档

文章标签 ‘ihs’

WebSphere简单故障排查

2009年9月25日 hashei 没有评论

工作中经常遇到这样那样的或有迹可循、或“灵异”的情况:WebSphere在某次停止后无法启动了,部署在集群上的应用无法通过IHS访问,应用更新后重启服务器发送回滚……出现问题当然都可以联系专门的中间件管理员来解决,但等管理员赶到现场,也许时间已过去半天,问题也许很简单,几分钟就能解决,所以如果你会一些基本的排查技巧和诊断方法,那么这些小问题就可以自己迎刃而解了。

下面我就介绍几种常见的简单错误,希望对于现场人员能有所帮助:

应用无法访问

下面是一张常见的由IBM HTTP SERVER(IHS)转发到后端AppCluster上的拓扑结构:

nd topo

应用无法访问,问题可以出现在HTTP Server上,或者App Server上,更可能发生在数据库上,所以第一步需要缩小范围,确定问题发生的点。

我在这里假设IHS的应用地址为http://192.168.1.51/yingyong

DMGR的访问地址是http://192.168.1.51:9060/admin

APP SERVER的应用地址为http://192.168.2.50:9080/yingyong和 http://192.168.2.51:9080/yingyong

 

1. 找不到服务器或404错误

访问http://192.168.1.51,确定IHS是否正常,如果页面无法显示,那么去“服务”中尝试重启“IBM HTTP SERVER V6.x”。服务启动失败的话,“服务”只会提示你一句服务无法启动或者启动后又因为致命错误停止。所以你要到IBM\HTTPServer\bin目录下运行apache –k start或者httpd –k start,失败的话会有详细信息供参考。一般是端口被占用或者config目录下的httpd.conf格式出错(它会提示你出错的行数)。

如果IHS访问完好,那么尝试分别访问http://192.168.2.50(51):9080/yingyong,如果访问正常,那么是IHS转发失败。

ihs转发

可以在管理控制台http://192.168.1.51:9060/admin中的“服务器”——“Web服务器”中勾选相应的webserver,“生成插件”并且“传播插件”。

 

 

很多IHS转发失败是因为应用发布过程中没有选则发布到webserver上,或在传播插件的过程中,由于目录访问控制等原因传播失败。你可以在“应用程序”中找到自己的应用,点击“管理模块”,确定是否正确的发布到app server上和webserver上了,注意首先在第一个框中选择要发布到集群和服务器,然后勾选模块前的勾,最后一定要点“应用”,而不是直接确定。

application deployment

转发失败的原因很多,不过最快的解决方法是手动复制文件。生成插件后控制台会提示文件生成的位置,直接拿到然后复制到传播插件失败的位置就可以了。

不过我也遇到过很蹊跷的情况,明明部署正确,传播正确,确依旧无法访问。这时候你要看一下生成的plugin-cfg.xml文件

<UriGroup Name="default_host_server1_xzh-hasheiNode01_Cluster_URIs">
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/snoop/*"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/hello"/>
      <Uri AffinityCookie="JSESSIONID" AffinityURLIdentifier="jsessionid" Name="/hitcount"/>

       是否有你的应用url那行存在,不存在的话手动添加一下即可,不过记得下次生成插件后注意再修改。

       最后要确定app server是否已经启动,是否遇到错误退出了,这点在下面一部分细说。

2. 505 Internal Error

505内部错误有三种情况,一是程序出错,不是本文讨论的重点。二是AppServer或应用程序没有正常启动,三是数据库连接失败。

AppServer是否运行可以通过访问管理控制台,查看JAVA进程确定。在profiles\AppSrv01\logs\server1目录下会有一个pid文件,此文件记录的PID号即为进程号。Windows下在“任务管理器”点击“查看”—“选择列”,勾选PID-进程标识符即可显示。Unix/linux下运行ps –ef | grep PID或者ps –ef | grep java,查看该app的进程和所有的JAVA进程。注意:在安装DM profile的节点上,一般至少有DM、Node agent、app server三个java进程,注意区分。

确定服务器没有运行或者想重启时,在profiles\AppSrv01\bin下运行startServer.sh(bat)即可启动服务器,观察启动状况,直到出现“为电子商务开放服务器 server1”,即为启动成功。如果失败,那就要打开logs下的SystemOut.log,查看最新的日志,查找error信息。

一般启动失败无外乎端口冲突权限不够

端口冲突

端口出错在SystemOut.log中的信息如下:

TCPC0003E: TCP 通道 TCP_2 初始化失败。主机 * 和端口 9081 的套接字绑定失败。端口可能已在使用。

这时你可以用netstat –an 命令查看监听端口信息,然后用tcpview或者icesword等工具查看占用端口的进程,linux/unix下可以用netstat –an | grep LISTEN(或端口号)直接查看,然后使用lsof -i :端口号或者rmsock来查看占用端口的进程。

这时候你也许才恍然想起某个不经意的操作将websphere的端口占用了,怎么办?如果要WebSphere作出让步,那么可以修改profile_path\config\cells\cell_name\nodes\node_name目录中serverindex.xml文件:

specialEndpoints xmi:id="NamedEndPoint_1243228596786" endPointName="WC_adminhost">
<endPoint xmi:id="EndPoint_1243228596786" host="*" port="9060"/>
</specialEndpoints>
<specialEndpoints xmi:id="NamedEndPoint_1243228596787" endPointName="WC_defaulthost">
……

看到端口号了么?不过要注意WC_adminhost、WC_defaulthost、WC_adminhost_secure、WC_defaulthost_secure,也就是常用的管理端口、应用访问端口和它们各自的SSL端口,被修改后需要到profile_path\config\cells\cell_name再修改virtualhosts.xml文件中的相应端口(添加亦可),否则出现虚拟主机未定义的错误可别怪我没提醒。(我遇到过很多说用IHS可以访问,但是直接访问端口出错的情况,原因就是没有添加相应的虚拟主机,在管理控制台——虚拟主机——default host里添加改动后的端口就可以了)。

权限不足

权限不足一般发生在Unix/Linux下,比较常见的是安装websphere时新建了一个单独的用户和组,但是开发阶段权限管理不严导致开发人员也有root权限,启停没有su到was用户,等到权限回收之后发现无法启动服务了。这时候只要用root权限chown username/groupname 整个安装 目录即可。

还有一种情况是修改的端口<1024,在Unix/Linux下只能用root来起了。

其它情况

还要注意文件系统的情况,见过几次access.log和dump文件把文件系统撑满的。

应用更新失败

应用更新了,修改的文件直接上传到目录,重启应用程序,测试正常。等等!为何重启app server或者集群下重启dm后又变回修改前了呢?

这应该是dm的同步机制在捣鬼,你有没有注意到profiles\AppSrv01\config\cells\cell_name\applications目录下也有你的程序,打开可以看到并不是程序所有的内容都在此,而是web.xml和WEB-INF等重要内容。所以如果你更新的文件在config目录下也存在,那么你需要这里也更新一份。集群环境下还要注意profiles\Dmgr的config目录下还有一份等着你呢。

3. 确定数据库无故障

这个很简单,只要用sqlplus连接数据库正常且能查询即可。

4. 日志文件很重要

日志文件是排查的依赖。我见过不少项目,因为处于试运行修改阶段,log4j中输出日志信息极多,每条sql语句都丝毫不差的打出来,导致1m大小的SystemOut.log文件十几分钟就写满,10个SystemOut.log存档也顶不过几小时的日志量(单个文件1~2M,总共10~20个存档是一般设置),等我赶到时案发现场已经荡然无存。(这种情况一般是重启能暂时解决问题,但是故障原因没有找到)

所以即时保存当时日志是很重要的,logs\server1下的SystemOut.log、SystemErr.log一定要保存一份,并记下故障发生的时间。

WebSphere不像Weblogic,可以在console窗口后一直看到运行的日志,在unix/linux下,你可以用tail –f SystemOut.log来达到这个效果,windows下也有一个tail工具,后跟文件名运行就可以了。

tail tool tail tool

结束语

暂时能想到的简单排错就这些,这些都比较容易被开发人员遇到,所以还是很有必要了解一下的。

WAS启用IHS的SSL

2009年7月11日 hashei 没有评论

这两天上海38度,脑袋发昏写不出啥东西,就拿以前积攒的内容来充数好了。

在WebSphere Application Server中可以有两个环节可以启用SSL来提高安全性:一是在客户端和IBM HTTP Server(IHS)间启用SSL,二是在IHS和应用服务器之间启用SSL。两个环节可以单独启用,也可以同时开启SSL。

一般我们会在客户端和IHS之间建立SSL连接,因为互联网在信息开放的同时带来了很多安全方面的问题,这点不用我多累述。而IHS一般处在拓扑结构的DMZ区,和互联网之间隔着一层防火墙,应用服务器则处在更安全的内部网络,所以综合安全和响应时间的考虑,IHS和应用服务器之间一般不再采用SSL。

下面两篇文章分别说明了如何在WAS6.0和WAS6.1中使用自签名的证书来开启IHS的SSL,如果是提供互联网服务的话,最好还是购买一下商业CA中心出具的证书,否则跳出个窗口提示证书不安全可就有趣了。

WAS6.0 http://docs.google.com/fileview?id=F.576ac8bd-943c-4de9-a4b0-5f8abd2a477d&hl=zh_CN

WAS6.1 http://docs.google.com/fileview?id=F.4de8195d-6801-450f-8a2c-5ce9ec9990c4&hl=zh_CN

(有别人写的那么好的文档,我就不高兴再自己写鸟,应该可以转的吧)

WAS5.1 下启用SSL方法类似,只是加载的模块为“LoadModule ibm_ssl_module modules/IBMModuleSSL128.dll”

而对申请商业证书,首先要在“个人证书请求”中新建一个请求,填入相关的信息,保存到一个certreq.arm的文件,用文本工具打开后,可以看到

—–BEGIN NEW CERTIFICATE REQUEST—–
MIIBdjCB4AIBADA3MQswCQYDVQQGEwJDTjETMBEGA1UEChMKanFjbHViLm5ldDETMBEGA1UEAxMK
WFpILUhBU0hFSTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvOZmF3LojJEaAordCmbK9xze
//caxC+0M399AxFUdTbA6HCC8SImRFgItmfBhXt3GsRekCtcbCOxPWmoIr3A9Y6mOMh0uOkQbVVv
EFlbmyxGNha7tBLrFz3l3juRtHiiyXZ2KPUDu8gWFL6tC2DBvoFVaq9ValeX7umAAKpyQ9ECAwEA
AaAAMA0GCSqGSIb3DQEBBAUAA4GBADOtHdOX0UY2GVKw3trjjrlNO4D2wN05cE6SmBm2zJXOrzdz
WKs01TEsnYlEEWS7Z7vRnhgj23eynd646/Kzxb8biipAL0TUcYkEUMRN1+VSFNdmHRGRQIeolGIf
ZzpZk0I1BHQeccHCdFRItNovWMD4XsmBq3WufgRhyNpHmHPQ
—–END NEW CERTIFICATE REQUEST—–

上传这个请求到CA发行商那里并通过后,会得到一个证书,在“个人证书”里接受即可。

当你的网站有许多个应用,而不希望每个应用都启用SSL,同时希望启用SSL的应用禁止通过80端口访问的话,可以通过“虚拟主机”来实现这个目标。

默认的应用都发布在default_host下,你可以新建一个ssl_enable的虚拟主机,在ssl_enable下仅启用443端口,把应用映射到这台虚拟主机上,那么这个应用只能通过443端口来访问了,而别的应用照旧可以在80端口下访问。

各司其职-WebSphere的动静分离

2009年6月5日 hashei 5 条评论

前一篇文章说到了前端优化对响应时间的提升效果,不过要用到这种好处,首先要做的就是让WebSphere个组件各司其职——IBM Http Server处理静态文件,WebSphere Application Server处理动态内容——所谓的“动静分离”。

先了解一下WAS是如何处理静态内容的:

静态内容被返回到用户的方式至少有三种。它们是:

  1. 静态内容通过 WebSphere Application Server 中的 File Serving 功能从 WAR 文件返回(缺省情况)
  2. 静态内容从 Web 服务器返回
  3. 静态内容从 Caching Proxy Server 返回,如从 WebSphere Edge Server(以下称为 Edge Server)产品中的 Caching Proxy Server 返回。

我们来看一个例子,下图中的应用程序是默认安装的BusinessObjects的Crystal Reports Explorer组件:

web speed before Optimization

简洁的页面,却也有415K的内容,本地打开速度为2.3S。接下来我们把静态页面转移到IHS上,看看结果如何。

打开位于 WAR 文件下的 WEB-INF 扩展中的 ibm-web-ext.xmi 文件,编辑或者添加fileServingEnabled=”false”来禁用Application Server 的文件服务功能。同样修改config目录下的ibm-web-ext.xmi 文件(注:应该是在程序打包时就禁用fileServingEnabled功能,修改文件的话注意各个地方的统一)。重启应用。

再次刷新程序首页,发现已无法访问。我们重新生成、传播插件,比较前后的差别,发现

<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/*”/>

变为了

<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/updatehandler.jsp”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/updatehandler.csp”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/updatehandler2.csp”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/*.jsp”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/*.jsv”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/*.jsw”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/j_security_check”/>
<Uri AffinityCookie=”JSESSIONID” AffinityURLIdentifier=”jsessionid” Name=”/adhoc/ibm_security_logout”/>

原先不管三七二十一的转发,现在Application Server 已经智能地重新生成了插件文件,以便让 Web 服务器服务静态内容。插件文件将 servlet 和 JSP 的动态 URL 传递回到Application Server。现在要做的就是配置Web服务器来对静态的URL加以识别。我把adhoc.war中的静态内容拷贝到了HTTPServer\htdocs下,同时修改httpd.conf文件,添加

Alias /adhoc/ “e:/IBM/HTTPServer/htdocs/adhoc/”

重启Apache,再次访问,首页又出现了,而停止IHS服务器,你会发现页面有开“天窗”,说明访问的静态资源是在Apache上的。于是我开启了IHS的deflate压缩功能,同时加上Expires头部,那么那些经常处理业务的人员,就不用每次都下载重复的图片,重复的CSS了,而且发请求得到304 Not Modified的动作,都会被省略(刷新的时候不会,但点击页面的时候就会少很多request)。

web speed after Optimization

大小从415K缩小到106K,时间减少到1.48S,提升的空间还是很大的。

当然好技术不能滥用,过度的优化也是万恶之源——简单如动静分离也会带来应用发布更新上的不便,在行动前要了解自己现有的性能情况,明确自己的目的,分析自己的网络拓扑,然后规划好详细的优化步骤,确保这些动作都是可以回滚的。在 WebSphere Application Server 中处理静态内容 这篇文章是你动手前所需要好好阅读的。

摘录总结性的一段

在什么情况下您会选择每一个先前所描述的选项呢?您如何权衡每一个解决方案的利弊呢?下面一组指导原则可以帮助您对静态内容作出决定:

  • 如果您在 WebSphere 的安装中性能不成什么问题,那么请不要想那些更复杂的设置。将您的静态内容保存在 WAR 文件中然后让 file serving servlet 服务它们会比较容易且更加节省成本。
  • 如果在 WebSphere 的安装中性能是个问题,那么就请将文件解压缩,这样会提高您站点的整体性能。但是,解除打包与替换静态内容可能影响效率,除非这个过程可以通过使用上面提到的技术来重复。
  • 如果您有性能需要,并且有能力支付这项花费,那么从长远看最好的解决方案是使用高速缓存代理服务器。像 WebSphere Edge Server 这样的产品(包括执行诸如负载平衡、动态(JSP/servlet)高速缓存以及内容管理这样任务的组件)可以提供额外的性能帮助。

http://www.redbooks.ibm.com/Redbooks.nsf/RedbookAbstracts/tips0223.html?Open 这篇tip是说明如何在WebSphere上实施动静分离的。

Websphere入门篇(二)-为WAS打上补丁

2009年4月28日 admin 没有评论

        上篇文章中安装了Websphere单机环境,那么接下来第一件事不是配置WAS,不是发布应用,而是要打上补丁(特别是新环境)。如果是老系统迁移的话,可以不用打最新的补丁,只要让现在的平台版本和之前运行正常平台版本一致即可,以免引入新的问题。

         首先去http://www-933.ibm.com/support/fixcentral/找到自己需要的补丁,Production Group为Websphere,Product为WAS,指定版本号和平台,搜索出Fixpack。

         这里以6.1.0.23: WebSphere Application Server V6.1 Fix Pack 23 for Windows为例讲述打补丁步骤。

         首先看到一个Update Installer 7.0 for WebSphere Software for Windows,这个是补丁升级程序,从6.1之后所有的补丁(包括7.0)都要考它来升级。安装CD2中会带有这个程序,但是那个版本太低对6.1.0.6之后的补丁无法直接使用。所以先要安装这个打补丁程序。

          Websphere的补丁有WAS—IHS—PlugIn和SDK,根据你的安装拓扑和需要可以分别打,但是一般全都保持一致的版本。下载的pak文件放到Update Installer安装后的maintenance目录下。

          之后运行update installer即可,选定安装补丁的目录:AppServer对应WAS补丁,Http目录对于ihs补丁,plugins目录对应plugins补丁。每次都会自动找到相应的两个pak文件(一个程序的,一个JDK的)。全部安装完,那就OK了,在bin目录下执行versioninfo看看吧。

          WAS6.0的时候打补丁没有那么方便,先要打6.0.2的补丁,顺序为WAS—IHS—PlugIn,然后再打6.0.2之后的小补丁,也是按照WAS—IHS—PlugIn的顺序来。而且那时候还没有UpdateInstaller,每个补丁都需要各自独立安装。不过你可以把对应的PAK文件找出来,拷贝到UpdateInstaller的maintenance下去,节省一点体力活。

Websphere入门篇(一)-was6.0安装

2009年4月24日 admin 8 条评论

 本文是Windows环境下websphere6.0单机环境的安装详细步骤,Linux和Unix下安装亦可参考,不过注意系统参数的调整。

WebSphere6.1的安装过程和6.0大同小异,这里就没有列出,可以到我的Google Docs查看

http://docs.google.com/fileview?id=F.97cf8c0b-5f02-4601-a317-a8a75284253f&hl=en

———————— 下面正式开始——————————

1. 开始安装IBM WebSphere Application Server Network Deployment V6

插入光盘或运行安装介质,进入安装向导

clip_image002

2.接受协议

clip_image004

3.检查条件 安装程序将自动检测是否具备安装WAS6的条件

注:此处安装Windows2003 sp2补丁后会报操作系统补丁缺失(sp1),很明显不用在意。

clip_image006

4.选择安装目录

这里指定的目录为E:\Program Files\IBM\WebSphere\AppServer

clip_image008

5.安装如下功能部件(样本服务器通常不安装)

clip_image010

6.安装摘要

总大小800M左右

clip_image012

单击下一步开始安装

6.安装完成,选择启动概要表创建向导来创建profiles。(或者进入安装目录的/bin下,进入ProfileCreator运行pctWindows.exe)

阅读全文…