技术开发 频道

WebSphere从相识到相知

【IT168 专稿】

    本文是WebSphere软件技术征文大赛(http://tech.it168.com/focus/200904/webspheregame/index.html)一等奖获奖作品。

    菜鸟+噩梦

    谈起WebSphere,我确实有段噩梦与之相随!

    初识WebSphere是在2006年6月,我作为项目组的技术人员参与,某电信运营商的营帐集中系统研发,并负责整个环境的搭建和调优。从项目初期搭建环境就是WebSphere的Web Application Server,同时使用了F5进行16台机器的负载均衡,请各位读者注意细节:我们使用的是Web Application Server(WAS),因为我和我的研发团队的噩梦也是从此开始的!

    项目经过半年左右的研发、测试、压力测试、割接实施等系列的过程,我们终于在2007年初的某个周五夜间上线了,系统运行第一天平稳;第二天平稳;第三天,我的噩梦开始了:

    16台Web服务器里的10台相继hang住了,其中有3台出现了core文件和dmp文件我们是个7*24小时的运营系统,所以我的第一反应就是重启WebSphere的WAS服务,保证对外服务的正常运行,重启后服务可以正常运行!

    第四天,12台服务器无法使用;第五天,8台;第六天......,我们的噩梦持续了一周。期间我们对所有的core文件进行分析,但是触发错误的都不是一个程序和功能,而最终的日志都是告诉我们结果是一样的Out Of Memory ,也就是说压倒骆驼的最后一根稻草不一定是哪一颗!

    从项目上线的第三天开始,我有半个月左右的时间,每天都有一个雷打不变的工作就是接到我们维护工程师的电话后去重启WAS的服务,有时是白天,有时甚至是半夜、凌晨。

    无奈之下,我在16台服务器上布置了监控的shell,尝试去登陆页面,超过我的最低限额时间了就重启,无奈之下想出来的临时的方案持续了3个月之久。07年4月开始,项目研发工作和数据库的设计改造工作结束(我是DBA,所以侧重数据库多一点),我开始疯狂的寻找WAS方面的资料,仔细研究我们配置的WAS参数是否存在问题,同时对系统进行改造。

    基于当时Web服务器(HPDL380 4C/8G、Linux AS4.6),通过多次试验评估,最终我的解决办法如下:

    Java虚拟机的配置修改:

    1.禁用详细类

    2.启动垃圾回收

    3.禁用详细的ini

    4.配置初始堆大小=最大堆大小=1.2G

    线程池和数据连接池的配置修改:

    我抛弃了以前IBM专家建议的漏斗形配置,因为我们的系统相对比较独立,单个server对应单个的数据连接池,漏斗会造成瓶颈,产生不必要的资源浪费,我的配置方式是  线程池=连接池。

    单节点开多个AppServer:

    我要在每台服务器上创建3个appserver,方案开始推的过程,受到了我们项目组人维护人员强烈反对,因为系统不是一成不变的,是要升级的,而我们的集群是通过硬件的方式实现的,升级的过程目前有16个节点了, 16*3对于他们来说压力着实很大,再次我也深表歉意,但是非常感谢,我坑害弟兄方案最终还是实施了!

    5月份我解决办法上线,尽管用LoadRunner无数次的压力测试,最终的结果证明了我的方案是无效的。我只是减少了Web服务hang住的频率,但是平均每天都会有5-10个WAS重启。这里不是故意要提及LoadRunner,我知道可能是我用的方法不当,但是我确实比较恨我在调试过程中使用的所有的工具,我当时差点砸了自己的笔记本!

    因为我的噩梦还在延续......

    掘金之旅

    我开始觉得是开发的代码存在质量问题,觉得测试组测试把关不严,我开始找各组的负责人讨论、吵架,开始怀疑团队里的各个环节,我知道自己失控了......

    6月中旬,申请休假,调整自己的情绪。一周的时间里,我每天都坐在大连的海边,看着涌动的大海把游泳的海鸥打的浑身是水的飞起来,我觉得自己很渺小、失败、很多事情是我们都无能为力,起码不在我的能力范围内!

    6月的休假很快结束。上班刚好有位IBM的专家来公司沟通,介绍DB2数据库。我去听了,结束之后我无意间提起我们项目组的困扰,没想到这位专家很热心的给了我一个电话,让我去咨询一下。在此我非常想提一下这个帮助我的法国专家:MarXu,我们聊了10几分钟,他提醒了我一个重要的信息:“ Why don't you try Http and Plugin?”

    沟通真的很重要,就是这句话,完全解决了我所有的困扰!

    6月末看了关于Http Server里的优化 、压缩、缓存等一系列的文章,最终开始了我第二次优化实施方案的制定。

    其实一旦知道了目标,问题就很容易解决了。因为这方面的文章里明确地写明了IBM的建议:“IBM不建议WAS单独使用,必须和HTTP Server一起使用,否则会存在严重的内存泄漏和性能问题”。而且WebSphere的安装包里就有HTTP Server的介质,我从来都没想过为什么IBM这么发布,这个是我惰性的体现!当然,这些都是读完介绍Http Server和WAS的文章之后才发现!

    停止介绍这些事情吧,简单介绍新的实施方案:

    1.WAS的部分不动;

    2.前端搭建IHS和Plugin;

    3.配置HIS里的http.conf,增加对大对象(图片、flash文件、音乐、上下传文件)的压缩功能、增加JSP页面的缓存功能......;

    4.配置新的WAS,配置新的端口通过Plugin和HTTP之间进行内部通讯;

    5.修改F5的地址和端口指向HTTP的端口,由HTTP和Plugin插件转向WAS,实现http.conf里配置的功能

    7月中旬,我满怀信心的提交了第二份关于Web应用的优化方案和测试结果给项目经理和用户,7月末方案评审通过,实施!

    实施后的优化结果:

    1.从7月之后我布置在主机上的监控shell就从来没有重启过WAS;

    2.项目组已经陆续停掉了各个服务器上其它appserver,保留单机单节点的模式;

    3.从http的压缩日志上可以看到流量减少了80—90%;

    4.晚上再也没有人打电话拿WebSphere的问题骚扰我了;

    5.整理文档发布到公司的知识论坛;

    6.07年8月我开始筹备结婚,到大连开发区的海边拍婚纱照!

    后记:

    今天看见WebSphere的征文,突然想整理一下自己学习和使用WebSphere的过程和大家分享一下。现在公司的新人都是拿着整理好的安装文档去实施,从来也不问为什么这么做,我自己也都快忘记了。今天看见征文想起来学习的过程,其实我是很想感谢WebSphere的研发团队,在使用的过程中能这么锻炼一下自己,磨练一下自己的性格,同时也希望给刚开始学习WebSphere的人起到一个抛砖引玉的作用,当然也希望各位不要砸砖头!有需要细节实施文档的帮我顶贴留Mail哈!

0
相关文章