当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

weblogic集群节点监控

发表于: 2010-12-27   作者:Dead_knight   来源:转载   浏览次数:
摘要: 由于项目需要,对weblogic集群做监控,并定时采集系统中队列执行时长、各节点占用内存 等情况。 第一步:获取MBeanHome import javax.naming.Context; import javax.naming.NamingException; import weblogic.jndi.Environment; import weblogic.manageme
由于项目需要,对weblogic集群做监控,并定时采集系统中队列执行时长、各节点占用内存
等情况。
第一步:获取MBeanHome
import javax.naming.Context;
import javax.naming.NamingException;
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;

public class WebLogicBeanHome
{
    private MBeanHome mBeanHome;
    
    private static final WebLogicBeanHome home = new WebLogicBeanHome();
    
    private WebLogicBeanHome()
    {
        init();
    }
    
    private void init()
    {
        Environment environment = new Environment();
        environment.setProviderUrl("t3://localhost:7001");
        environment.setSecurityPrincipal("weblogic");
        environment.setSecurityCredentials("weblogic");
        Context context;
        try
        {
            context = environment.getInitialContext();
            mBeanHome = (MBeanHome) context.lookup(MBeanHome.ADMIN_JNDI_NAME);
        }
        catch(NamingException e)
        {
            e.printStackTrace();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
    }
    
    public static WebLogicBeanHome getInstance()
    {
        return home;
    }
    
    public MBeanHome getMBeanHome()
    {
        return mBeanHome;
    }
    
    public String getServerName()
    {
        return mBeanHome.getMBeanServer().getServerName();
    }
    
    public String getDomainName()
    {
        return mBeanHome.getDomainName();
    }
    
    public Set getMBeansByType(String type)
    {
        if(type == null || type.trim().length() == 0)
        {
            return null;
        }
        else
        {
            try
            {
                return mBeanHome.getMBeansByType(type);
            }
            catch(Exception e)
            {
                e.printStackTrace();
                init();
                return mBeanHome.getMBeansByType(type);
            }
        }
    }
    
    public Set getAllMBeans()
    {
        return mBeanHome.getAllMBeans();
    }
}


第二步:将集群各节点状态信息构造成ServiceNode对象
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import com.huawei.netforce.server.common.ExecuteQueue;
import com.huawei.netforce.server.common.ServiceNode;
import com.huawei.netforce.server.home.WebLogicBeanHome;

import weblogic.management.runtime.ExecuteQueueRuntimeMBean;
import weblogic.management.runtime.ExecuteThread;
import weblogic.management.runtime.JVMRuntimeMBean;
import weblogic.management.runtime.ServerRuntimeMBean_Stub;

public class ServerRuntime
{
    public static final String RUNNING = "RUNNING";
    
    private static final ServerRuntime server = new ServerRuntime();

    private ServerRuntime()
    {

    }

    public static ServerRuntime getInstance()
    {
        return server;
    }

    /**
     * 建造集群节点信息
     * @param set
     * @return
     */
    public List buildServer(Set set)
    {
        List list = new ArrayList();
        if(set == null)
            return list;
        Iterator it = set.iterator();

        while(it.hasNext())
        {
            ServerRuntimeMBean_Stub stub = (ServerRuntimeMBean_Stub) it.next();
            ServiceNode node = new ServiceNode();
            //节点名称
            node.setName(stub.getName());
            //节点地址
            node.setHost(stub.getListenAddress());
            //节点端口
            node.setPort(String.valueOf(stub.getListenPort()));
            //节点状态
            node.setStatus(stub.getState());
            //节点当前可用内存
            node.setFreeHeap(getJVMCurrentFreeHeap(stub));
            //节点总内存
            node.setTotalHeap(getJVMCurrentHeapSize(stub));
            //节点总队列数
            node.setQueueTotal(getExecuteQueueRuntime(stub).getExecuteThreadTotalCount());
            //节点当前占用队列数
            node.setQueueUsed(node.getQueueTotal() - getExecuteQueueRuntime(stub).getExecuteThreadCurrentIdleCount());
            //节点队列详细列表
            buildExcuteQueues(node, getExecuteQueueRuntime(stub).getExecuteThreads());
            list.add(node);
        }
        return list;
    }
    
    /**
     * 建造队列线程信息
     * 
     * @param eths
     */
    private void buildExcuteQueues(ServiceNode node, ExecuteThread[] eths)
    {
        if(eths == null)
        {
            return;
        }
        for(int i = 0; i < eths.length; i++)
        {
            ExecuteThread eThread = eths[i];
            if(eThread.getCurrentRequest() == null || "".equals(eThread.getCurrentRequest()) || "null".equals(eThread.getCurrentRequest()))
            {
                continue;
            }
            ExecuteQueue queue = new ExecuteQueue();
            queue.setNumber(i);
            queue.setName(eThread.getName());
            //队列请求地址URL
            queue.setRequest(eThread.getCurrentRequest());
            //队列请求时间
            queue.setStartTime(eThread.getCurrentRequestStartTime());
            queue.setTotal(eThread.getServicedRequestTotalCount());
            node.add(queue);
        }
    }

