日志 [2013年01月08日]
上一篇 / 下一篇 2009-06-04 11:31:23 / 个人分类:性能测试
昨天项目上线测试发生了Out of Memory的JVM错误,导致系统down掉并且服务器文件系统撑爆。检查原因是出现过多内存泄漏,系统的可用内存和性能持续下降;最终将导致内存不足(OutOfMemory)。我们开发用的是IBM WebSphere平台,在websphere/AppServer下生成大量javacore*、heapdump*之类的文件,致使websphere的垃圾回收功能失败而导致。其中,javacore文件是关于cpu的,heapdump文件是关于内存的。
_ o:yb9HUpS00U$[ uv4@3[*C0生产环境是ibm小型机,按照手册修改了:应用程序服务器 > server1 > 进程定义 > Java 虚拟机,将"最大堆大小(默认为256)"改为768或1024以上。删除文件系统中的javacore*,heapdump*后基本恢复正常。分析原因,一是JVM设置问题,二(最终原因)程序不够健壮,很多资源没有即时释放导致资源撑爆。尤其是数据库连接资源。以前也遇到过进程挂起的情况,与此次不同,进程挂起主要原因是SQL查询不能及时返回结果导致页面一直等待资源返回而挂起(suspend)。三是产生大数据量的结果集返回结果。一直怀疑我们用的数据结构不够合理,但是也没有尝试修改。51Testing软件测试网)e&Qu#O0@}8}hC
51Testing软件测试网*D*ydC*F0R'j~$|lnf总结一下:
*}b:On&E^!x$ga&X051Testing软件测试网qR;an+b` E/tcx关于架构应该使用健全的模式,使用资源后要及时释放和回收垃圾;
6R&SC:ISOS)C051Testing软件测试网e~S(M K0HI1X尽量采用分布式的结构,类似MVC模式;
4Am __.[dN9z051Testing软件测试网 h8q.m!G"\ z4R努力从程序上解决根本问题。51Testing软件测试网'V9^A:L9B#^ ?S:p
Sb,^ E%Ir9h.wH0附:转载51Testing软件测试网"nq/Qy9a_(P!Jx
51Testing软件测试网kTI#{@0x2RWebSphere应用服务器内存泄漏探测与诊断工具
M*U"qOr1FMN051Testing软件测试网x%z XIco Fe8UbY级别: 中级 李 学朝 (lixuec@cn.ibm.com), 高级软件工程师,IBM中国软件开发中心
j;`'u-J^w&E0QiXh-p*s6r6p fk02006 年 11 月 21 日51Testing软件测试网#qa,{$F:` b0N
51Testing软件测试网;ro5oF"O2jE{:A,e本文介绍了如何在WebSphere应用服务器中实现应用程序内存泄漏的探测,并且针对IBM所提供的系列分析与诊断工具,给出了具体的配置步骤和使用最佳实践。51Testing软件测试网`d2bU7_'h8e
引言
T{"@8w5w.Bfx[0内存泄漏是比较常见的一种应用程序性能问题,一旦发生,则系统的可用内存和性能持续下降;最终将导致内存不足(OutOfMemory),系统彻底宕掉,不能响应任何请求,其危害相当严重。同时,Java堆(Heap)中大量的对象以及对象间之复杂关系,导致内存泄漏问题的探测和分析均比较困难,采用相应的辅助工具是很必要的。
k4W[[UG051Testing软件测试网5y @6f1sit*V P%A;nWebSphere应用服务器提供了系列针对内存问题的探测和分析诊断工具,这些工具可以帮助用户进行内存问题的及时探测,保证系统在发生OOM之前,用户可以在无须进行复杂分析的条件下,预知在其部署的应用中是否存在内存泄漏的问题。如果确有内存泄漏现象发生,WebSphere还提供了相应的工具,可以帮助用户进行分析诊断,从而找到内存泄漏的真正原因。
&d-I^/^wB!V0+W1G%w)l[r01. 内存泄漏探测和诊断步骤51Testing软件测试网%VW^Y/B:l@
51Testing软件测试网:c'L(q`3WT%X实践中,我们可以采用以下的步骤来处理内存泄漏的问题:
v;t*M7};}+`+qc0uwF#IZ?T%l0(1) 首先,在WebSphere中我们启用实时探测内存泄漏工具, WebSphere性能诊断顾问会对内存泄漏提前发出警告信息。51Testing软件测试网sp4T~)s&_8x^
51Testing软件测试网Tq|B u#g1@"@d(2) 启用WebSphere自带的Tivoli性能查看器监视系统的JVM使用状况,确定内存泄漏是否正在发生。
m tY\3@K$V6Vc0\(rYZ;n9~nB0(3) 根据需要,生成详细内存回收日志,使用PMAT工具分析并确定泄漏的时间,周期等。51Testing软件测试网&_ph!R;]3q9D
51Testing软件测试网.AQ5z8Yxt.uN4u(4) 生成单个或者多个Heapdump文件,选用MDD4J进行分析诊断,找到内存泄漏的真正原因。
1NxC'FR,H06Qf-txNz9x3l:f0(5) 提交开发部门进行代码修复,然后重新部署到WebSphere应用服务器。51Testing软件测试网u)O$rG$H[T+N
51Testing软件测试网`%t8r@b接下来的部分,我们针对每个环节的配置和工具使用进行阐述。
k q6jSd G1KwB#\051Testing软件测试网F5]1Gr9S2.WebSphere应用服务器中内存泄漏的探测工具
Y;D$if E&e3M2G4c051Testing软件测试网#a*ney Ge)W2.1 性能诊断顾问介绍51Testing软件测试网 R5R]I,DG[l
Z`.q(u?)e W0性能诊断顾问(Performance and Diagnostic Advisor),在WebSphere应用服务器6.0.2版本之前称为运行时性能顾问(Runtime Performance Advisor)。该工具可以周期性的检查WebSphere的设置,并给出调整的推荐值。自WebSphere应用服务器6.0.2版本开始,该工具实现了一种轻量级的内存探测机制,可以非常容易的帮助用户探测是否在系统中存在内存泄漏问题,并提前通过日志和管理控制台进行通知。这样就给用户以足够的时间采取必要的措施防止系统宕掉,同时可以收集或生成相关的文件以进行离线的分析,来查找泄漏的根本原因。
H+A+v7W s0+n+DG oE02.2配置51Testing软件测试网7T&^2h,ungT
*J7K!m.o:{I0可以在WebSphere应用服务器的管理控制台中启用性能诊断顾问
3e7q{O(b e,R051Testing软件测试网9^TPCIIGY(1) 访问管理控制台 ->服务器-> 应用程序服务器。51Testing软件测试网]|8}@A'@
51Testing软件测试网]B8BR8N}#o(2) 选择所要配置的服务器。
4N2moE9l'A+u]J/Y051Testing软件测试网uXgd h1o(3) 在性能区域,选择性能和诊断顾问程序配置。51Testing软件测试网*\4y5{$LY(J}3u2I
~2O%Qc S~)oP0(4) 如图所示,有两个Tab, 运行时和配置。区别在于,运行时里面的内容无须重启服务器就可以生效,但下次重启服务器的时候,这些配置也会丢失。配置Tab里面的内容只有在服务器重启后才生效,而且配置的内容也会一直存在,除非再次登陆并去掉所选项。
?{O ^,kv r"f(S0{h1]+YR1i X0(5)在其他属性区域,点击性能和诊断建议配置,确保内存泄漏规则处于运行状态(绿色箭头)。
%uu f.{0Cru0kzyGwF*c4A eu02.3 查看泄漏警告信息51Testing软件测试网D&n] { l
$a"r;R&W#X0WebSphere性能诊断顾问输出信息可以显示在WebSphere的管理控制台,并记录在WebSphere应用服务器的SystemOut.log日志文件里面。51Testing软件测试网s'AaP:`;u
51Testing软件测试网9eI V`DrL N4n(1) SystemOut.log日志51Testing软件测试网 p8V Y9Y'Y2jv
51Testing软件测试网/I)MMZs{h [8/31/06 13:21:43:545 CST] 00000010 TraceResponse W TUNE9001W: Heap51Testing软件测试网y!z,Utr%W iQ,|R.p'G
utilization patterns indicate that you may have a memory leak51Testing软件测试网j&L{IQ
Additional explanatory data follows.
&B\4dY#g,i0Data values for free memory between 8/31/06 1:20 PM and 8/31/06 1:21 PM were51Testing软件测试网9C8SS;U*|u$qIku:^8X
consistently below minimum required percentage.51Testing软件测试网e/PC-fM4|*~*o:a
(2) 管理控制台51Testing软件测试网 QSg*mz)t,^8[e
,T&FFYH?\0-登陆管理控制台->故障诊断 ->运行时消息 ->点击运行时警告
eHH0a Y!y6X%T)Lb06{Ro8r I"{@%mz03. Java 虚拟机概要分析和详细垃圾回收
U`Uz_W,F051Testing软件测试网E_QXWI进一步检测是否有内存泄漏的发生,以及泄漏发生的时间,周期和速度,我们可以启用Java虚拟机中的详细垃圾回收,然后分析相应的日志。 WebSphere应用服务器6.1使用了Java SDK5.0, 在Window, Linux, AIX, i5/OS,z/Linux 和z/OS上使用了IBM的JAVA虚拟机, 在Solaris和HP-UX上使用Sun的JVM。Java 虚拟机概要分析工具接口(Java Virtual Machine Tool Interface,JVMTI)支持从运行应用程序服务器的 Java 虚拟机(JVM)收集信息(如,关于垃圾回收的数据、对象利用和线程状态)并且支持更全面的性能分析。一旦启用了 JVMTI,可以使用 PMI 定制选项来启用所选统计信息以收集特定数据。51Testing软件测试网GD:c^ s4q^M V
51Testing软件测试网j(Z` {/P@ p%?w3.1启用 Java 虚拟机概要分析和详细垃圾回收配置步骤51Testing软件测试网,fr][ L.f&uP |j9Q)R
51Testing软件测试网S;q/EKql"sH&kC配置步骤:51Testing软件测试网(bU^bEgx T._
51Testing软件测试网||A3fjl0|X1. 在控制台导航树中单击服务器 > 应用程序服务器51Testing软件测试网K+Ji5rF1["e.M
51Testing软件测试网}iu/Vzrl/N2. 单击选择所需应用程序服务器。
y'No+\dyH1gq0X|-r+DA"B3Oa-Z03. 在"服务器基础结构"下,单击 Java 和进程管理-> 进程定义。51Testing软件测试网z:ZQ]/tTB#D6W
51Testing软件测试网H1VT3k7Js+W_3Cb4. 在"其他属性"下,单击 Java 虚拟机。51Testing软件测试网dU or%L Su'y&A2^
9yW7mT-Eqh5F*v05. 选中配置Tab的详细垃圾回收选项。
.jJ'F)sV0c9s8B)kf%[J r x06. 在通用 JVM 参数字段中输入 -agentlib:pmiJvmtiProfiler。51Testing软件测试网8k(Ma1gS&k