`
Dead_knight
  • 浏览: 1200904 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
博客专栏
752c8642-b795-3fe6-946e-a4e845bffdec
Spring Securi...
浏览量:240185
33caa84e-18a6-3036-a82b-6e2106a4de63
clojure专题
浏览量:48911
E17ca077-44df-3816-a3fe-471c43f6e1e5
WebLogic11g
浏览量:236861
社区版块
存档分类
最新评论

weblogic集群节点监控

阅读更多
由于项目需要,对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);
        }
    }
}
3
2
分享到:
评论

相关推荐

    WebLogic集群部署资料

    WebLogic集群部署是Oracle公司提供的企业级Java应用服务器在高可用性、可伸缩性和负载均衡方面的重要特性。本文将详细解析WebLogic集群的概念、优势、配置步骤以及单服务器和多服务器部署的区别。 首先,WebLogic...

    weblogic的集群与配置图文方法

    此外,WebLogic集群的监控和管理同样重要,良好的监控机制能够帮助管理员及时发现并解决问题,保障集群服务的连续性。通过上述详细的图文介绍,我们希望读者能够对WebLogic集群的创建和管理有一个清晰的认识,并能够...

    weblogic集群设置完整版

    在“weblogic集群设置完整版”这个主题中,我们将深入探讨WebLogic集群的配置过程及其重要概念。 一、集群基础 WebLogic集群是由多个相互协作的WebLogic Server实例组成的集合,它们共享应用程序和服务,并且能够...

    weblogic集群安装配置手册.docx

    - **配置管理服务器**:管理服务器是WebLogic集群的核心,用于管理和监控其他受管服务器。你需要配置管理服务器的启动参数,如端口设置、日志级别等。 2. **启动主管服务器** - **配置启动免输入密码配置文件**:...

    weblogic 集群 OA系统安装与部署

    综上所述,WebLogic集群OA系统的安装与部署是一个涉及多方面知识的过程,包括服务器配置、集群设置、应用部署、高可用性配置和系统监控等,每一个环节都需要细致的操作和深入的理解。通过合理规划和执行,可以构建出...

    Weblogic集群概念和配置

    以下将详细解释WebLogic集群的相关概念及其配置要点。 首先,Domain是WebLogic Server管理的基本单位,它是一个逻辑组织,包含了管理服务器、被管理服务器、机器、节点管理器以及可能存在的多个集群。Domain的配置...

    WebLogic集群与分布式

    而工具则是指用于管理和监控WebLogic集群的各种工具,比如WebLogic Administration Console、WLST(WebLogic Scripting Tool)和各种性能监控工具,这些工具可以帮助管理员进行集群配置、应用部署、日志查看和性能...

    Linux环境WebLogic集群简单配置

    【Linux环境WebLogic集群配置详解】 在Linux操作系统中配置WebLogic集群是一项关键任务,它涉及到分布式系统的高可用性和性能优化。WebLogic Server是一款由Oracle公司提供的企业级Java应用服务器,常用于部署和...

    WebLogic集群部署详细步骤.docx

    WebLogic集群部署是一个关键的任务,尤其对于运行大型企业级应用的企业来说,它提供了高可用性、负载均衡和可扩展性。以下是一个详细的WebLogic集群部署步骤,基于标题和描述中的内容: 1. **前置准备**: 在开始...

    weblogic集群配置

    WebLogic Server是一款由甲骨文公司提供的企业级Java应用服务器,尤其在构建大规模分布式应用程序时,WebLogic集群的配置显得尤为重要。集群能够提供高可用性、负载均衡和故障转移等功能,确保服务的连续性和性能。...

    weblogic12.1.3集群搭建(包括远程机器)

    【WebLogic集群搭建详解】 ...在实际环境中,还需要关注网络配置、安全性设置、监控和日志管理等方面,确保整个WebLogic集群的稳定运行。理解这些基本概念和搭建步骤,对于管理和维护WebLogic集群至关重要。

    Weblogic配置节点管理器

    **Weblogic Server**中的**节点管理器(Node Manager)**是一个重要的组件,它作为一个守护进程在物理机器上运行,为远程服务器的管理和监控提供了强大的支持。节点管理器的主要功能包括: 1. **故障恢复**:当被管理...

    weblogic集群步骤

    ### WebLogic集群部署详细步骤 #### 一、WebLogic集群简介 在介绍具体的部署步骤之前,我们先来了解一下WebLogic集群的基本概念。WebLogic Server是由Oracle公司提供的一个应用服务器,主要用于构建和部署企业级...

    weblogic11g多机集群配置

    在本文中,我们将详细介绍如何配置 WebLogic 11g 多机集群,包括管理服务器、受管服务器、节点管理器和集群配置等。 一、管理服务器配置 在管理服务器上,我们需要配置节点管理器和管理服务器。节点管理器是 ...

    Linux环境Weblogic集群配置,Weblogic JMS集群配置

    本教程将深入探讨如何在Linux环境下配置Weblogic集群以及Weblogic JMS集群,这对于提高应用程序的可用性和可扩展性至关重要。 首先,让我们了解一下Weblogic集群的基本概念。Weblogic集群是指一组独立的Weblogic...

    WebLogic_Server监控

    **管理控制台(Console)**是WebLogic的核心管理界面,提供了一个基于Web的图形化工具,用于配置、启动、停止服务器,管理集群,配置服务如JDBC和JMS,设置安全性,部署和监控应用程序,查看日志等。管理员可以通过...

    aix下weblogic的集群配置

    在AIX操作系统上配置WebLogic集群是一项复杂但关键的任务,因为WebLogic Server是Oracle公司提供的一个强大、可扩展的企业级Java应用服务器,而集群技术能够提高应用的可用性和可伸缩性。以下将详细介绍在AIX环境下...

    oracle RAC 和 weblogic集群安装配置和部署文档

    在本文档中,我们将深入探讨Oracle RAC(Real Application Clusters)和WebLogic集群的安装、配置与部署过程。Oracle RAC是一种高可用性解决方案,可使多台服务器共享同一数据库,提供故障切换和负载均衡能力。...

Global site tag (gtag.js) - Google Analytics