AIX 6.1环境IBM Java1.6内存泄露分析

在LoadRunner 10并发测试中,发现应用服务器出现内存泄漏,表现为大量heapdump和javacore文件生成。通过对日志、jconsole、tprof等工具的分析,定位到DataMappingUtil2类的ConcurrentHashMap对象持续增长。原因是子交易数据接口对象频繁重建导致MappingKey变化。修复方案是减少接口对象的重建次数,部署后测试表明响应时间和内存使用得到改善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1      现象

场景:LoadRunner 10用户并发,无思考时间,每个用户顺序执行59个交易。

现象:压测10-15分钟之后,LoadRunner客户端发现大量失败交易,查看错误信息“无法连接应用服务器”。应用服务器发现产生大量heapdump.***.phdjavacore.***.txt文件。

2      初步定位

分析应用日志ltts-app1.out,发现存在如下错误信息:

Throwable occurred: java.lang.OutOfMemoryError: Java heap space

        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:480)

        at java.net.ServerSocket.implAccept(ServerSocket.java:479)

        at java.net.ServerSocket.accept(ServerSocket.java:447)

        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:381)

        at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:353)

        at java.lang.Thread.run(Thread.java:738)

同时,在应用程序启动目录下发现存在多个javacore*.txt、heapdump*.phd文件,初步定为为堆内存泄露问题。

3      问题还原

增加应用JVM启动选项,降低堆最大内存大小至1024m来减少问题暴露的时间。

--堆内存大小

-Xms768m -Xmx2048m

 

--开启jconsole监控端口

-Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxr

emote.authenticate=false

 

--开启verbosegc

-verbose:gc -Xverbosegclog:gc.log

 

--自定义heapdump事件和格式

-Xdump:heap:events=user

 

应用启动成功后,通过jconsole连接上去查看初始堆内存大小。

此时,通过“kill -3 pid”主动产生javacore和heapdump转储文件,作为基线参考。

 

接着,开始通过Load Runner压测,过了3分钟、5分钟左右,通过“kill -3 pid”主动产生javacore和heapdump转储文件,作为时点数据可以与基线数据进行比较。

 

Load Runner压测10-15分钟左右,通过jconsole跟踪发现堆内存持续增长,垃圾回收也无法释放内存。

 

另外,通过AIX命令tprof命令“tprof -s -k -x sleep 60”跟踪java进程cpu使用情况。

 

Process                                Freq  Total Kernel   UserShared  Other

=======                                ====  ===== ======   ==== ======  =====

wait                                     16  53.07  53.07   0.00   0.00   0.00

/usr/java5/jre/bin/java                  38  45.66   1.06   0.00 42.00   2.60

 

可以看出Shared(即动态库cpu占比很高),接下来查看哪些动态库占用cpu较多呢?

Total % For All Processes (SH-LIBs) = 42.06

 

Shared Object                                                                             %

=============                               &n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值