Linux jvm 分析

原因:tomcat下的应用跑了一段时间,应用访问特别慢

分析:

[root@yidong bin]# ps -ef | grep java
root       309 32447 20 10:16 pts/2    00:00:32 /usr/java/jdk1.6.0_37/bin/java -Djava.util.logging.config.file=/usr/local/apache-tomcat-6.0.36/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/usr/local/apache-tomcat-6.0.36/endorsed -classpath /usr/local/apache-tomcat-6.0.36/bin/bootstrap.jar -Dcatalina.base=/usr/local/apache-tomcat-6.0.36 -Dcatalina.home=/usr/local/apache-tomcat-6.0.36 -Djava.io.tmpdir=/usr/local/apache-tomcat-6.0.36/temp org.apache.catalina.startup.Bootstrap start
root       519 32447  0 10:19 pts/2    00:00:00 grep java

根据第二列,获取进程的pid号(或者使用jps、jps -v、jps -l,直接获取到进程的pid)

[root@yidong bin]# jstat -gcutil 309
  S0     S1                E      O      P    YGC     YGCT    FGC    FGCT     GCT   
  0.00  99.72 100.00   4.57  99.97      5    0.088     0    0.000    0.088

第一行各个字母的意思:

S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap上的 Survivor space 1 区已使用空间的百分比
E   — Heap上的 Eden space 区已使用空间的百分比
O   — Heap上的 Old space 区已使用空间的百分比
P   — Perm space 区已使用空间的百分比
YGC — 从应用程序启动到采样时发生 Young GC 的次数
YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 从应用程序启动到采样时发生 Full GC 的次数
FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

每1000毫秒,打印一次,共打印5次,可以用:[root@yidong bin]# jstat -gcutil 309 1000 5

  S0     S1            E      O      P            YGC     YGCT    FGC    FGCT     GCT   
  0.00  99.56  66.25   6.01  99.79      7    0.085     0    0.000    0.085
  0.00  99.56  66.25   6.01  99.79      7    0.085     0    0.000    0.085
  0.00  99.56  66.25   6.01  99.79      7    0.085     0    0.000    0.085
  0.00  99.56  66.25   6.01  99.79      7    0.085     0    0.000    0.085
  0.00  99.56  66.25   6.01  99.79      7    0.085     0    0.000    0.085


经过以上分析,初步判定是 Perm space空间不足,需要在jvm启动的时候添加启动参数来解决。


linux下,在tomcat启动的Catalina.sh的注释下的首行,添加:

JAVA_OPTS="-Xms5120m -Xmx5120m -Xmn2048m -XX:PermSize=512m -XX:MaxPermSize=512m"

需要根据实际情况来设置,可以设置jvm堆栈和PermSize的大小。


更多jstat的用法参见博客:http://www.51testing.com/?uid-77492-action-viewspace-itemid-203728


另外,使用jmap可以打印jvm的内存映射:

 jmap -histo 4939

 jmap -dump:format=b,file=test.bin 4939

jmap 导出的bin文件,可以用jhat来分析,方法是:jhat test.bin,然后会开启7000端口,访问http://localhost:7000端口,可以看到详细信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值