最近tomcat6, SSH项目执行一段时间后会发生outofmemory, permanent heap溢出 , 然后没有反应,必须重启才可以。
引用一段:
发现很多人把问题归因于: spring,hibernate,tomcat,因为他们动态产生类,导致JVM中的permanent heap溢出 。然后解决方法众说纷纭,有人说升级 tomcat版本到最新甚至干脆不用tomcat。还有人怀疑spring的问题,在spring论坛上讨论很激烈,因为spring在AOP时使用CBLIB会动态产生很多类。
但问题是为什么这些王牌的开源会出现同一个问题呢,那么是不是更基础的原因呢?tomcat在Q&A很隐晦的回答了这一点,我们知道这个问题,但这个问题是由一个更基础的问题产生。
于是有人对更基础的JVM做了检查,发现了问题的关键。原来SUN 的JVM把内存分了不同的区,其中一个就是permenter区用来存放用得非常多的类和类描述。本来SUN设计的时候认为这个区域在JVM启动的时候就固定了,但他没有想到现在动态会用得这么广泛。而且这个区域有特殊的垃圾收回机制,现在的问题是动态加载类到这个区域后,gc根本没办法回收!
2003年的时候就有一个bug报告给sun,但是到现在,这个bug还没有close!有人在这个bug加了句评语:“A bug this critical is open since 2003? Absolutely shameful.” 我觉得SUN在这个BUG上确实有些丢脸。
参考了:http://www.iteye.com/topic/5322,于是想试试JRockit
安装Oracle JRockit Mission Control 4.0看看情况怎么样,
首先判断是32位还是64位系统,通过命令
打入下面的命令
grep flags /proc/cpuinfo
输出
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm nx lm
如果找到lm, 则说明你的CPU是64位的. lm是long mode的意思.
Long Mode - 64位CPU
Real Mode - 16位CPU
Protected Mode - 32位CPU
uname -a
输出1
Linux test-1 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:12 EDT 2008 i686
i386, i686说明你是32位的内核, 跑的是32位的系统.
eg: Linux localhost.localdomain 2.6.18-128.el5PAE #1 SMP Wed Jan 21 11:19:46 EST 2009 i686 i686 i386 GNU/Linux
输出2
Linux test-2 2.6.18-92.el5 #1 SMP Tue Apr 29 13:16:15 EDT 2008 x86_64
x86_64则说明你是64位内核, 跑的是64位的系统.
如果你cpuinfo的输出有lm标志, 而uname -a命令的输出是i386或i686, 说明你是64位的CPU跑的32位的系统.
根据不同类型下载不同的文件,
接着安装
我下的是:jrmc-4.0.0-1.6.0-linux-ia32.bin
执行以下命令将文件设为可执行
chmod 777 jrmc-4.0.0-1.6.0-linux-ia32.bin
然后
./jrmc-4.0.0-1.6.0-linux-ia32.bin
发现输出:bin Text file busy,估计有其它进程在使用,执行:
fuser -k jrmc-4.0.0-1.6.0-linux-ia32.bin
杀掉其它进程
重新执行:
./jrmc-4.0.0-1.6.0-linux-ia32.bin
一路NEXT,完成
配置环境:
在/etc/profile里最后写入如下:
#vi /etc/profile
export JAVA_HOME=/usr/java/jdk1.6.0_16
export JRE_HOME=/usr/java/jdk1.6.0_16/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export SVN_HOME=/usr/svn/subversion1.6.5
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$SVN_HOME/bin:$PATH
使环境变量生效:
source /etc/profile
java -version
结果:
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Oracle JRockit(R) (build R28.0.0-679-130297-1.6.0_17-20100312-2128-linux-ia32, compiled mode)
说明安装成功。
最后配置tomcat, 因为之前使用SUN JDK,曾经在catalina.sh配置了一些启动参数:
-Xmn800m
-XX:+UseConcMarkSweepGC
-XX:MaxTenuringThreshold=8
-XX:+ExplicitGCInvokesConcurrent
这些与JRockit有冲突,直接删除,重新启动tomcat, 成功!
接下来会使用测试工具对性能测试一下
http://www.volano.com/benchmarks.html
分享到:
相关推荐
JRockit Mission Control 是 BEA(现已被 Oracle 收购)推出的一款强大的 Java 应用性能管理和诊断工具,特别适用于检测和解决内存泄漏问题。这个工具集在 JRockit R26.0.0 及后续版本中捆绑提供,最新版本为 2.0.1...
JRockit Mission Control (JMC) 是一款由 Oracle 开发的高级诊断工具套件,主要用于帮助开发人员和运维人员监控、分析 Java 应用程序的性能问题,特别是在生产环境中进行故障排查时尤为有用。JMC 的核心组件之一是 ...
总的来说,Oracle JRockit 6是针对Linux x32平台的一款强大且优化的Java运行时环境,其集成的JRockit Mission Control和JRockit Real Time为开发和运维提供了强大的工具支持。然而,由于Java技术的快速发展,JRockit...
总之,Oracle JRockit 6 Linux x64提供了一套全面的解决方案,不仅包括了JVM本身,还有强大的管理和优化工具,使得在Linux环境下运行Java应用程序更加高效和可控。对于需要高性能和实时性的系统,JRockit Real Time...
在Oracle JRockit 6中,R28.2.7是具体的产品版本号,它包含了JRockit Mission Control 4.1和JRockit Real Time 4.1这两个关键组件。 **JRockit JVM** Oracle JRockit JVM是Oracle公司早期开发的一款Java虚拟机,以...
JRockit Mission Control是Oracle JRockit JVM的一部分,它是一个强大的Java应用程序性能管理工具集。它包含了多个诊断和监控工具,如JConsole、VisualVM等,帮助开发者和运维人员深入理解应用程序的运行状况。通过...
Oracle JRockit Mission Control 4.0.1
4. **JRockit诊断工具**:介绍JRockit Mission Control等诊断工具的使用,包括性能监控、内存泄漏检测、线程分析等功能,帮助开发者快速定位和解决问题。 5. **JRockit性能调优**:提供实战性的性能调优技巧,包括...
### Oracle JRockit Mission Control 知识点解析 #### 一、概述 Oracle JRockit Mission Control 是一款专为 Oracle JRockit JVM 设计的强大工具集,主要用于在生产环境中进行 Java 应用程序的无干扰分析与诊断。该...
- **工具集**:JRockit附带了一系列诊断和分析工具,如Mission Control,帮助开发者进行性能调优。 - **许可证变化**:在Oracle的改动下,Oracle JRockit现在可以免费用于开发和内部产品使用,降低了企业使用成本...
这款JRockit版本是针对Java Development Kit (JDK) 1.6.0_45的优化实现,提供了R28.2.7更新和两个关键组件:JRockit Mission Control 4.1以及JRockit Real Time 4.1。以下是关于这些组件和其相关知识点的详细解释: ...
Oracle JRockit Mission Control 4.0.1
Oracle JRockit Mission Control 4.0.1
本书也可能讨论了JRockit的JRockit Mission Control,这是一个集成的JVM监控和管理控制台,能够提供应用程序运行时的深入分析和实时控制功能。通过Mission Control,开发者可以获取大量的运行时信息,进行故障排查和...
3. **性能分析工具**:内置的JRockit Mission Control是一套强大的性能监控和诊断工具,可以帮助开发者和运维人员深入了解应用的运行状况,定位性能瓶颈。 4. **资源管理**:JRockit提供了精细的资源控制,包括内存...
Oracle JRockit Mission Control 4.0.1
该书由经验丰富的JRockit开发者马库斯·希尔特和马库斯·拉杰格伦共同撰写,旨在帮助读者理解和掌握JVM的工作原理以及如何通过JRockit Mission Control进行高效监控和故障处理。 JRockit JVM是一款高性能的Java...
在实际的开发实践中,JRockit提供了一系列性能优化工具和监控工具,如JRockit Mission Control和JRockit Real Time,这些工具可以帮助开发者深入了解JVM的行为,监控和诊断性能问题,并在必要时进行调整。...