我们在日常的开发过程中,难免遇到程序写得有漏洞的时候,比如数据库连接未释放啊,基于JMX,JMS的操作连接未释放啊,过多的对象创建啊,程序的性能 瓶颈啊等等,到了项目开发后期,常常会因为很早之前写得不太好得代码段而造成整个系统得运行效率下降,严重的则会造成系统崩溃。如何很好的解决这些隐藏得 问题呢?对了那就是使用profile工具对我们的系统进行从cpu,memory,thread方面的分析了。本篇文章,就是利用当前几个比较流行得 profile工具来讲解,如何利用这些工具对我们的基于OSGI系统进行profile。
这里我选取两个proflie工具来讲解,第一个是jprofiler,官网(http://www.ej- technologies.com/products/jprofiler/overview.html)上提供了两个非常详细的Demo来教大家 jprofiler的一些常用features,以及简单的使用方法,这里我就着重讲如何用jprofiler来profile我们的OSGI系统吧。
最简单的,jprofiler提供对某个可执行的jar,或者一段main程序来进行profile咯,对于我们的OSGI系统我们则要把它当作一个本地得application server来进行监控,操作都还简单,如下图进行选择。
注意,到了第6步Perform modifications这里得时候,要做重要的两步,第一将它给你得一段参数添加到我们利用命令行去启动我们的OSGI环境的“java”命令,一般 的我们以命令行去启动一个OSGI环境是利用命令"java -jar *.jar"的形式,这里我就只需要把jprofiler提供给你的那段命令添加到"java"命令后就可以了。
其次我们还需要将jprofiler\bin\windows加入环境变量。然后Next,这样就一个profile得配置就配好了。
一切准备就绪后,就启动我们的OSGI应用,如下图:
这样我们就可以看到jprofiler对我们的OSGI应用进行的实时的监控了,一般的最常用的要算是Memory View 和Thread View,其中都可以进行进行filter,这样,如果你看到某些对象一直在上升并得不到释放,或者某些线程在直线上升,你就应该大致的知道问题出在哪里 了吧。
在实际应用中,我们也发现了jprofiler对OSGI应用进行profiler时的一些小bug,不过大致说来还是不错的(因为有破解:))此外还要 注意一点,就是jprofiler好像不能识别空格,也就是说在以这种方式进行profile的时候,jprofiler要用到一个系统用户目录下的. jprofiler4文件夹下的一个xml,以及jprofiler4\bin下的agent,jar如果这些目录中有空格存在的话,jprofiler 是要报错的,大家留意一下.
接下来我再介绍一款profile工具:yourkit java profiler(http://www.yourkit.com/overview/index.jsp),这款工具我比较喜欢,目前为之也没有出现在 jprofiler中出现的一些bug,而且可以为很多IDE提供插件来直接在IDE中对我们的应用进行profile(当然jprofiler也可以) 唯一的不足就是7.0的版本还没有破解,不过6.0已经有了,大家可以去google一下。
使用起来yourkit也与jprofiler大致相同,接下来我就简单演示下如何用yourkit来对我们的OSGI应用进行profile。
先把YourKit Java Profiler 7.0.6\bin\win32加入你的path环境变量中。
然后写一个bat来以命令行的方式执行我们的OSGI应用,具体的写法你可以参照yourkit的安装目录下的samples目录中给你提供的一些 sample来写。我这里写了一个,其实我就copy了sample目录下得一个bat来改了改,这里要注意一点,如果你的应用是运行在jdk1.4或者 1.3之下的请使用-Xrunyjpagent这条命令,如果是在1.5以上则用-agentlib:yjpagent,我这里用后者
@echo off
bat 代码
- :: PATH should contain path to yjpagent.dll
- set OLD_PATH=%PATH%
- set PATH=..\..\bin\win32;%PATH%
-
- :: The following line is added to use JVMTI version of profiler agent in Java 5 or newer
- set JAVA_TOOL_OPTIONS=-agentlib:yjpagent
-
- java -agentlib:yjpagent -jar startup.jar -console -clean -noExit
-
- :: restore PATH
- set PATH=%OLD_PATH%
- echo Press any key...
- pause >nul
然后把这个bat放至你的应用所在根目录,用这个bat去启动你的OSGI应用。
看,应用启起来了
然后到yourkit中去进行应用程序的搜索,yourkit会自动将当前注册了其监控agent的应用都搜索出来
OK,到这里,我们就可以开始用yourkit进行对我们的OSGI应用的profile了,和jprofiler相似的,它也可以从CPU,Memory,Tread几个方面对应用进行监控。
其中得Monitor Usage是我比较喜欢使用的,从这里可以看到当前具体线程的详细情况,来帮助我进行系统性能分析。
好了,到此就简单将几个profile工具如何对我们的OSGI应用进行profile的做法给大家介绍一下,其实在netbeans上面的 profile工具也是非常好用的,以后我还将深入的推出如何对利用这些profile工具对我们的OSGI应用进行一步步的性能调优工作,有感兴趣的同 学可以和我一起讨论。总之个人认为学会如何利用profile工具来优化或者debug我们的系统是非常有必要的,对提高系统的稳定性,健壮性帮助非常 大,也应该引起我们程序开发人员的注意。
分享到:
- 2007-10-28 21:09
- 浏览 3887
- 评论(3)
- 论坛回复 / 浏览 (2 / 10399)
- 查看更多
相关推荐
利用R-OSGi实现分布式OSGi应用 本文通过介绍传统 OSGi 应用程序及 R-OSGi 的实现方式入手,阐述了 R-OSGi 对于 OSGi 规范的实现方式。然后通过一个简单的功能实现由浅入深地讲述传统 OSGi 和 R-OSGi 上的两种不同...
2. **作为独立的Java应用程序部署**:如果需要将OSGi应用程序作为一个独立的Java应用程序部署,可以使用特定的工具(如Bndtools)来打包应用程序,使其能够脱离Eclipse环境独立运行。 通过遵循上述指南,您可以顺利...
在Visual Studio 2010中开发OSGI应用,需要安装支持OSGI的插件或扩展,如Eclipse的C/C++开发工具(CDT)和特定于OSGI的构建工具链。这样可以创建、调试和管理OSGI bundle。 4. Qt 5.11与OSGI: Qt是一个流行的跨...
"基于OSGi和Spring开发Web应用" OSGi(Open Service Gateway ...本文通过一个简单实例,介绍了如何利用 Spring-DM 开发基于 OSGi 和 Spring 架构的 Web 应用,并对 OSGi 和 Spring 的相关知识点进行了详细的解释。
dmServer的模块化特性使得它能够提供更加灵活和可靠的部署环境,对于那些需要频繁更新和维护的应用来说,这是一个巨大的优势。 SpringSource应用平台,则是在Spring、OSGi和Apache Tomcat的基础上构建的新型应用...
OSGi(Open Service Gateway Initiative)是一个定义了Java应用程序如何组织和模块化以及如何动态发现、启动、停止、更新这些模块化组件的规范。Equinox是OSGi规范的一个实现,它是由Eclipse基金会开发的。本文将...
总的来说,基于OSGi和Spring的Web应用开发结合了两者的优点:OSGi提供了模块化和动态部署的能力,而Spring则带来了方便的依赖管理和服务注册。通过Spring-DM,开发者可以在OSGi环境中享受到Spring的便利,构建更灵活...
在模块化编程方面,OSGi提供了一套规则来强化Java的模块化,这有助于解决传统企业级Java应用和OSGi整合不佳的问题。OSGi通过动态模块系统和包解析服务,使得Java应用可以更加灵活地按需加载和卸载模块,而不必重新...
通常,我们需要一个OSGI兼容的Servlet容器,如Pax Web,来托管Spring MVC的应用。同时,Spring MVC的配置也需要适应OSGI环境,比如Controller类需要作为OSGI服务注册,以便于路由请求。 在本案例的"OSGI教程"中,你...
扩展Tomcat支持OSGi应用服务项目文件。其项目为eclipse工程。项目说明请参见我的blog《扩展Tomcat支持OSGi应用服务》:http://blog.163.com/haizai219@126/blog/static/44412555200971223629869/
Java应用架构设计中,模块化模式与OSGi是两个关键概念,它们对于构建大型、可扩展且易于维护的系统至关重要。模块化模式使得代码组织更加有序,而OSGi(Open Services Gateway Initiative)则是一种实现模块化的动态...
3. **开发工具**:Eclipse IDE就是基于OSGi构建的,其插件系统也是OSGi的一种应用实例。 4. **云平台**:OSGi的动态性使其适合云环境中的服务部署和管理。 ### OSGi的挑战与实践: 1. **复杂性**:OSGi的模块化和...
OSGI(Open Services Gateway Initiative)是一种开放标准,用于创建模块化和动态的Java应用程序。它为Java开发人员提供了一个框架,使他们能够构建可热插拔的组件,从而实现更灵活、可扩展和可维护的软件系统。在本...
6. **实际应用**:通过实例,如构建Web应用、企业级应用或嵌入式系统,来展示OSGI的实际应用和优势。 7. **调试与监控**:介绍如何在OSGI环境中进行调试和性能监控,以优化应用程序。 在《OSGI进阶》中,林昊可能...
- 开发工具:介绍支持OSGi的IDE(如Eclipse)和构建工具(如Bndtools),以及如何配置和使用它们。 - 应用场景:探讨OSGi在企业级应用、嵌入式系统、物联网等领域的应用案例。 - 框架集成:讲解如何将OSGi与...
总结来说,使用Equinox开发OSGi应用程序涉及到理解OSGi核心概念,创建和配置bundle,使用服务,以及构建模块化应用架构。通过Eclipse和Equinox,开发者可以获得强大的工具支持,简化开发流程,实现高度可扩展和动态...
本文将深入探讨如何使用Blueprint Container规范来构建OSGi应用程序。 首先,Blueprint Container是OSGi Compendium规范的一部分,它为OSGi环境中的服务配置提供了一个基于XML的声明式模型。Blueprint XML文件定义...
总的来说,OSGI组件编程提供了一种强大的方式来组织和管理Java应用程序的复杂性。通过利用OSGI,开发者能够构建可扩展、动态且模块化的系统,同时减少了组件之间的依赖性,提高了代码的重用性。通过本教程,你将学习...
Equinox OSGi是IBM公司开发...这只是一个起点,你可以根据需要扩展服务,处理更复杂的业务逻辑,同时利用OSGi的模块化特性来管理依赖和版本冲突。在实际项目中,你可能还需要考虑安全性、性能优化和监控等方面的问题。
8. **部署和管理**:如何在OSGI运行时环境(如Equinox或Felix)中部署和管理bundle,以及如何使用OSGI的命令行工具或图形用户界面进行操作。 9. **实战应用**:"OSGI实战.pdf"可能包含实际项目案例,演示如何在真实...