用JMX监控Weblogic 运行时状态

JMX提供开放和可扩展管理服务的规范。WebLogic Server添加了自己的方法和拓展。
所有WebLogic Server资源和跑在其上的第三方服务和应用,都被一个基于JMX的服务管理。

WebLogicServer提供了一系列MBean,可以使用这些MBean来配置、监控和管理WebLogic服务器资源。
Runtime MBeans 包含有关服务器及其资源的运行时状态的信息。
Configuration MBeans包含有关服务器和资源配置的信息。
Runtime MBean的生命周期遵循其公开运行时数据的资源的生命周期。例如,当您启动一个服务器实例时,服务器实例化一个ServerRuntimeMBean并用当前运行时数据填充它。每个资源在其运行时MBean中更新其状态更改的数据。资源停止时会销毁其运行时MBean。

所有MBean必须在MBean服务器中以类型的对象名称注册javax.management.ObjectName.
WebLogic服务器遵循一种约定,子MBean的对象名称包含其父MBean对象名称的一部分。父MBean包含lookup Child MBean的操作。

MBean的属性 Name Type
RuntimeServiceMBean “com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean”.
为了访问该MBean下的其他的MBean,JMX客户端传递MBean的ObjectName和attribute的名字给MBeanServer.getAtrribute();

RuntimeServiceMBean 
    ServerRuntimeMBean
      JVMRuntimeMBean
	      HeapFreeCurrent
	      HeapSizeCurrent
	      HeapSizeMax
	  ThreadPoolRuntimeMBean
	  JDBCServiceRuntimeMBean

JMX代理的核心是MBean server,MBean server是MBeans的容器。

MBean server等级分类:
Domain Runtime MBean Server -DomainRuntimeServiceMBean:提供域范围内的应用部署,JMS服务,JDBC数据源的访问
Runtime MBean Server -RuntimeServiceMBean:为WebLogic Server实例暴露监控,运行时控制和动态配置
Edit MBean Server -EditServiceMBean:配置管理

JMX客户端跑在WebLogic Server JVM的能直接通过JNDI访问 Runtime MBean Server or Domain Runtime MBean Server。
通过Runtime MBean服务器监视比通过Domain Runtime MBean服务器监视所需的内存和网络流量更少。因为Domain Runtime MBean在连接时才会创建
本地客户端可以通过JNDI树访问WebLogic服务器实例的运行时MBean服务器,而不是构造JMXServiceURL对象。

连接DomainRuntimeServiceMBean
InitialContext ctx = new InitialContext();
server = (MBeanServer)ctx.lookup("java:comp/env/jmx/domainRuntime"); 
要监控servlet可以用ServletRuntimeMBean
//连接RuntimeServiceMBean,为管理当前服务的runtime MBeans and configuration MBeans提供一个入口
域中的每个服务器实例都提供它自己的MBean实例。
InitialContext ctx = new InitialContext();
//MBeanServer是MBean的容器,servers同时也是RuntimeServiceMBean
server = (MBeanServer)ctx.lookup("java:comp/env/jmx/runtime"); 
ObjectName name = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean")
ObjectName serverRuntime = (ObjectName)server.getAtrribute(name,"ServerRuntime");
ObjectName jvmService = (ObjectName) server.getAtrribute(serverRuntime,"JVMRuntime");
Object hFree = server.getAtrribute(jvmService,"HeapFreeCurrent");
Object hCur = server.getAtrribute(jvmService,"HeapSizeCurrent");
Object hMax = server.getAtrribute(jvmService,"HeapSizeMax");
可用内存 = hMax - hCur + hFree
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页