1.什么是BlackStar
BlackStar将是一个高性能的JVM监控、性能监控和剖析的程序,目前BlackStar 具备如下功能:
- 自动发现JVM:通过定期扫描,自动识别同一台服务器上的所有JVM实例
- JMX Proxy/JConsole接入的功能:支持在不重启应用JVM、并且只有一个JMX端口,访问同一台服务器上多个JVM的JMX服务,同时支持JConsole的接入,计划在后期阶段使用web界面实现JConsole的所有功能
- JVM数据定时采集功能:支持对同一服务器上的多个JVM定期进行数据采集,初期阶段提供包括CPU、PermSpace、TenuredSpace、Thread的采集数据,数据采集将使用可扩展的结构,后续将加上Tomcat数据采集,包括线程信息、请求排队等等。
- JVM实时数据功能:通过Web界面提供JConsole没有提供的JVM实时数据,譬如一个JVM所有线程占用CPU情况
- 高性能的性能数据采集和分析功能:使用Java Instrutment技术,在不对应用做任何修改的情况下,通过正则表达式配置,采集感兴趣的应用代码(譬如DAO、服务、调用外部服务等)的执行情况。将使用各种手段优化以保证采集器本身的高性能,以保证采集器可以在生产环境下与应用代码一起工作(目前的性能情况是200万次采集,平均每次采集大概5微妙左右,即20万次采集大概需要1秒时间)。后续将增加web访问的性能采集。
2.第一版本的结构和主要技术
2.1结构
如上,
- MonitorAgent是一个独立运行的程序,其自动识别同服务器上的业务JVM,PerfromanceAgent以JavaAgent的方式运行,如果需要进行数据采集和性能分析,则需要修改业务JVM的启动参数,PerformanceAgent将收集的性能数据记录到文件中
- PerformanceStat是运行在MonitorAgent之上的一个插件,每天定时统计PerformanceAgent产生的性能数据
- JVMMonitor是运行在MonitorAgent之上的一个插件,每分钟采集业务JVM的JVM数据
- JMX Proxy提供了对本机所有JVM的JMX代理功能,JConsole可以通过该Proxy访问业务JVM的JMX服务
- UI提供了对相应功能的界面,包括性能统计结果、JVM定期采集结果、JVM实时采集结果等
此结构的缺点是当我们有多个业务服务器的时候,数据和功能比较分散,后续将支持统一的Portal对所有MonitorAgent进行统一管理,同时支持统一的采集数据中心汇集各应用服务器上的采集数据
2.2主要技术说明
2.2.1性能采集部分
- Java Instrutment技术:监控代码的嵌入使用Java Instrutment技术,在JVM加载Class之前进行字节码的织入(Weaving),具体参见<<[Java性能剖析]JPDA 4)Java Instrutment >>
- JVM字节码和ObjectWeb ASM:监控代码的织入(Weaving)采用精确加入监控代码的字节码的方式以获得更精确的监控代码的生成以达到更优异的性能,这里使用ObjectWeb ASM框架将监控代码的字节码嵌入到被监控的Class中,具体参见<<[字节码系列]JVM字节码初探——字节码 >>和<<[字节码系列]ObjectWeb ASM构建Method Monitor >>
2.2.2JVM监控部分
- Java Management API:我们将使用JVM提供的Java Management API对业务JVM进行性能数据的采集,具体参见<<[Java性能剖析]JVM Management API >>
- Sun Attach API:我们将使用Sun Attach API来自动识别业务JVM及动态启动业务JVM的JMX Service,具体参见<<[Java性能剖析]Sun JVM Attach API >>
- JMX和MX4J JMX Proxy:JVM使用JMX的方式提供Java Management API,此外,我们可以使用JMX技术扩展管理页面提供更多的数据被采集,譬如采集Tomcat相关的数据等。此外,我们这里使用MX4J的JMX Proxy支持将业务JVM被远程性能分析器连接
3.功能预览
3.1JMX Proxy功能预览
3.1.1JConsole使用hessian协议访问远程服务JVM
3.1.2远程服务器两个JVM实例,注意连接使用同一个端口
3.2 定期采集数据功能预览
3.2.1UI功能首页,注意看,与JMXProxy使用的端口也是一样的,一个端口多个用途
3.2.2进入jforum JVM的Monitor功能,可以看到多天的采集数据
3.2.3进入20100627,我们看到采集了cpu,thread,PermSpace,TenuredSpace
3.2.4看看cpu情况,会与前一天做对比(忽略如下图中cpu为负值的情况,报表js本身功能的问题)
3.3实时采集数据功能预览
3.3.1我们看看jforum的线程情况,包括每个线程占该JVM的总CPU的百分比(如果应用CPU居高不下,可以通过这个看可能是哪个线程有问题),还提供Stack和DeadLock Detect,由于这是JConsole也有的功能,就不多介绍
3.3.2看看线程的CPU情况(注意,是实时采集的,因此没有历史数据可以看)
3.4.性能采集数据功能预览
3.4.1我们看看jforum的运行性能数据情况
3.4.2看看simple-20100627(哪些类的哪些方法数据会被采集是可以配置的)
4.BlackStar项目情况介绍
4.1开发人员:raywoo(ayufox@gmail.com)
4.2Code license: Apache License 2.0
4.3近期发布计划:
- V0.5版本:包括如上的所有功能,目前主体已经开发完成,预计7月底可以发布
- V0.6-V0.8的版本:提供Tomcat相关数据采集集成(譬如线程数据、Session数据、请求数据等)、Web请求数据集成(譬如基于URI的访问次数、访问时间、失败次数等等),预计9月底发布