用VisualVM对Eclipse Virgo服务器进行Profile

本文详细介绍了在OSGi环境下使用VisualVM进行应用性能分析时遇到的类加载问题及其解决方案,包括编辑startup.sh文件添加Bootstrap类加载器路径和修改java6-server.profile文件追加类路径,从而实现正常进行内存和CPU使用情况的profile。

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

在开发上遇到一些性能问题时,我们经常会使用一些Profiler工具对系统进行profile,最常见的是查看内存使用情况或方法调用时间。其中开源工具VisualVM是一个不错的选择。

 

想了解VisualVM的相关信息可以查看这里:

https://visualvm.java.net/

http://www.baptiste-wicht.com/2010/07/profile-applications-java-visualvm/

 

对一般的Java应用程序进行Profile时,我们只需要先启动应用程序,再启动visualvm(其实没有顺序上的依赖),在visualvm里双击出现在左边panel里的应用程序,使visualvm连接上应用程序就可以了。

但在OSGi环境下情况就没这么简单了,例如把Eclipse Virgo服务器运行起来, 然后连上visualvm,然后点击Profiler页里面的Memory按钮,过一会你就会在Virgo的控制台里看见,Profiler Agent在对class进行Redefining。完事以后我们运行一下Virgo里的应用程序,这时你会发现应用程序会被block在那里,然后控制台出现大量的java.lang.NoClassDefFoundError.

 

这事因为OSGi的特殊的类加载机制下,被visualvm重定义过的class不能找到visualvm的class。

 

其实我们只需要简单的两步设置就解决上面的问题。

 

1. 编辑virgo服务器的startup.sh文件

在最后的exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@"之前加上

 

JAVA_OPTS="$JAVA_OPTS -Xbootclasspath/p:${VISUALVM_HOME}/profiler3/lib/jfluid-server.jar"
export JAVA_OPTS
exec "$SCRIPT_DIR"/"$EXECUTABLE" start "$@

 

 

2. 编辑configuration下面的java6-server.profile文件

在org.osgi.framework.bootdelegation项目上追加 org.netbeans.lib.profiler,org.netbeans.lib.profiler.*

 

org.osgi.framework.bootdelegation = \
 org.eclipse.virgo.nano.authentication,\
 com.sun.*,\
 javax.xml.*,\
 org.apache.xerces.jaxp.*,\
 org.w3c.*,\
 org.xml.*,\
 sun.*,\
 org.netbeans.lib.profiler,org.netbeans.lib.profiler.*

 

 

然后,启动Virgo,这时再用visualvm连接virgo以后,可以正常的对内存和CPU使用情况进行profile了。

 

其实上面做的事情简单来说就是,把jfluid-server.jar添加到JVM的Bootstrap类加载器的路径下, 然后告诉OSGi运行环境遇到org.netbeans.lib.profiler,org.netbeans.lib.profiler包里的类就到Bootstrap类加载器里去找。

 

参考文档:

http://www.baptiste-wicht.com/2010/07/tip-profile-osgi-application-visualvm/

http://codescale.wordpress.com/2009/05/22/basics-about-osgi-classloading/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值