您的位置:首页 > 编程语言 > Java开发

使用jmeter和gcview观察JVM垃圾收集情况和性能

2009-12-22 16:10 561 查看

使用

jmeter



gcview

观察

JVM

垃圾收集情况和性能

作者:韩超

工具介绍:



 



jakarta-jmeter-2.3.4



一款免费的压力测试软件可以对应用服务器和DB

进行压力测试,能够返回服务性能指标值



gcviewer-1.29



是免费的开源垃圾回收视图化查看工具

这个工具只能在1.5

以下的版本中运行,1.6

以后没有对应。这个工具是根据JVM

的GC

执行的log

来视图化的,因此我们第一件要做的就是产生gc log

。要产生gc log

需要修改JVM

的配置。

各版本JDK

配置如下:(官方说法)

Sun JDK
1.4/1.5 with the options

-Xloggc:<file>

[

-XX:+PrintGCDetails

]

Sun JDK
1.2.2/1.3.1/1.4 with the option

-verbose:gc

IBM JDK
1.3.1/1.3.0/1.2.2 with the option

-verbose:gc

IBM iSeries
Classic JVM 1.4.2 with

option -verbose:gc

HP-UX JDK
1.2/1.3/1.4.x with the option

-Xverbosegc

BEA JRockit
1.4.2/1.5 with the option

-verbose:memory

实验方法



介绍

此实验目的是为了通过实验学会jmeter

和gcviewer

工具的使用,是我们在以后的工作中能够更好的通过此工具定位中间件问题,更好的开展工作。

实验环境

RedHat

虚拟机(Linux localhost
2.6.9-89.0.11.ELsmp #1 SMP Tue Sep 15 07:16:37 EDT 2009 i686 i686 i386
GNU/Linux



中间件("WebLogic Platform" Version="10.3.1.0"



JDK

(java full version
"1.6.0_11-b03"



Weblogic JDK

设置(java -client
-Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=48m
-XX:MaxPermSize=128m



实验步骤

1、

到weblogic

域目录下bin

目录下打开startWebLogic.sh

文件在文件中加一行JAVA_OPTIONS="${JAVA_OPTIONS}
-verbose:gc -Xloggc:gc.log"

重启weblogic

,此时在域目录下产生了gc.log

文件。

2、

启动jmeter

工具建立线程组(配置线程数1000

,停顿时间1

秒,循环次数是永远)。



 
 
 

然后在循环组里建立了HTTP

请求(请求的URL


http://192.168.1.102:7001/console/console.portal?_nfpb=true&_pageLabel=ServerMonitoringPerformancePage
,http

请求时同时发送username=weblogic

,password=12345678



 

 
 
 
 
 
 



 
 
 

建立使用图表和列表监控器查看压力测试结果

 

 



 

1、

当发现使用浏览器无法进入weblogic

控制台时停止压力测试,观察gc.log

发现

11538.463: [Full GC 520255K->502074K(520256K),
3.4326990 secs]

11542.221: [Full GC 520255K->501900K(520256K),
3.4342490 secs]

11545.797: [Full GC 520255K->503636K(520256K),
3.5118180 secs]

11549.563: [Full GC 520255K->504382K(520256K),
3.2005410 secs]

11552.915: [Full GC 520255K->502837K(520256K),
3.2495890 secs]

11556.393: [Full GC 520255K->502607K(520256K),
3.0438470 secs]

11559.630: [Full GC 520253K->503526K(520256K),
3.0430040 secs]

11562.785: [Full GC 520255K->503659K(520256K),
3.3416990 secs]

11566.199: [Full GC 520255K->507217K(520256K),
3.1960570 secs]

11569.887: [Full GC 520245K->505854K(520256K),
3.2310940 secs]

11573.307: [Full GC 520253K->507130K(520256K),
3.4036820 secs]

11577.002: [Full GC 520251K->506423K(520256K),
4.3883250 secs]

11581.734: [Full GC 520251K->503336K(520256K),
2.9926290 secs]

11584.866: [Full GC 520255K->505005K(520256K),
2.9095000 secs]

11588.180: [Full GC 520255K->502112K(520256K),
3.3802670 secs]

11591.926: [Full GC 520256K->501053K(520256K),
3.0464990 secs]

11595.410: [Full GC 520255K->497727K(520256K),
2.9174710 secs]

说明频繁在做Full GC weblogic

无法正常的相应用户请求。

2、

使用gcviewer

工具分析gc.log

 

 



 
 
 
 



 

从图中可以看出在进行压力测试过程中JVM

由原来测256M

增加到512M

(红色部门代表total heap

),垃圾回收出现逐渐上升的趋势(图中蓝色部分)说明有一部分对象不能正确回收也就是内存泄露存在。图中黑色部分说明此时JVM

已经出现异常(黑色代表Full GC

)频繁进行Full GC

而每次FULL GC

也不能回收内存而FULL GC

时JVM

不想应用户请求所以导致weblogic

控制台进不去。图中绿色线代表每次垃圾回收时间从中可以看出垃圾回收时间也在增加。

 
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息