    public Set getServerRuntimes()
    {
        return WebLogicBeanHome.getInstance().getMBeansByType(Constant.ServerRuntime);
    }

    private boolean isStoped(ServerRuntimeMBean_Stub mBean)
    {
        return !RUNNING.equalsIgnoreCase(mBean.getState());
    }

    private JVMRuntimeMBean getJVMRuntime(ServerRuntimeMBean_Stub mBean)
    {
        return mBean.getJVMRuntime();
    }
    
    private ExecuteQueueRuntimeMBean getExecuteQueueRuntime(ServerRuntimeMBean_Stub mBean)
    {
        return mBean.getExecuteQueueRuntime();
    }

    private long getJVMCurrentFreeHeap(ServerRuntimeMBean_Stub mBean)
    {
        return getJVMRuntime(mBean).getHeapFreeCurrent();
    }

    private long getJVMCurrentHeapSize(ServerRuntimeMBean_Stub mBean)
    {
        return getJVMRuntime(mBean).getHeapSizeCurrent();
    }

    private String getOSVersion(ServerRuntimeMBean_Stub mBean)
    {
        return getJVMRuntime(mBean).getOSVersion();
    }

    private String getOSName(ServerRuntimeMBean_Stub mBean)
    {
        return getJVMRuntime(mBean).getOSName();
    }

    private String getJavaVersion(ServerRuntimeMBean_Stub mBean)
    {
        return getJVMRuntime(mBean).getJavaVersion();
    }

    private String getJavaVendor(ServerRuntimeMBean_Stub mBean)
    {
        return getJVMRuntime(mBean).getJavaVendor();
    }
}


第三步:处理集群节点状态数据
import java.util.ArrayList;
import java.util.List;

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;

import com.huawei.netforce.server.Handler;
import com.huawei.netforce.server.ServerRuntime;
import com.huawei.netforce.server.common.ServiceNode;
import com.huawei.netforce.server.handlers.LogHandler;
import com.huawei.netforce.server.handlers.MsgHandler;

public class ServerRuntimeJob implements Job
{
    private static List handlers = new ArrayList(); 
    
    static
    {
        //短信处理 如内存不足、队列堵塞等情况发送告警短信
        handlers.add(new MsgHandler());
        //日志处理 如将执行时间较长的队列记录日志,定期优化
        handlers.add(new LogHandler());
    }
    
    //quartz定时执行 一般为5分钟执行一次    
    public void execute(JobExecutionContext arg0) throws JobExecutionException
    {
        ServerRuntime runtime = ServerRuntime.getInstance();
        
        List list = runtime.buildServer(runtime.getServerRuntimes());
        try
        {
            processServerNode(list);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }

    //处理集群各服务节点状态数据
    private void processServerNode(List list) throws Exception
    {
        ServiceNode node = null;
        for(int i = 0; i < list.size(); i++)
        {
            node = (ServiceNode)list.get(i);
            handle(node);
        }
    }
    
    //handles链中的各Handle分别处理
    private void handle(ServiceNode node) throws Exception
    {
        for(int i = 0; i < handlers.size(); i++)
        {
            Handler handler = (Handler)handlers.get(i);
            handler.handle(node);
        }
    }
}

weblogic集群节点监控

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
上次的博文项目进阶 之 集群环境搭建(二)MySQL集群中,我们搭建了一个基础的MySQL集群,这篇博客
本文档基于Oracle官方文档Oracle WebLogic Server 12c: Configuring and Using Node Manager,在此
在本章中我们来学习配置rabbitmq集群类型之一的built-in内置集群。 metadata元数据 在一个单节点的r
Linux下Weblogic集群配置初步 域,集群,管理服务器和被管服务器之间的关系 Weblogic域是一个服务器
从多个独立的硬件和软件,包括 System x™ 和 IBM TotalStorage®,创建一个可运行的 Linux® 集群。
从多个独立的硬件和软件,包括 System x™ 和 IBM TotalStorage®,创建一个可运行的 Linux® 集群。
前言:做了一个监控应用服务器的项目(支持Tocmat、WebSphere、WebLogic各版本), 过程也算是磕磕
一、Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat
目录(?)[-] 1.Weblogic的集群 2.创建Weblogic集群前的规划 3.开始创建我们的Weblogic集群 1.1 创建
一、Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tomcat做node即tomcat
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号