`

利用JProfiler对应用服务器内存泄漏问题诊断一例-2

阅读更多

实施情况

 

采用的方案:某某软件商采用了新的会话登录信息存贮方案,即:ExternalSessionManager的成员变量sessionMap中不再保存用户菜单信息,只保存基本的登录信息;存储方式采用用户id(11位)作为键值(key)来保留用户基本登录信息。

 

基本分析:由于基本登录信息只有1K左右,而目前内网登录的用户总数也只有8887个,所以只保存了大约10M-15M的信息在内存,占用量很小,并且不会有内存泄漏。用户菜单信息保存在session中,如果用户退出时点击logout页面,那么应用服务器可以很快地释放这部分内存;如果用户直接关闭窗口,那么保存在session中的菜单信息只有等会话超时后才会由系统清除并回收内存。

 

监控状况:

 



 

如图九所示,ExternalSessionManager中只保留了简单的登录信息(Map中保存了WHsessionAttrVO对象),包括:当前版本(currentversion),操作人员代码基本信息(czrydmInfo),当前时间(currenttime)。

 



 

如图十所示,这个登录用户的基本信息只有1368 bytes,大约1.3K

 



 

如图十一所示,一共有两个用户(相同的用户id)登录系统,当一个用户使用logout页面退出时,保留在session中的菜单信息(MenuNode)立刻释放了,所以Difference一栏减少了806个菜单项。

 



 

如图十二所示,当另外一个会话超时后,应用服务器回收了整个会话的菜单信息(MenuNode),图上已经没有MenuNode对象了。并且由于是同一个用户登录,所以保留在ExternalSessionManager成员变量sessionMap中的对象WHsessionAttrVO只有一个(id=24400001129),而没有产生多个,没有因为多次登录而产生多个对象的后果,避免了内存泄漏问题的出现,解决了前期定位的内存泄漏问题。

 



 

如图十三所示,经过gc内存回收后,发现内存回收比较稳定,基本都回收到了最低点,也证明了内存没有泄露。

结论与建议:从测试情况看,解决了前期定位的内存泄漏问题。

 

生产系统实施后的监控与分析

经过调优后,我们发现:在2005年6月2日晚9点40左右重新部署、启动了Web应用服务器(采用了新的调优方案)。经过几天的监控运行,发现Web应用服务器目前运行基本稳定,目前没有出现新的内存泄漏问题,下列图示说明了这一点

 



 

如图十四所示,6月2日晚21.7(21点42分)重新启动应用服务器,内存占用很少,大约为15%(请看红色曲线),每次GC消耗的时间也很短,大约在5秒以内(请看黄色曲线)。

 



 

如图十五所示,在6月3日周五的整个工作日内,内存的回收基本到位,回收位置控制在20%-30%之间,也就是在600M-900M之间(请看红色曲线的最低点),始终可以回收2G的内存供应用程序使用,每次GC的时间最高不超过20秒,Full GC平均在10秒左右,时间消耗比较短(请看黄色曲线)。

 



 

 

如图十六所示,在周日休息日期间,Web应用服务器全天只做了大约4次Full GC(黄色曲线中的小山峰),时间都在10秒以内;大的Full GC后,内存只占用10%,内存回收很彻底。

 



 

如图十七所示,在周一工作日期间,内存回收还是不错的,基本可以回收到30%(见红色曲线的最低点),即:占用900M内存空间,剩余2G的内存空间;Full GC的时间大部分控制在20秒以内,平均15秒(见黄色曲线)。

 



 

如图十八所示,在6月7日周二早上,大约8:30左右,Web应用服务器作了一次Full GC,用了10秒的时间,把内存回收到了10%的位置,为后续的使用腾出了90%的内存空间。内存回收仍然比较彻底,说明基本没有内存泄漏问题。

经过这几天的监控分析,我们可以看出:

  • Web应用服务器的内存使用已经比较合理,内存在工作日的占用在20%至30%之间,约1G的内存占用,有2G的内存空间富裕;而在空闲时间(周日,每天的凌晨等)内存可以回收到10%,有90%的内存空间富裕;
  • Web应用服务器的Full GC的次数明显减少了并且每次Full GC占用的时间也很少,基本控制在10-20秒之间,有的甚至在10秒以内,明显改善了内网应用服务器内存的使用;
  • 从6月2日重新部署之后,Web应用服务器没有出现宕机重启的现象。

总结

 

通过本文,我们可以看到,内存的泄露将会导致服务器的宕机,系统性能就更别说了。对于系统内存泄露问题应该从服务器GC日志方面进行早诊断,使用工具早确认并提出解决方案,排除内存泄露问题,提高系统性能,以规避项目风险。

 

关于作者

曾胜财是 IBM BCS 部门 I/T架构师,参与了香港瑞士银行项目,广东地税大集中项目,中信实业银行渠道整合项目,建设银行EAI项目等大型项目。

 

 

  • 大小: 28.1 KB
  • 大小: 10.3 KB
  • 大小: 39.1 KB
  • 大小: 33.6 KB
  • 大小: 14.8 KB
  • 大小: 4.1 KB
  • 大小: 8.7 KB
  • 大小: 4.3 KB
  • 大小: 3.9 KB
  • 大小: 7.7 KB
分享到:
评论

相关推荐

    利用JProfiler对应用服务器内存泄漏问题诊断一例.doc

    利用 JProfiler 对应用服务器内存泄漏问题诊断一例 本文主要从应用的角度来解决中间件应用服务器的内存泄露问题,以提高系统的稳定性和性能。文章通过对某个大型项目的案例分析,介绍了如何使用 JProfiler 工具来...

    JProfiler对应用服务器内存泄漏问题诊断解决方案.docx

    JProfiler对应用服务器内存泄漏问题诊断解决方案 一、概述 本文主要介绍如何使用 JProfiler 对应用服务器内存泄漏问题进行诊断和解决。内存泄漏是指应用服务器中的一种常见问题,表现为内存长期不合理占用,内存...

    JProfiler对应用服务器内存泄漏问题诊断

    - 在生产环境中使用JProfiler时,要注意对应用服务器的影响,最好在非高峰期进行诊断。 - 内存泄漏的检测并非一次性任务,应定期进行,尤其是当性能问题出现时。 - 结合日志和其他监控工具,可以更全面地了解问题。 ...

    JProfiler检查内存泄漏

    总的来说,JProfiler是一个强大的性能调试工具,它提供了一系列高级特性来检测和解决Java应用程序中的内存泄漏问题,同时也能帮助优化整体性能。通过熟练使用JProfiler,开发者可以更有效地诊断和修复潜在的问题,...

    JProfiler内存泄漏查找文档

    本文档将详细介绍如何使用JProfiler来定位和解决内存泄漏问题,旨在帮助开发者提升应用程序的性能和稳定性。 1. **内存泄漏概念** 内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,一次小的内存泄漏可能...

    内存泄漏检测工具JProfiler 资料

    总之,JProfiler作为一款强大的内存泄漏检测工具,通过其丰富的功能和直观的界面,可以帮助开发者高效地定位和解决内存泄漏问题,从而提高Java应用的稳定性和性能。正确使用JProfiler,可以显著提升开发者的诊断效率...

    使用Jprofiler监控Apusic应用服务器.pdf

    使用JProfiler监控Apusic应用服务器,不仅是性能监控的实践,更是一次对应用架构与性能优化策略的深刻反思。通过上述步骤,我们不仅能即时掌握Apusic服务器的运行状态,还能基于数据分析,制定科学合理的优化方案,...

    jProfiler7 java内存分析 linux版本

    - 内存分析是识别和解决Java应用程序中的内存泄漏、过度对象创建和内存消耗过高问题的关键步骤。 - jProfiler7提供了详细的内存分配和存活周期视图,帮助开发者定位内存占用大的对象和可能导致问题的代码片段。 2...

    内存泄露与JProfiler

    内存泄露是程序运行过程中,无法释放不再使用的内存...总的来说,理解和预防内存泄露是每个Java开发者必备的技能,而JProfiler作为一款强大的工具,能够有效地帮助我们诊断和修复内存问题,提高软件的稳定性和效率。

    java内存分析-内存泄露问题.rar

    Java内存分析是一个重要的主题,尤其是在开发复杂且性能要求高的应用程序时。内存泄露是Java程序员需要密切关注的问题,因为它们可能导致系统性能下降,甚至可能导致系统崩溃。本文将深入探讨Java内存分析和内存泄露...

    java检测内存泄露工具--jprofiler5

    java检测内存泄露工具--jprofiler5 里面含破解注册码,按照使用说明即可使用!

    jprofiler的使用及联调内存溢出解决方案交流

    它把 CPU、执行绪和内存的剖析组合在一个强大的应用中,提供许多 IDE 整合和应用服务器整合用途。jprofiler 的主要功能包括内存剖析、CPU 剖析、线程剖析和 VM 遥感勘测等。 内存剖析是 jprofiler 的一个重要功能,...

    idea插件JVM内存工具JProfiler11

    首先,JProfiler11是一款专业级别的Java性能分析工具,它能够对JVM进行深入的内存和CPU分析。通过集成到Idea中,开发者可以直接在IDE内部进行性能检测,无需离开熟悉的开发环境。只需下载JProfiler11的安装包,并...

    JProfiler配置(WAS/Linux/tomcat/windows)

    JProfiler是一款强大的Java剖析工具,它集成了CPU、线程和内存的分析,适用于J2SE和J2EE应用程序。通过其直观的GUI界面,开发者能够定位性能瓶颈,检测内存泄漏,解决线程问题,以及进行heap分析。JProfiler还提供了...

    JProfiler解决Java服务器的性能跟踪.doc

    JProfiler既能在本地启动应用程序进行实时监控,也能连接到远程服务器,使得开发者能够远程分析生产环境中的性能问题,而无需中断服务。 7. **应用实践** 创建一个模拟负载环境,使用JProfiler监控内存使用情况、...

    java内存泄漏问题追踪

    在Java编程中,内存泄漏是一个严重的问题,它会导致程序性能下降,甚至可能导致应用程序崩溃。内存泄漏是指程序在申请内存后,无法释放已不再使用的内存空间,随着时间推移,系统可用内存逐渐减少,从而影响系统运行...

    JProfiler

    **JProfiler**是一款强大的Java应用程序性能分析工具,主要用于检测和优化Java应用的内存使用、CPU性能、线程活动、锁竞争、SQL查询性能等问题。它提供了丰富的可视化界面和详细的统计信息,帮助开发者深入理解并...

Global site tag (gtag.js) - Google Analytics