当登陆用户达到比较高的并发数量的时候,应用服务器的JVM使用的内存逐渐上升,最终达到了允许的最大值2GB,同时应用服务器的CPU占用率达到了100%,不再响应页面访问请求。
通过应用服务器的系统日志和应用程序的日志来分析,出现故障的时候系统的状态:
1、EJB事务阻塞,无法完成事务提交,超时后事务失败
[05-7-20 9:19:33:765 GMT+08:00] ca86fd TimeoutManage I WTRN0006W: 360 秒后事务 57415344:0000000000000bc600000001e19ba92a69ab72c1d79a2e3570eb0d6e2c1d6bbe73657276657231[] 已超时。
[05-7-20 9:19:33:850 GMT+08:00] 1a89f49 TimeoutManage I WTRN0006W: 360 秒后事务 57415344:0000000000000bcf00000001e19ba92a69ab72c1d79a2e3570eb0d6e2c1d6bbe73657276657231[] 已超时。
[05-7-20 9:20:16:512 GMT+08:00] 1a89f49 TimeoutManage I WTRN0006W: 360 秒后事务 57415344:0000000000000beb00000001e19ba92a69ab72c1d79a2e3570eb0d6e2c1d6bbe73657276657231[] 已超时。
……
[05-7-20 9:20:16:535 GMT+08:00] 1a89f49 TimeoutManage I WTRN0006W: 360 秒后事务 57415344:0000000000000bed00000001e19ba92a69ab72c1d79a2e3570eb0d6e2c1d6bbe73657276657231[] 已超时。
[05-7-20 9:20:16:685 GMT+08:00] 6f29c8 TimeoutManage I WTRN0006W: 360 秒后事务 57415344:0000000000000bf200000001e19ba92a69ab72c1d79a2e3570eb0d6e2c1d6bbe73657276657231[] 已超时。
[05-7-20 9:20:16:703 GMT+08:00] 1f40b69 TimeoutManage I WTRN0006W: 360 秒后事务 57415344:0000000000000bf300000001e19ba92a69ab72c1d79a2e3570eb0d6e2c1d6bbe73657276657231[] 已超时。
2、JVM内存已满,线程被挂起
[05-7-20 9:23:20:400 GMT+08:00] 1f40b69 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 98”(1397831)已活动了 639,238 毫秒,可能被挂起。服务器中可能被挂起总计 1 个线程。
[05-7-20 9:23:20:889 GMT+08:00] 1f40b69 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 76”(883497)已活动了 639,300 毫秒,可能被挂起。服务器中可能被挂起总计 2 个线程。
[05-7-20 9:23:20:923 GMT+08:00] 1f40b69 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 132”(6f9db5)已活动了 610,353 毫秒,可能被挂起。服务器中可能被挂起总计 3 个线程。
[05-7-20 9:23:20:941 GMT+08:00] 1f40b69 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 101”(2006d5)已活动了 630,767 毫秒,可能被挂起。服务器中可能被挂起总计 4 个线程。
[05-7-20 9:23:20:963 GMT+08:00] 1f40b69 ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 87”(a83492)已活动了 639,240 毫秒,可能被挂起。服务器中可能被挂起总计 5 个线程。
……
[05-7-20 9:27:52:733 GMT+08:00] ca86fd ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 168”(1ec0f49)已活动了 816,312 毫秒,可能被挂起。服务器中可能被挂起总计 110 个线程。
[05-7-20 9:27:52:793 GMT+08:00] ca86fd ThreadMonitor W WSVR0605W: 线程“Servlet.Engine.Transports : 99”(1ddb2)已活动了 837,544 毫秒,可能被挂起。服务器中可能被挂起总计 111 个线程。
二、现象分析
随着应用程序同时操作的用户增多,JVM内存占用逐渐增高,垃圾收集器的内存收集跟不上内存增长的速度,最后导致内存耗尽,应用服务器不再响应。当发生该现象的时候,同时操作该系统的用户数量不超过100个,按照应用服务器的负载能力和正常的应用程序估算,不应该占用多达2GB的内存。根据对应用系统的深入分析,可能导致性能故障的原因,按照可能性如下:
1、EJB的事务配置失误
在当前的生产系统上,所有的EJB的所有的方法的事务类型统统设置为:RequiresNew类型,该类型声明每个EJB的每个方法操作都需要启动一个新的容器全局事务来处理当前的操作。要知道,EJB容器的全局容器事务资源是非常昂贵的服务器资源,会占用很多的内存,关联很多相关的上下文内存堆栈,关联数据库资源。如果在很高的并发访问情况下使用RequiresNew事务类型,会导致应用服务器的全局容器事务数量保持在一个非常高的水平,从而导致内存巨大消耗和资源的锁定,并且一旦全局容器事务的资源被锁定,那么这些资源关联的上下文内存堆栈就无法被及时释放,那么内存就会持续攀升。从当前的服务器日志来判断,在系统宕机之前,报告了很多事务超时失败的错误,这也说明,在系统宕机之前,已经有相当多的事务被锁定。
此外,有些EJB的只读查询方法会执行非常复杂的关联SQL语句,查询结果集非常庞大,一旦对这些非常耗时的只读查询方法声明全局容器事务,必然会造成全局容器事务非常耗时,从监控工具的报告来看,复杂查询的事务往往持续了几十秒,对内存的消耗非常庞大。
另外,一旦声明事务的EJB方法执行失败(例如出现SQLException),则全局容器事务需要回滚,而全局容器事务的回滚期间也会进行资源的锁定,消耗比较多的内存。因此在当前的情况下,尽量减少全局容器事务的使用,降低事务回滚发生的概率,会对提高系统性能,降低JVM内存起到非常显著的作用。
根据我的判断,EJB事务配置事务是导致内存溢出,系统宕机的最大可能原因!
解决方案:
将只读查询的EJB方法声明为NotSupported类型,将数据修改的EJB方法的事务声明为Required类型,尽最大可能减少全局容器的使用。
2、数据库连接池设置失误
当前生产机器数据库连接池最大允许连接仅仅设置为30个!一旦并发的请求超过30个,或者数据库查询非常耗时,那么就会立刻导致数据库连接不够用,那么后续的访问请求就会统统挂起等待空闲的数据库连接池。由于当前软件系统是在EJB里面访问数据库,那么一旦登陆系统的用户达到很高的数量,那些访问数据库的EJB线程统统被挂起等待,并且这些EJB的全局容器事务也被统统挂起等待,而调用这些EJB的Servlet线程也统统挂起等待。其结果就是,一旦并发访问的用户数量比较多的时候,数据库连接池就满了,接下来所有的Servlet线程,EJB容器事务,EJB实例统统挂起,最后导致JVM内存溢出,系统宕机。
数据库连接池设置数量过小,也是导致性能故障最重要的原因
解决方案:
在应用服务器上面修改数据库连接池最大数量为100或者更多。
3、PurchaseManagementBean的问题
从当前的日志分析,系统日志抛错基本上都是调用PurchaseManagementBean的时候发生的。根据最近两天使用Loadrunner对系统进行压力测试的结果表明,PurchaseManagementBean也是系统负载比较高的地方。我浏览了一遍PurchaseManagementBean和Bean调用的DAO方法源代码,包含了非常多的复杂的SQL关联查询和某些循环插入数据的操作。如果对这个EJB以及相关DAO源代码进行仔细的代码优化,则可以提高明显提高系统的性能。
4、EJB查询方法返回的结果集比较庞大
当前很多EJB查询方法返回的结果集比较庞大,这些结果集要通过序列化之后传给Servlet的Action,Action拿到结果集再反序列化,才能使用。如果并发访问的用户非常多,而查询的结果集又非常庞大,就会导致JVM的内存占用达到一个非常高的水平。
解决方案:
仔细优化EJB调用的复杂查询DAO方法,减少不必要的数据传送。
三、故障总结和解决方案
根据这两天的分析,我的结论是:
导致性能故障最大可能性就是EJB事务配置失误和数据库连接池配置失误
解决方案:
1、开发小组去修改EJB的配置文件,查询方法声明为NotSupported,不启动事务;修改数据方法声明为Required,不启动新的事务
2、现场部署修改Websphere配置,将连接池数量扩大到100以上
3、开发小组请仔细排查PurchaseManagementBean调用的相关DAO查询方法,特别是复杂的SQL关联查询,和某些在循环体内插入或者更新数据的操作,进行必要的优化。
发表评论
-
控制台SESSIONOUT
2010-09-17 13:04 1137通过配置文件来修改WAS控制台Session过期时间的方法 ... -
SOCKET 异常类型
2010-03-30 16:42 1741Error code Meaning ... -
Transaction Introduce
2010-03-30 14:01 1120Transaction 什么是Transaction? ... -
DB2 死锁
2010-03-26 10:33 4220解决“SQL0911N 因为死锁 ... -
案例分析
2010-03-16 16:53 1586系统上线后偶有宕机, ... -
Remote Rendering portlet hangs on socketRead0()
2010-03-16 16:46 1937当我们在JAVACORE文件中发现很多WEBCONTAINER ... -
WAS Portal Theme Development And Configuration
2010-03-12 22:37 1300我们先介绍一下主题和 ... -
Portal 主题部署
2010-03-12 22:21 1374部署定制的主题和外 ... -
应用服务器出现错误的原因简析
2010-03-11 22:19 873磁盘已满 导致 ... -
WAS 中Too many open files问题
2010-03-11 22:16 1258WAS下的应用系统,在对其他性能开至较大时出现系统无法返回的情 ... -
急性者的性能优化
2010-03-05 11:02 880引言 如果您是这样一个人:启动并运行 WebSphere ... -
控制台安全性破解
2010-03-04 23:05 949常在河边走,哪有不湿鞋,WebSphere管理中最让人 ... -
查看WAS版本
2010-03-04 22:39 2618一、查看WAS版本的方式:1、命令行 cd $WAS_HOM ... -
WAS设置编码方式
2010-03-04 22:29 4371当安装了webSphere的小型机的默认编码不是GBK ... -
WAS 6.1 的类加载四
2010-03-04 12:35 109312.5.2 步骤 2:添加一个EJB模块和工具JAR ... -
WAS的类加载机制三
2010-03-04 12:34 141812.3.1 类加载策略 ... -
WAS的类加载机制二
2010-03-04 12:33 90412.2 概览Websphere 类加载器 注意:每一个 ... -
WAS的类加载机制一(包含JVM的类加载机制.转载)
2010-03-04 12:29 1080abstract:本文截取IBM 红皮书《WebSpher ...
相关推荐
(孩子的异常行为引起了担忧。) * 释义:某种行为、性格或事物偏离正常或标准,例如异常的行为或不寻常的事件。 7. aberration [,æbə'reiʃən] n.离开正路,脱离常轨;变形 * 例句:The aberration of the star...
- **定义**: 名词,指的是感官的感觉,也可以指引起广泛关注或震惊的事件。 - **例句**: The news created a sensation in the media. ##### Rectify - **定义**: 动词,指改正错误或修复故障。 - **例句**: The ...
- technical(科技的):形容词,用于描述与技术、科学或专业技能相关的事物。 - thorough(彻底的):形容词,表示全面、详尽无遗的。 - published(出版):动词,指书籍、文章等被制作并公开发布。 - ...
of sth.):引起对某事物的记忆或回忆。 5. **对…感到惊奇**(be surprised at):对某事感到惊讶或意外。 6. **承认做某事**(admit doing sth.):坦白或承认自己做过的事情。 7. **在…之上**(above):表示...
- **含义**:不是故意的,由偶然因素引起的。 - **例句**:It was an accidental discovery that changed everything. #### accommodate vt. 容纳;供应,供给 - **含义**:为某人提供空间或服务。 - **例句**:The...
他承认他犯了个错误。 18. advise sb to do sth 建议某人做某事 It's advisable to start preparing for the exam early. 19. afford 能负担得起 Can you afford to buy a new car? 20. agree with 同意某人的...
10. attraction(吸引):名词,常与"attract"连用,表示引起兴趣或注意的事物,如:"The city's main attractions include historical landmarks and museums."(这个城市的主吸引力包括历史地标和博物馆。...
5. be to blame(应负责任):表示某人或某事应为错误或问题负责。 6. blame sb. for sth.(因某事责怪某人):指责某人做了错事。 7. in addition(此外):用以添加额外的信息或事实。 8. link...to...(把...与.....
如:She was so absorbed in reading that she didn't hear the doorbell. 5. **be abundant in** - 富有,丰富。用以描述资源或某方面很充足的情况,如:This region is abundant in natural resources. 6. **...
事物的差异往往能引起兴趣。 10. **形容词的误用**:“some mistaken ideas”中的“mistaken”是形容词,用来修饰“ideas”,表示错误的观点。 二、知识点扩展: 1. **动词的形式**:“indicating”表示“表示”...
在例句中,他为了维护友谊,选择了对约翰的错误保密。例如,“They said they came in the name of peace”表示他们声称是出于和平的目的而来。 3. **impostor**:这个词指代假装成别人来欺骗他人的人。在这个句子...
3. **Abnormal** (a.) - 不正常的:与常规或正常状态相反,如:His behavior was abnormal, which raised concerns. (他的行为异常,引起了人们的关注。) 4. **Accompany** (vt.) - 陪伴,陪同:指陪同他人或与某...
8. admit(承认):供认事实或错误。 例句:He admitted that he was wrong about the situation. 9. appear(出现,显得):指看起来怎么样或在某个地方出现。 例句:She appeared confident during the ...
49. **call out** - 呼叫或指出错误。例如:The teacher called out the student for talking during class. 50. **call up** - 打电话或征召。例如:They received a call up to the national team. 51. **care ...
- **例句**:“His behavior is so abnormal that it has raised concerns among his colleagues.”(他的行为如此异常,以至于引起了同事们的担忧。) #### abolish / ә’bɔliʃ / vt. 废除,取消 - **定义与...
- **定义**:正式指控某人犯有罪行或错误。 - **例句**:She was accused of theft but later proved innocent. #### accustom vt. 使习惯 - **定义**:通过重复让某人习惯于某事。 - **例句**:The children were ...
12. 形容词辨析:"When he came back, his ___________ look on his face, he failed in the interview." "disappointed"修饰人,表示"感到失望的","disappointing"修饰事物,表示"令人失望的",此处修饰"look",...
38. **引起〔注意,兴趣等〕** _attract one’s attention_ - **解释**:吸引某人的注意力或兴趣。 - **例句**:The colorful display attracted the attention of passers-by. 39. **仰卧/仰泳** _lie/swim on ...
兴趣:interest - 名词,可以指引起注意或好奇的事物;有趣的:interesting - 形容词,用于描述事物有趣、吸引人;感到有趣的:interested - 形容词,表示对某事感兴趣。 短语互译: 1. 到达:arrive at/in 2. 变得...
which will cause the children to make the same mistake again." 提到了母爱可能导致对子女错误的忽视,"be blind to"意为对某事物视而不见。 - "As a new immigrant in this completely strange country, she ...