JVM学习笔记

最近因为滚石可乐网站的Tomcat进程每运行四五天后进程就退出,查找问题的同时也学习了JVM的相关知识。先总结如下:

首先我采用VisualVM来跟踪内存使用,线程的变化等等,现贴出几张图来直观的认识一下:

JVM内存分代示意图:

JVM学习笔记

线程示意图:

JVM学习笔记

根据上图显示,我想应该是线程开启后没有关闭,造成的开启线程数不断增多导致native内存不够,从而报这样的错误。

2010-4-16 9:55:28 org.apache.tomcat.util.net.AprEndpoint$Acceptor run

严重: Socket accept failed

java.lang.OutOfMemoryError: unable to create new native thread

at java.lang.Thread.start0(Native Method)

at java.lang.Thread.start(Thread.java:597)

at org.apache.tomcat.util.net.AprEndpoint$Worker.start(AprEndpoint.java:1307)

at org.apache.tomcat.util.net.AprEndpoint.newWorkerThread(AprEndpoint.java:914)

at org.apache.tomcat.util.net.AprEndpoint.createWorkerThread(AprEndpoint.java:893)

at org.apache.tomcat.util.net.AprEndpoint.getWorkerThread(AprEndpoint.java:925)

at org.apache.tomcat.util.net.AprEndpoint$Acceptor.run(AprEndpoint.java:1005)

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

我说一下我的生产机的环境:

OS:windows2003 32位企业版

JVM:

C:\Documents and Settings\actop>java -version

java version "1.6.0_05"

Java(TM) SE Runtime Environment (build 1.6.0_05-b13)

Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)

Tomcat版本:tomcat-5.5.23

catalina.bat里面的设置:

set JAVA_OPTS=-server -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -Xms1400m -Xmx1400m -XX:NewSize=48m -XX:MaxNewSize=128m -XX:PermSize=128m -XX:MaxPermSize=256m -Djava.net.preferIPv4Stack=true

set CATALINA_OPTS=%CATALINA_OPTS% -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true

这个问题我们开发组查程序,然后把这个bug解决掉而收场,在查找问题的过程中,学习了大量的知识,总结一下。

首先介绍一款JVM测试工具VOLANO Benchmark(http://www.volano.com/benchmarks.html),下面我将在CentOS5.4下进行软件的安装,首先下载程序:

[root@hadoop5 ~]# wget -c http://www.volano.com/files/volano_benchmark_2_9_0.class

然后进入GUI界面,安装此程序:(不进入GUI界面安装方式:java volano-benchmark-2.9.0 -o /usr/local/volano-benchmark/)

[root@hadoop5 ~]# java volano-benchmark-2.9.0

然后程序启动自己的图形界面进行安装,我们下一步下一步就会安装完毕。我们进入volano-benchmark-2.9.0目录修改startup.sh

[root@hadoop5 ~]#vi startup.sh 输入 :set nu来显示行号

第86行: ulimit –Sn 10240 àulimit –Hn 10240,

复制从98行到106行,修改成你的jdk路径,参数自己设定,比如我就添加了下面这一段:

sunjdk)

java=/usr/local/jdk1.6.0_19/bin/java

if [ "$1" = "loop" ]

then

options="-server -Xmx64m"

else

options="-server -Xmx256m -Xss128k"

fi

;;

然后保存退出

JVM学习笔记

这样就不抱错了。但是用它干什么就不知道了。

然后下载volano_2_9_0.class ,安装方式和volano-benchmark一样:

JVM学习笔记

在startup.sh中修改JDK路径:如下图:

JVM学习笔记

把java=修改为自己的jdk路径

然后运行startup.sh

JVM学习笔记

我们可以通过http://192.168.0.20:8080/vcclient/index.html访问到一个页面(ip地址是运行volano的ip地址)然后点击JVM学习笔记来运行聊天室。来测试JVM性能,至于以后的东西,我就不知道怎么弄了,我刚才给Javaeye的站长发了封站内短信,期待他能回答我接下来怎么做吧。当然大家谁知道,也可以告诉兄弟。不胜感激。我也不会停止尝试。

JVM:现在流行的JVM有不少,经常见的有SUN 的HotSpot。IBM的JDK,和BEA的JRockit。等我会怎么测试了我就把他们的测试结果贴出来,给大家分享。下面我就说说Sun HotSpot的内存调优,同时说一下我对visualvm和HeapAnalyzer的应用理解



本文转自guoli0813 51CTO博客,原文链接:http://blog.51cto.com/guoli0813/301013,如需转载请自行联系原作者

上一篇:PAM 学习笔记


下一篇:winform中用户输入查询与拼音首字母的结合,提高用户的操作体验 (转)