一般Java中间件监控技术分为2种:JMX与ByteCode,在HP的方案中,SiteScope完全基于JMX技术,通过对MBean状态的获取来了解J2EE容器内部性能指标(Counter),可以方便整合JNDIJDBC JTS及其它技术,特别是能够使用JNDI的查询发现机制以及协议,JNDI本身提供了一种服务的查询和发现机制,并且所有的这些Services都可以通过JMX 来实现管理(在SiteScope中主要以Counter来提供)。
而HP Diagnostics,综合了JVMTI和bytecode技术,在JVM运行期间把相关的bytecode精确的注入到当前JVM所载入class字节合适的地方,不修改原class文件,从而达到监控JVM的目的。通过预配置jar文件,在被监控Class被JVM执行之前,通过JVMTI来拦截被载入的Class,分析其bytecode指令,对符合的bytecode指令附件,插入收集bytecode指令,计算时间戳并通过一些基于标签的统计,报告给DiagnosticsServer,从而诊断各种类型的性能问题,包括服务缓慢、具体方法、SQL、内存以外的错误、线程问题等等。
2者最大的差别在于是否需要做嵌入式部署,是否需要适用于诊断场景,是否要做细颗粒的采集,是否关联运算等;
但无论如何,在何种情形下,针对不同的Java容器(如Tomcat\JBoss\WebLogic\WAS等),影响其性能及可用性的因素到底有哪些?有哪些指标需要得到重点的照顾?
本文主要从以上角度列举最重要的7大类25个指标,旨在综合不同的监控方法,来实现最佳的中间件管理实践。
1.1JVM监控
在应用程序的运行期间,可在JVM 堆的内存中分配对象并在对象空闲时进行垃圾收集。如果对象繁忙,其将在内存中徘徊且占用可重复使用的空间。由于堆中充满游离对象,因此没有足够的空间执行新的分配,这将导致更频繁的垃圾收集频率。从而导致应用程序性能下降,在极端的情况下,游离对象(Unpinned)可引起内存溢出。
1.1.1堆使用
堆的使用率,需要区分堆增长为突然增长还是缓慢增长,是否出现锯齿形回收,