`
programerje
  • 浏览: 3033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AIX环境C/S架构Java工程利用Jprofiler工具排查内存溢出错误

阅读更多

首先介绍下背景情况,这段时间一直在负责一个接入安全节点的项目,系统整体架构采用的是C/S架构,开发语言用的是java,系统整体由4台RA(Router Agent,布署在Linux环境)服务器、2台MA(Master Agent,布署在Aix环境)服务器及2台Integrator产品服务器组成,前段时间发现MA服务隔一段时间后就会抛出OOM(OutOfMemory)错误,为了彻底解决这个问题,决定使用jprofiler这个工具进行系统运行跟踪排查,于是在网上各种搜索相关资料,经过各种尝试最终将jprofiler布署到测试环境上,由于网上相关资料不是很多,而且只针对web应用的,因此记录下来,以备不时之需,具体操作如下:

Jprofiler软件在官网可以提供下载,具体下载地址:http://www.ej-technologies.com/products/jprofiler/overview.html,在此以Jprofiler8.0.7版本为例

一、安装Jprofiler服务端

一般情况下,Jprofiler服务端布署在远程服务器上,在这里Jprofiler运行环境为Aix环境,因此需要下载Unix版本的安装文件 jprofiler_unix_8_0_7.sh,具体安装操作如下:

1)对安装文件赋予执行权限,然后直接执行安装文件:sh jprofiler_unix_8_0_7.sh

安装程序需要确认是否安装软件,直接回车(o)

2)是否默认安装还是定制安装,此处直接回车,选择默认安装,程序默认安装在$HOME/jprofiler8目录下

3)然后是Jprofiler的条款协议等,直接一路回车(Enter),图片略

4)是否同意以上协议条款,直接选择1(Yes)

5)安装程序开始安装,需要等待一段时间

6)初始化Jprofiler,提示是否运行Jprofiler,此处选择No(n),因为此处Jprofiler是随着java启动脚本启动的,因此暂不启动

7)至此安装完成

8)安装完成,默认安装目录为$HOME/jprofiler8

二、安装Jprofiler客户端

一般情况下,在windows环境通过Jprofiler客户端连接远程服务端进行监控操作,因此还需要安装Jprofiler客户端程序,在如上官网地址下载Jprofiler windows版本jprofiler_windows_8_0_7.exe,windows环境安装步骤相对简单(一路“下一步” ^_^),此处省略,需要说明的是,windows版本可能需要注册码。

三、配置Jprofiler客户端

Jprofiler客户端软件安装完成后,需要配置客户端连接远程Jprofiler服务端,具体详细配置如下:

1)点击Start Center,在弹出的窗口选择New Session,选择New Remote Integration按钮

2)在如下窗口选择On a remote computer选项,并且选择Plateform of the remote computer的运行环境为Aix,点击Next

3)在如下窗口选择java虚拟机厂商和版本等信息,在本例中JVM Vendor选择IBM,Version选择1.6.0,Mode选择jit compiler,需要说明的是如果远程服务器的JVM为64位,则需要勾选64-bit JVM复选框,点击Next

4)在如下窗口默认选择Wait for a connection from the JProfiler GUI,点击Next

5)在如下窗口输入远程服务地址,也就是Jprofiler服务端的地址,本例中使用195.203.9.21,点击Next

6)在如下窗口输入远程Jprofiler服务端安装目录,本例中为/home/ap/thdl/jprofiler8,点击Next

7)在如下窗口输入远程Jprofiler服务端的端口,默认为8849,在本例中为8840,点击Next

8)在如下窗口,复制标注中的启动参数并点击Next

9)在如下窗口选择No,I will start the session later,点击Finash,完成配置

10)配置完成,在Open Session中显示连接远程服务的快速链接,此处暂时不启动连接

四、配置java启动命令

将第三部分配置Jprofiler客户中第8步骤中复制的启动参数 -agentpath:/opt/jprofiler/bin/aix-ppc64/libjprofilerti.so=port=8840粘贴到java的启动命令中,以便Jprofiler服务端随java服务启动而启动,具体配置如下所示:

注意:当执行java启动命令时,Jprofiler服务端启动之后为阻塞状态,直到有Jprofiler客户端与之连接后才继续执行java启动命令!

五、启动Jprofiler客户端程序

1)在如下窗口选择刚刚配置的快速连接,点击Start

2)在如下窗口选择Instrumentation以使用产品所有功能

3)在如下窗口确认相关信息,点击OK

4)此时Jprofiler客户端连接远程服务端成功,开始执行监控任务

六、利用Jprofiler客户端远程连接Jprofiler服务端进行实时监控及错误原因剖析

Jprofiler客户端连接远程服务端启动监控后,可以动态实时地监控系统中应用程序的内存对象分配情况,在本例中,在本地启动模拟测试程序,不断的向被监控的服务器发送消息,然后发现Char[]、String、ByteBuf及ConcurrentHashMap中的对象实例总数一直在增长,占用的内存空间也不断增大,虽然GC一段时间后会进行垃圾回收,但是也只有一小部分的对象被释放,运行一段时间后,Char[]和String对象实例已经达到10万多个,而ByteBuf和ConcurrentHashMap的对象实例达到40万左右,如下图所示:

因此可以初步断定系统中某个程序使用ConcurrentHashMap数据类型时,未及时有效的清除其中无用的元素,致使Map中元素个数在不断的线性增长,经过一段时间后导致内存耗尽,系统抛出OOM异常。经过分析最终在系统中发现,MA服务器在接收到RA服务器转发的报文消息后,正常情况下是将该消息通过唯一ID缓存到Map中,用于重新发送消息到Integrator产品,如果发送成功并接收到Integrator产品返回携带唯一ID的成功回执报文后就会通过唯一ID将该消息清除,但是在Integrator产品组装回执报文的方法中却并未将唯一ID配置到报文消息中,从而导致程序获取不到唯一ID,因此也不会清除Map中的消息实例,也因此导致系统抛出OOM异常,经过修正,各对象实例一直维持在正常范围内,至此OOM异常解决。

 

分享到:
评论

相关推荐

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

    jprofiler的使用及联调内存溢出解决方案交流 jprofiler 是一个全功能的 Java 剖析工具,...jprofiler 是一个功能强大且多功能的 Java 剖析工具,能够帮助开发者快速定位和解决内存溢出问题,提高程序的性能和可靠性。

    java内存泄露、溢出检查方法和工具

    Java内存管理是开发Java应用程序时的关键环节,内存泄露和溢出问题可能导致系统性能下降,甚至导致服务崩溃。本文将深入探讨如何检测和分析Java内存泄露与溢出,并介绍一种常用的工具——Memory Analyzer(MAT)。 ...

    jProfiler7 java内存分析 linux版本

    jProfiler7是一款强大的Java性能分析工具,尤其在内存分析方面表现出色。它专为开发者设计,帮助他们在Linux环境中深入理解并优化Java应用程序的内存使用情况。本篇文章将详细探讨jProfiler7在Java内存分析上的核心...

    jvm分析工具JProfiler,java应用内存溢出堆栈快照分析工具

    JProfiler是一款专业的Java虚拟机(JVM)分析工具,它能够帮助开发者深入理解应用程序的性能瓶颈,优化内存管理,以及排查内存泄漏等问题。这款软件提供了丰富的功能,包括CPU使用率分析、内存分析、线程监控、类...

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

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

    jProfiler7 java内存分析

    jProfiler7 java内存分析 里面包含jProfiler7安装版本,及key. 顺带有两个文档,一个en,一个cn. 还有几个html入门介绍及使用,包括案例怎么分析内存泄漏的整个分析解决过程。

    idea插件JVM内存工具JProfiler11

    IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能调优,其中就包括JProfiler11这款强大的JVM内存分析工具。本文将详细介绍如何使用Idea中的JProfiler11插件,...

    JProfiler检查内存泄漏

    JProfiler是一款强大的Java性能分析工具,它提供了丰富的功能来帮助开发者深入理解应用程序的内存管理和性能状况。通过JProfiler,你可以实时监测应用的内存使用、CPU消耗、线程状态,以及查找可能存在的内存泄漏...

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

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

    内存泄漏检测工具JProfiler 资料

    JProfiler是一款强大的Java性能分析工具,尤其在检测内存泄漏方面表现卓越。本文将深入探讨如何使用JProfiler来定位并解决内存泄漏问题。 首先,理解内存泄漏的本质至关重要。在Java中,内存泄漏通常发生在对象被...

    jprofiler8.0.1 全功能的Java剖析工具

    JProfiler是一款强大的Java剖析工具,被广泛应用于性能分析、内存泄漏检测、CPU利用率监控以及线程问题排查等方面。它提供了丰富的功能,使得开发者能够深入理解Java应用程序的运行情况,从而提升软件性能并解决潜在...

    Java性能监控工具Jprofiler4.3.2

    Java性能监控工具JProfiler是Java开发中的重要辅助软件,它为开发者提供了深入的性能分析功能,帮助优化应用程序的运行效率。JProfiler 4.3.2版本是该工具的一个历史版本,虽然较新版本可能拥有更多特性,但4.3.2...

    jprofiler java内存监控

    **Java内存监控与JProfiler详解** Java程序在运行过程中,内存管理和性能优化是至关重要的环节。JProfiler是一款强大的Java性能分析工具,它提供了全面的内存监控、线程分析以及CPU性能剖析等功能,帮助开发者深入...

    java内存泄漏分析工具

    总结来说,Java内存泄漏的分析工具如JVisualVM、MAT、JProfiler和Arthas等,提供了丰富的功能来帮助开发者定位和解决内存泄漏问题。理解这些工具的使用方法和特性,结合实际的项目经验,可以有效地防止和修复内存...

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

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

    jProfiler11 java性能分析利器

    总结来说,jProfiler11作为一款Java性能分析工具,以其全面的性能监控、深入的内存分析、直观的线程视图和强大的远程监控能力,成为Java开发者的得力助手。无论是在开发阶段还是在生产环境中,jProfiler11都能有效地...

    cpu利用率过高,内存溢出分析

    诊断内存溢出通常需要利用内存分析工具,如Valgrind(C/C++)、JProfiler(Java)、VisualVM(Java)等,这些工具可以帮助开发者定位内存泄漏的位置,查看对象生命周期和内存分配情况。 ...

    java性能工具 jprofiler 7.2 天涯浪子

    JProfiler可以通过时时的监控系统的内存使用情况,随时监视垃圾回收,线程运行状况等手段,从而很好的监视JVM运行情况及其性能。它把CPU、线程和内存的剖析组合在一个强大的应用中。JProfiler可提供许多IDE整合和...

    Jprofiler JVM不可或缺的内存剖析工具

    JProfiler是一款强大的Java虚拟机(JVM)性能监控和剖析工具,尤其在内存管理和性能优化方面扮演着不可或缺的角色。它由EJ Technologies公司开发,提供了一套全面的功能,帮助开发者和运维人员深入理解Java应用程序...

Global site tag (gtag.js) - Google Analytics