CN100543697C - 一种用于Java应用的诊断*** - Google Patents
一种用于Java应用的诊断*** Download PDFInfo
- Publication number
- CN100543697C CN100543697C CNB2007100076833A CN200710007683A CN100543697C CN 100543697 C CN100543697 C CN 100543697C CN B2007100076833 A CNB2007100076833 A CN B2007100076833A CN 200710007683 A CN200710007683 A CN 200710007683A CN 100543697 C CN100543697 C CN 100543697C
- Authority
- CN
- China
- Prior art keywords
- diagnostic
- java
- mentioned
- controller
- machine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明旨在提供一种轻量级的用于Java应用的诊断***,它在运行时允许开关采集、诊断选项以节省性能开销。该诊断***具备运行Java应用的机器(1000)以及与机器(1000)通过通讯协议连接的机器(2000),在上述机器(1000)中,设有Java虚拟机(1010)以及作为诊断器的诊断分析代理单元(1020),在上述机器(2000)中,设有诊断客户端(2010),其特征在于,上述诊断分析代理单元(1020)具备:用于在运行时打开或者关闭规定诊断功能的开关控制器(1021);用于过滤需要诊断的信息的过滤控制器(1022);以及用于在规定时刻启动诊断功能的定时控制器(1023)。
Description
技术领域
本发明涉及一种软件开发工具的***,尤其涉及一种用于Java应用的诊断***。
背景技术
目前,随着软件技术的发展,软件能够处理的问题越来越复杂,同时软件的规模也越来越大。几乎所有的软件***都不可避免得存在程序错误、性能瓶颈等问题。近年来,人们试图从各方面来尽早避免或发现这些问题,以降低***上线后的维护成本。这些措施包括:
使用高级编程语言(如Java,由于很好的解决了内存问题,使内存泄漏的几率大大降低);
设计模式和软件复用(设计模式是通用问题的经验总结,和软件复用一样都有助于避免同类问题重复出现);
提高程序员的调试效率(所有的计算机语言都支持调试,并且大多数IDE都有非常友好的调试界面)。
除了以上几点,对于Java程序,另一个非常重要的措施是能够在运行时获取JVM内部的信息。如获取当前的线程状况有助于定位死锁;获取当前的堆大小有助于定位内存泄漏。过去的几年,作为用于Java应用的诊断工具,已经开发出JOptimizelt,Jprobe等的相关产品。
在图1是表示现有技术中用于Java应用中的诊断工具的框图。此类工具的工作原理如图1所示,机器100运行着Java应用,PA(Profiling Agent,即诊断分析代理)102由工具厂商提供,PA 102与Java应用的虚拟机101(即JVM:Java Virtual Machine)之间通过JVMTI(Java Virtual Machine Tool Interfaces,JDK 5.0前的版本是通过JVMPI)通讯。工具厂商同时提供图形化客户端201,运行在机器20上,与PA 101通过基于特定消息流的协议进行交流,显示结果。
上述诊断工具的缺陷主要有以下三方面:
第一,PA是通过Java命令行的方式注入应用JVM,意味着加载PA必须重启***;
第二,PA功能不可裁减,有可能极大影响应用性能,意味着无法在生产***上部署;
第三,客户端分析功能无法扩充,除非升级工具。
发明内容
本发明鉴于上述问题,旨在提供一种轻量级的并且运行时允许开关采集、诊断选项的用于Java应用的诊断***。
本发明的用于Java应用的诊断***具备运行Java应用的Java应用机以及与Java应用机通过通讯协议连接的客户机,在上述Java应用机中,设有Java虚拟机以及作为诊断器的诊断分析代理单元(即,PA),在上述客户机中,设有诊断客户端,其特征在于,上述诊断分析代理单元具备:用于在运行时打开或者关闭规定诊断功能的开关控制器。
最好,上述诊断分析代理单元进一步具备:用于过滤需要诊断的信息的过滤控制器。
最好,上述诊断分析代理单元进一步具备:用于在规定时刻启动诊断功能的定时控制器。
最好,上述开关控制器、过滤控制器、以及定时控制器由软件模块来实现。
最好,上述诊断客户端具备:多组应用程序编程接口以及一个图形化界面。
最好,上述Java虚拟机与上述诊断分析代理单元之间通过JVMTI进行通讯连接。
最好,在上述诊断分析代理单元中进一步具有常用诊断功能单元。
最好,上述客户端与上述诊断分析代理单元之间通过网络进行通讯,并采用XML作为信息载体。
由此,利用上述开关控制器,能够使得在运行时启用或禁用某项采集功能,从而降低了性能开销,有利于提供一种轻量级的用于Java应用的诊断***。
利用上述过滤控制器,可以过滤需要诊断的信息,由此,PA能够将收集的信息控制在一定的范围,从而降低了性能开销。
又,利用上述定时控制器,能够在特定时间,例如***的闲暇时间,启动诊断项目,从而能够不影响***的正常使用,有利于现场部署。
又,由于上述诊断客户端具备多组应用持续编组接口以及一个图形化界面,由此,不需升级诊断***就能够扩展客户端的分析功能。
附图说明
图1是表示现有技术中用于Java应用的诊断工具的框图。
图2是表示本发明的第一实施方式的用于Java应用的诊断***的框图。
图3是表示本发明的第二实施方式的用于Java应用的诊断***的框图。
通过结合附图对较佳实施例所作的详细描述,本发明的上述和其它特征和优点将变得显而易见。详细描述和附图对本发明仅是示意性质的,并非用来限制其范围的,本发明的范围由所附权利要求及其等同含义限定。
具体实施方式
第一实施方式
图2是表示本发明的第一实施方式的用于Java应用的诊断***的框图。
如图2所示,本发明的第一实施方式的用于Java应用的诊断***具备:运行有Java应用的机器1000;以及与机器1000通过特定消息流的协议进行通讯的包含客户端2010的机器2000。
这里,上述运行Java应用的机器1000中内置作为该诊断***的诊断器的PA(Profiling Agent,即诊断分析代理)1020,上述客户端2010是作为该诊断***的诊断客户端。这里,诊断器由C代码实现,对于Windows***为DToolsAgent.dll,对于UNIX***为DToolsAgent.so。
机器1000运行Java应用,其中,在Java应用中,PA 1020与JVM(JVM:Java Virtual Machine,Java的虚拟机)1010之间通过JVMTI(Java VirtualMachine Tool Interfaces,Java的虚拟机工具接口)进行通讯,这组工具接口是由SUN定义的与JVM交互的标准接口。
在该第一实施方式中,如图2所示,在PA 1020中,在如图1所示的现有技术的基础上,进一步增加了开关控制器1021、过滤控制器1022、以及定时控制器1023。其中,开关控制器1021用于在运行时打开或者关闭某项诊断功能,过滤控制器1022用于过滤需要诊断的信息,定时控制器1023用于在特定时刻启动某项诊断功能。
具体地,在本发明中,内置诊断器即内置上述PA 1020,所谓内置,是指PA 1020始终和应用一起启动,但诊断功能的开启通过开关控制器1021来实现的,因此,无需重启***。也就是说,上述开关控制器1021使得PA 1020初始化时所有的诊断选项都是关闭的,所以,加载PA 1020对应用本身没有任何影响,故尽管加载方式没有改变(仍然通过Java命令执行),却使得部署到生产***成为可能。
再者,上述过滤控制器2022是用于在PA 1020内部对获取的诊断信息进行过滤,假如只想监视Java程序某个包下所有方法的调用次数,通过过滤控制器2022,PA 1020能将收集的信息控制在所希望的范围内,从而极大得降低性能开销。
再者,上述定时控制器2023是为了更进一步提高现场部署,例如,利用定时控制器2023来设定在应用闲时(例如,凌晨)启动某项诊断任务,从而不影响***的正常使用。
如上所述,利用上述开关控制器1021、过滤控制器1022、以及定时控制器1023能够克服背景技术中提到的第一、第二方面的问题。
这里的开关控制器1021、过滤控制器1022、以及定时控制器1023可以由软件模块来实现。
另一方面,在PA 1020中,如图2所示,还实现了对所有JVMTI接口的包装,在图2中表示为JVMTI接口包装1028,由此,客户端2010可以通过API(在下文中将作说明)与PA 1020中的经过包装的JIMTI接口完成通讯与交互。这样,能够保证该诊断工具即PA 1020的功能完备。其次,由于JVMTI是细粒度接口,大多数诊断功能的完成需要通过一组JVMTI调用来实现,因此,在PA 1020中,对常用的诊断功能作了一个包装,即在图2中表示为常用诊断功能单元1029。作为常用中断功能单元1029,它们的常用功能例如有:a)在一定的上下文环境中监控对象创建与回收;b)报告内存中哪些对象数目最多;c)报告在特定的时间内,哪些对象数目的增长最快;d)报告哪些方法调用最频繁。上述这些常用功能在功能完备性的基础上,又提供了功能易用性。
在上述的第一实施方式中,通过设置开关控制器1021、过滤控制器1022以及定时控制器1023,能够使得在运行时启用或禁用某项采集功能,从而降低了性能开销,有利于提供一种轻量级的用于Java应用的诊断***。而且,PA能够将收集的信息控制在一定的范围,从而也能够进一步降低性能开销。进一步,能够在特定时间,启动诊断项目,从而能够不影响***的正常使用来进行诊断。
第二实施方式
图3是表示本发明的第二实施方式的用于Java应用的诊断***的框图。在第二实施方式中,与上述第一实施方式相同地,该用于Java应用的诊断***具备:运行有Java应用的机器1000;以及与机器1000通过特定消息流的网络通讯方式连接的包含客户端2010的机器2000,而且,第二实施方式中的机器1000侧的PA 1020和JVM 1010的结构与上述第一实施方式所述的相同,因此,这里对此省略相同说明并且采用相同的附图标记。然而,第二实施方式与第一实施方式不同之处在于,进一步对作为诊断客户端2010作了改进。
这里,这个客户端2010是广义客户端,它事实上如图3所示包括了多组API(应用程序编程接口)2011以及一个图形化界面2012。
客户端2010与PA 1020之间通过特定消息流的网络通讯方式进行通讯,与现有技术不同的是信息载体采用了XML,这样通过XML Schema或DTD定义(文档类型定义),在PA 1020与客户端2010之间事实上实现了一种标准的可扩展的通讯协议。为简化扩展工作,客户端2010提供了多组API 2011。AIP 2011的功能主要是供客户端2010调用PA 1020的JVMTI包装接口、以及常用诊断功能,同时,API 2011也能够设置开关控制器1021、过滤控制器1022、定时控制器1023。例如,以下列举了API 2011的一些具体功能:
(1)获取所有的活动线程(如,调用PA 1020的JVMTI包装接口);
(2)获取在指定的一段时间内那些对象增长最快(一种常用诊断功能);
(3)打开线程启动/停止监控(即,控制开关控制器1021);
(4)在凌晨作一次堆内存的dump(即,控制定时控制器1023,也是一种常用诊断功能);
(5)获取当前内存中所有的com.utstar.platform开头的对象实例个数(即,控制过滤控制器1022,也是一种常用诊断功能)等等。
该组API 2011事实上正是PA 1020与客户端2010之间协议的语言封装。大多数情况下,诊断***的二次开发者通过API的组合调用扩展功能,当然,也可以基于PA 1020与客户端2010之间的通讯协议直接编写发送与接收、处理XML消息的程序。不论是消息,还是API,均提供了对PA 1020的各个模块的完备控制。由于PA 1020内部实现了对JVMTI接口的全包装,客户端2010能够最大程度的被定制与扩展,解决了背景技术中提到的第三个方面的问题,也就是说,不需升级诊断***就能够扩展客户端的分析功能。
关于客户端2010的另一组成部分即图形化界面2012,它事实上是为PA1020已实现的一组常用诊断功能所做的定制展现(为了更好得展现,部分分析算法也包含在该部分),其主要采用Java Swing来实现。当已启动在诊断***中的Java应用的情况下,可以通过图形化界面2012进行链接,通过图形化界面2012可以开关默认诊断功能,并显示常用诊断功能的文件分析结果。例如,PA1020可以收集堆中的所有对象及它们之间的关联,并保存于一个文件中,图形化界面2012可读入该文件,并分析合并同类对象,在图形化界面2012上以树状形式体现,方便快速定位内存泄漏的根源。另外,图形化界面2012也可以被扩充及定制实现。
以上,参照附图对本发明的具体实施方式作了具体描述,然而,本领域中的普通技术人员应当理解,在不偏离本发明的精神和由权利要求书所限定的保护范围的情况下,本领域中的普通技术人员还可以对具体实施方式中所给出的情况作各种修改。因此,参照上述附图对本发明所作的具体实施方式描述不应当被看作是对本发明的限定。
Claims (8)
1.一种用于Java应用的诊断***,具备运行Java应用的Java应用机(1000)以及与Java应用机(1000)通过通讯协议连接的客户机(2000),在上述Java应用机(1000)中,设有Java虚拟机(1010)以及作为诊断器的诊断分析代理单元(1020),在上述客户机(2000)中,设有诊断客户端(2010),其特征在于,
上述诊断分析代理单元(1020)具备:用于在运行时打开或者关闭规定诊断功能的开关控制器(1021)。
2.如权利要求1所述的用于Java应用的诊断***,其特征在于,
上述诊断分析代理单元(1020)进一步具备:用于过滤需要诊断的信息的过滤控制器(1022)。
3.如权利要求2所述的用于Java应用的诊断***,其特征在于,
上述诊断分析代理单元(1020)进一步具备:用于在规定时刻启动诊断功能的定时控制器(1023)。
4.如权利要求3所述的用于Java应用的诊断***,其特征在于,
上述开关控制器(1021)、过滤控制器(1022)、以及定时控制器(1023)由软件模块来实现。
5.如权利要求1或2所述的用于Java应用的诊断***,其特征在于,
上述诊断客户端(2010)具备:多组应用程序编程接口(2011)以及一个图形化界面(2012)。
6.如权利要求3所述的用于Java应用的诊断***,其特征在于,
上述Java虚拟机(1010)与上述诊断分析代理单元(1020)之间通过Java的虚拟机工具接口进行通讯连接。
7.如权利要求6所述的用于Java应用的诊断***,其特征在于,
在上述诊断分析代理单元(1020)中进一步具有常用诊断功能单元(1029)。
8.如权利要求5所述的用于Java应用的诊断***,其特征在于,
上述诊断客户端(2010)与上述诊断分析代理单元(1020)之间通过网络进行通讯,并采用可扩展标记语言作为信息载体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100076833A CN100543697C (zh) | 2007-01-17 | 2007-01-17 | 一种用于Java应用的诊断*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100076833A CN100543697C (zh) | 2007-01-17 | 2007-01-17 | 一种用于Java应用的诊断*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101004706A CN101004706A (zh) | 2007-07-25 |
CN100543697C true CN100543697C (zh) | 2009-09-23 |
Family
ID=38703873
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100076833A Expired - Fee Related CN100543697C (zh) | 2007-01-17 | 2007-01-17 | 一种用于Java应用的诊断*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100543697C (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853206A (zh) * | 2010-06-18 | 2010-10-06 | 北京九合创胜网络科技有限公司 | 一种软件性能的检测方法及装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103123602B (zh) * | 2011-11-18 | 2016-04-27 | 阿里巴巴集团控股有限公司 | 基于java的异常报警监控方法及其装置 |
CN103353840A (zh) * | 2013-06-08 | 2013-10-16 | 深圳市华傲数据技术有限公司 | 一种数据处理方法和*** |
-
2007
- 2007-01-17 CN CNB2007100076833A patent/CN100543697C/zh not_active Expired - Fee Related
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101853206A (zh) * | 2010-06-18 | 2010-10-06 | 北京九合创胜网络科技有限公司 | 一种软件性能的检测方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN101004706A (zh) | 2007-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8473922B2 (en) | Runtime monitoring in component-based systems | |
US9129056B2 (en) | Tracing values of method parameters | |
US8468502B2 (en) | Generic, multi-instance method and GUI detection system for tracking and monitoring computer applications | |
US8234631B2 (en) | Method and system for tracing individual transactions at the granularity level of method calls throughout distributed heterogeneous applications without source code modifications | |
US5740440A (en) | Dynamic object visualization and browsing system | |
US7506315B1 (en) | System and method combining application tracing and distributed statistical records | |
US7367025B1 (en) | Byte code modification for testing, debugging and/or monitoring of virtual machine based software | |
CN101084488B (zh) | 用于调试在多核架构中执行的多线程程序的方法和*** | |
CN100517249C (zh) | 一种捕获导致内存被野指针改写的函数的方法 | |
CN104182320A (zh) | 一种监控内存泄漏的方法及装置 | |
CN102708037B (zh) | 一种应用程序运行状态的检查方法和检查装置 | |
CN100543697C (zh) | 一种用于Java应用的诊断*** | |
CN100388234C (zh) | 一种基于有限状态机的对内存变量改写进行监控的方法 | |
CN104077220A (zh) | Mips架构操作***内核的调试方法和装置 | |
Weng et al. | Kmon: An in-kernel transparent monitoring system for microservice systems with ebpf | |
Cho et al. | A situation-based exception detection mechanism for safety in pervasive systems | |
CN102063367A (zh) | 针对当机程序的离线分析方法及装置 | |
US7644395B1 (en) | System and method employing bytecode modification techniques for tracing services within an application server | |
Greenwood et al. | A framework for policy driven auto-adaptive systems using dynamic framed aspects | |
CN101945122A (zh) | 可组态智能视频监控平台及其监控方法 | |
CN102866951A (zh) | 嵌入式***内存越界错误快速定位方法 | |
Gergeleit et al. | Checking timing constraints in distributed object-oriented programs | |
CN115422008A (zh) | 无侵入式的进程监控方法、装置、设备及存储介质 | |
CN106444729A (zh) | 一种基于实时***的轨迹捕捉*** | |
BR102015030217A2 (pt) | método para monitoramento de processos independentes alocados em acesso a banco de dados de uma máquina virtual java |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090923 Termination date: 20170117 |