swallowluo
作者swallowluo2018-07-19 23:20
系统架构师, 中国金融电子化公司

我与WAS的故事——WAS见证了我的成长

字数 1634阅读 1508评论 0赞 4

1、我与WAS

我是一名普通的开发人员,从04年左右正式使用Java开发应用。开始的时候使用过各种各样的Java容器:Weblogic、Tomcat、JBoss等等,后来因为工作关系,主要使用WAS作为应用服务器。
记得应该是06年的时候,参加过WAS 5.1的培训,当时听得一脸懵逼,而且由于后来没有学以致用,所以当时的培训内容基本都还给老师了。到了09年的时候,开始正式把Java应用部署到WAS上,算是正式对WAS有了一点点了解。这时我的工作中才正式有了WAS的身影。
10年,迎来了我与WAS关系突飞猛进的时机。那年过了春节后,公司要在WAS6.1上对一个应用做性能测试,我作为应用开发的主力参与其中,有幸能够与各位高手一起并肩作战。在性能测试阶段,我对WAS的部署、性能调优有了全面的了解,我发现了应用开发之外其实还有更广阔的天地。从此以后,WAS就成为了我工作中的一位伴侣。在这里,我要感谢当年跟我一起做性能测试的那几位高手,正是因为他们,我才能够捕捉到一丝性能测试的影子。
从那以后,我开始系统的学习WAS,从WAS在各种操作系统上的部署,到阅读红皮书、信息中心,学习WAS中各种功能的使用,解决应用部署在WAS上的各种功能和性能问题,分析WAS中生成的各种日志。从WAS 6.1到7.0,再到8.5,随着WAS的升级,我也在慢慢积累,逐渐从一个WAS使用者,成长为问题的解决者。下面列举两个WAS使用中解决的问题。

2、WAS Server端口冲突问题

一个WAS集群中包含两个Server,其中一个Server启动后,另外一个Server就会无法启动,提示“Server启动时发生错误,请查看JVM日志”,两个Server总是先启动的那个可以启动成功,后启动的就会无法启动。查看日志,发现除了记录WAS Server进程id的文件以及native_stderr.log文件外,没有其他任何日志生成。
在native_stderr.log文件中仅有下面错误信息:JDWP error in VM_INIT: TransportException [510/201] binding to port failed。从这个提示信息看,应该是两个Server之间有端口冲突,造成后启动的Server无法启动,但是日志中没有提示冲突的端口号。
在命令行使用./startServer.sh Server_Name -trace启动,在生成的trace日志中也没有找到冲突的端口。
通过仔细比较两个Server的配置参数后,才发现原来是两个Server的debug端口冲突造成的。在应用开发过程中,为了调试方便,可以打开WAS的debug端口,通过这个端口,可以在Eclipse中远程对部署在WAS上的应用进行调试。由于两个Server设置了相同的debug端口,造成Server无法同时启动。将其中一个Server的调试端口修改后,两个Server就都可以启动了。

3、JVM垃圾回收问题

一个系统生产环境的WAS服务器,在工作时间内会持续出现CPU占用率超过90%的现象。从操作系统进程的分析可以看到,使用CPU的主要是WAS进程。分析了当时的连接数、并发访问数、WAS中的线程信息,都没有发现异常。在分析垃圾回收日志时,发现由于JVM的内存设置不够大,造成线程处理过程中,JVM频繁进行垃圾回收,垃圾回收时间占总时间的比例已经达到了28%,由于垃圾回收操作过于频繁,导致CPU的使用率过高。将JVM内存扩大50%后,高峰时期CPU占用率降低到70%左右,垃圾回收时间占总时间的比例也下降到5%以下。

4、对未来的展望

随着云时代的到来,应用系统的数据量和访问量都呈爆发式的增长,分布式、微服务逐渐在企业应用中占据一席之地,而且大有席卷天下之势。
WAS作为传统J2EE容器中的佼佼者,希望其能够适应时代的潮流,放下包袱,轻装前进,在新时代中续写以前的辉煌。当然,这也是我对自己的期望。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

4

添加新评论0 条评论

Ctrl+Enter 发表

相关文章

相关问题

相关资料

X社区推广