利用JProfiler对应用服务器内存泄漏问题诊断一例(转) - yufeimen - JavaEye技术网站
利用JProfiler对应用服务器内存泄漏问题诊断一例(转)
在中间件应用服务器的整体调优中,有关于等待队列、执行线程,EJB池以及数据库连接池和Statement Cache方
面的调优,这些都属于系统参数方面的调优,本文主要从另外一个角度,也就是从应用的角度来解决中间件应用服
务器的内存泄露问题,从这个角度来提高系统的稳定性和性能。
项目背景
问题描述
某个大型项目(Use Case用例超过300个),在项目上线后,其Web应用服务器经常宕机。表现为:
1. 应用服务器内存长期不合理占用,内存经常处于高位占用,很难回收到低位;
2. 应用服务器极为不稳定,几乎每两天重新启动一次,有时甚至每天重新启动一次;
3. 应用服务器经常做Full GC(Garbage Collection),而且时间很长,大约需要30-40秒,应用服务器在做Full GC的时候
是不响应客户的交易请求的,非常影响系统性能。
Web应用服务器的物理部署
一台Unix服务器(4CPU,8G Memory)来部署本Web应用程序;Web应用程序部署在中间件应用服务器上;部
署了一个节点(Node),只配置一个应用服务器实例(Instance),没有做Cluster部署。
Web应用服务器启动脚本中的内存参数
MEM_ARGS="-XX:MaxPermSize=128m -XX:MaxNewSize=512m -Xms3096m
-Xmx3096m -XX:+Printetails -Xloggc:./inwebapp1/gc.$$"
可以看出目前生产系统中Web应用服务器的内存分配为3G Memory。
Web应用服务器的重要部署参数
参数名称 参数值 参数解释
kernel.default(Thread
Count)
120
执行线程数目,是并发处理能力的重要参
数
Session Timeout
240分钟(4小
时)
HttpSession会话超时
分析
分析方法
http://yufeimen.javaeye.com/blog/70721(第 1/13 页)2008-1-24 17:04:16