Weblogic常用监控方法及指标
weblogic 实例健康状态监视实现原理
weblogic 实例健康状态监视实现原理文章标题:深度解析Weblogic实例健康状态监视实现原理一、引言Weblogic作为一种流行的Java应用服务器,在企业级应用中扮演着重要角色。
而实例健康状态监视是保证Weblogic平稳运行的关键机制之一。
本文将深入探讨Weblogic实例健康状态监视的原理和实现方式,并尝试从简到繁,由浅入深地解析这一话题。
二、Weblogic实例健康状态监视的意义和作用Weblogic实例健康状态监视是为了保障应用服务器的稳定性和可靠性而设计的。
它能够帮助系统管理员及时发现系统异常,预防系统故障,提高系统的可用性和安全性。
1. 实例健康状态监视基本概念Weblogic实例健康状态监视是指对服务器实例进行实时监控,通过记录和分析实例运行时的状态及参数来维护服务器的稳定性。
它通常包括对CPU利用率、内存消耗、线程状态、系统负载等指标的监控。
2. 实例健康状态监视的作用实例健康状态监视不仅可以帮助系统管理员及时发现潜在问题,还可以追踪问题发生的原因,提高问题排查的效率。
它还能够为系统的自动化运维提供基础数据和保障。
三、Weblogic实例健康状态监视的实现原理和方式Weblogic实例健康状态监视的实现原理主要包括以下几个方面:监控项的选择、数据收集和分析、告警和报警机制等。
1. 监控项的选择在进行实例健康状态监视时,需要选择适当的监控项来评估服务器实例的运行情况。
常见的监控项包括CPU利用率、内存消耗、线程状态、系统负载、响应时间等。
这些监控项能够全面反映服务器实例的运行状况,对于及时发现问题至关重要。
2. 数据收集和分析数据收集是实例健康状态监视的基础。
Weblogic通常会通过Agent或者JMX等方式来收集服务器实例的运行数据,然后通过数据分析来评估实例的健康状态。
这一过程需要借助一些监控工具或者自定义脚本来完成。
3. 告警和报警机制当服务器实例的健康状态出现异常时,需要及时通知系统管理员进行处理。
非功能测试监控与简单问题定位分析
指标名称
LoadRunner监控主机指标说明-AIX
指标类型
CPU
指标名称
CPU utilization CPU System mode CPU utilization User mode CPU utilization Page-in rate
Memory
Page-out rate
Paging rate
指标类型 CPU
Memory Disk
指标名称 CPU utilization CPU System mode CPU utilization User mode CPU utilization Page-in rate Page-out rate Paging rate Disk rate
指标描述 CPU 的使用时间百分比 在系统模式下使用 CPU 的时间百分比 在用户模式下使用 CPU 的时间百分比 每秒钟读入到物理内存中的页数 每秒钟写入页面文件和从物理内存中删除的页数 每秒钟读入物理内存或写入页面文件的页数 磁盘传输速率
主机监控——AIX ——监控指标
主机命令监控指标说明-AIX
指标类型 CPU
Memory Pages Disk
CPU-User% CPU-Sys% CPU-Wait% CPU-Idle% Memory-%Used Memory-%Free pages/sec In pages/sec Out Disk-Busy Disk-Read Disk-Write
Disk
Disk rate
指标描述 User占CPU百分比 Sys占CPU百分比 CPU 等待IO时间百分比 CPU空闲时间百分比 内存占用率 内存空闲率 每秒换入页面数 每秒换出页面数 磁盘IO繁忙度 磁盘读速度 磁盘写速度
Weblogic参数调优
Weblogic参数调优一、调优背景:应银监会总会需求,需对银监会派出机构客户风险监测预警系统进行1轮剔除网络环境的性能测试(在山东试运行阶段的性能测试,由于网络瓶颈较大,造成性能指标较差)。
由于时间紧张,只是匆忙搭建了测试环境,Weblogic、DB2等的参数均是默认设置,并未进行任何调优。
默认设置在系统使用人数不多的情况性能尚可,但当使用人数较多,或者进行大并发的性能测试时,则会显得捉襟见肘。
如:在本次测试过程中,在集团关联处的50并发,就会造成系统崩溃。
如图可见:在集团关联并发50的时候,队列长度已经高达103,空闲线程数已经为0,同时吞吐量极低,由此造成系统崩溃。
通过分析,查找到原因在于:JVM分配内存过少;线程池、连接池里分配的线程数以及容量过低,通过调优后解决了问题二、调优思路:一般来讲,J2EE应用架构环境下的系统调优,首先我们一般会从应用程序出发,去审核代码,做到代码级的优化,然后再调整应用服务器(BEA WebLogic8.1)和数据库(DB2)的参数,最后当然是调整操作系统和网络的性能(包括硬件升级)。
这是一种MDA的先进做法。
诚然,在许多项目中,不可能完全按照这个思路来做,我们把目标首先定位在应用系统所在的应用服务器(BEA WebLogic8.1)上,通过对BEA WebLogic8.1的参数进行设置,使WebLogic8.1能够在最优化的环境中去运行其系统,然后对DB2数据的参数进行优化设置,最后进行性能测试再找出导致性能瓶颈所在的SQL代码或JA V A程序,考量其修改的可行性,并进行最终问题优先级认定,与瓶颈模块进行协商解决性能问题。
当然,大多数时候都出现了性能问题后才想到调优,而且一般都是先进行系统参数调整,实在解决不了才会对代码进行检查。
实际上,我们应当将代码级的调优放在应用设计时来做,测试生产时修改代码将是一件极其痛苦的事情。
而本次测试由于时间紧张,只对Weblogic进行了参数调优,现将调优步骤进行说明:1.JVM调整:(1)首先,在D:\bea\user_projects\domains\mydomain下用编译模式打开startWebLogic.cmd,查找代码:call "%WL_HOME%\common\bin\commEnv.cmd"(windows)或者call "%WL_HOME%\common\bin\commEnv.sh"(linux/aix)找到后,在相应路径用编译模式打开该文件:(2)接着要弄清楚JDK厂商(是bea,还是sun、IBM等)set JA V A_VENDOR=BEA(此处说明应用的为BEA的JDK)(3)之后查找weblgoic运行模式:set PRODUCTION_MODE=默认是开发模式(线程计数默认为15)即为空,在上线时,应将其改为产品模式(线程计数默认为25):set PRODUCTION_MODE=ture(4)然后需修改分配给JVM的内存(默认为96M):因已确定厂商为BEA,运行模式为产品模式,所以找到::beaif "%PRODUCTION_MODE%" == "true" goto bea_prod_modeset JA V A_VM=-jrockitset MEM_ARGS=-Xms1024m -Xmx1024mset JA V A_OPTIONS=%JA V A_OPTIONS% -Xverify:nonegoto continue:bea_prod_modeset JA V A_VM=-jrockitset MEM_ARGS=-Xms1024m -Xmx1024m(此处即为分配给JVM的内存范围)goto continue可根据系统需要,修改分配的内存数注:如为32位的操作系统,则最大支持分配2G内存2.线程池调整:打开Weblogic,在路径:mydomain->服务器->myserver->右键打开“查看执行队列” weblogic.kernel.Default调整如下指标:(1) 线程计数—分配给此队列的线程数,建议值为: 100(2) 线程数增加—在出现溢出时,要添加到队列中的线程数,建议值为: 50(3) 最大线程数—此队列可以拥有的最大线程数。
软件系统运维技术中的监控工具和指标解析
软件系统运维技术中的监控工具和指标解析在软件系统的运维过程中,监控工具和指标的使用是非常重要的。
监控工具可以帮助运维人员实时监控系统的运行状态,及时发现和解决问题;而指标则能够提供系统性能和稳定性的评估,为运维人员优化系统提供依据。
本文将从监控工具和指标两个方面进行解析,帮助读者更好地理解软件系统运维技术中的监控工具和指标的作用和应用。
1. 监控工具1.1 监控工具的定义和作用监控工具是一种软件应用程序,用于实时监测和报告系统的状态和性能。
它可以监控各种指标,如CPU 使用率、内存使用率、网络延迟等,帮助运维人员追踪系统运行状况和发现潜在问题。
监控工具还可以提供警报功能,当系统出现异常情况时,自动发送警报消息给运维人员,以便及时采取措施。
1.2 常见的监控工具在软件系统运维中,有很多监控工具可供选择。
下面列举几种常见的监控工具:1.2.1 NagiosNagios 是一款开源的网络监控工具,支持监控各种网络服务,如HTTP、FTP、SMTP等。
它通过定期发送请求来检测服务的可用性,并生成报告。
Nagios 还支持通过插件来监控自定义指标,如磁盘使用率、进程状态等。
1.2.2 ZabbixZabbix 是一款功能强大的网络监控工具,支持对服务器、网络设备、数据库等进行监控。
它提供了丰富的图形化界面和可定制的仪表盘,可以帮助运维人员实时了解系统的状态和性能。
1.2.3 PrometheusPrometheus 是一款开源的监控工具,专注于时序数据的收集和展示。
它支持多种数据采集方式,如推送和拉取,并提供了灵活的查询语言和可视化界面。
Prometheus 还提供了警报功能,可以在系统状态异常时发送警报消息。
2. 指标解析2.1 指标的定义和分类指标是用来量化和评估软件系统性能的度量标准。
在软件运维中,常用的指标包括响应时间、吞吐量、错误率等。
指标可以根据其度量对象的不同进行分类,如系统指标、应用指标、硬件指标等。
应用层监控指标范文
应用层监控指标范文应用层监控指标(Application layer monitoring metrics)是指用于评估应用程序性能和可靠性的度量标准。
这些指标可以帮助开发人员和运维团队追踪和检测应用程序的运行状况,及时发现潜在的问题并采取相应措施。
下面是一些常见的应用层监控指标:1. 响应时间(Response Time):衡量从用户发出请求到应用程序返回响应所经过的时间。
响应时间的长短与应用程序的性能密切相关,较长的响应时间可能会导致用户体验不佳。
2. 吞吐量(Throughput):表示应用程序在单位时间内能够处理的请求数量。
吞吐量是衡量应用程序处理能力的指标,也可以用来评估系统的负载能力。
3. 错误率(Error Rate):描述应用程序处理请求过程中产生错误的频率。
错误率可以帮助开发人员识别并修复潜在的问题,提高应用程序的稳定性和可靠性。
4. 可用性(Availability):衡量应用程序运行的稳定性和可靠性,即应用程序在一定时间内可正常使用的百分比。
5. 成功率(Success Rate):表示应用程序成功处理请求的比例。
成功率可以用来评估应用程序的功能是否正常,是否达到用户的预期。
6. 延迟(Latency):指数据从发送方到接收方之间的时间间隔。
延迟是应用程序性能的重要指标之一,较高的延迟会影响应用程序的实时性和响应能力。
7. 用户体验(User Experience):综合考虑响应时间、界面友好性、操作流畅性等因素,评估用户在使用应用程序时的感受和满意度。
8. 并发连接数(Concurrent Connections):表示同时与应用程序建立连接的客户端数量。
并发连接数可以用来评估应用程序处理并发请求的能力,也可以用来调整系统资源的分配。
9. 数据传输量(Data Transfer):衡量应用程序在传输数据时的速率和效率。
数据传输量可以帮助评估应用程序在处理大量数据时的性能表现,也可以用来优化数据传输过程。
Weblogic常用监控方法及指标
性能测试工作室,专注于性能测试技术研究(JMSRuntimeJMSServersCurrentCount 返回当前JMS服务的连接数ConnectionsCurrentCount 返回本JMS服务器上当前的连接数JMSServersHighCount 返回自服务器启动后JMS服务的最大连接数ConnectionsHighCount 返回本JMS服务器自上次重置后的最大连接数JVMRuntimeHeapSizeCurrent 返回当前JVM堆中内存数,单位时字节HeapFreeCurrent 返回当前JVM堆中空闲内存数,单位时字节ExecuteQueueRuntimeExecuteThreadCurrentIdleCount 返回队列中当前空闲线程数PendingRequestOldestTime 返回队列中最长的等待时间PendingRequestCurrentCount 返回队列中等待的请求数Queue Length 队列长度JDBCConnectionPoolRuntimeWaitingForConnectionHighCount返回本JDBCConnectionPoolRuntimeMBean 上最大等待连接数WaitingForConnectionCurrentCount 返回当前等待连接的总数MaxCapacity 返回JDBC池的最大能力WaitSecondsHighCount 返回等待连接中的最长时间等待者的秒数ActiveConnectionsCurrentCount 返回当前活动连接总数ActiveConnectionsHighCount 返回本JDBCConnectionPoolRuntimeMBean 上最大活动连接数注:weblogic通常监控JVM和执行队列,JDBC连接池,其中执行队列最关键的指标是Queue Length 队列长度weblogic一般来说监控jvm的使用、执行线程队列情况、和连接池的变化情况,还有一个很重要的检查weblogic的console日志这里经常能反映一些很重要到情况。
JVM常用监控指标解释
JVM常用监控指标解释JVM(Java虚拟机)是Java程序的运行环境,负责将Java程序转化为能够在计算机上运行的机器码。
JVM的监控指标是用来评估和优化Java应用程序的性能的。
下面是一些常用的JVM监控指标的解释:1. 堆内存使用情况:堆是用来存储Java对象的内存区域,监控堆内存使用情况可以帮助我们了解应用程序的内存需求。
堆的使用情况可以划分为两个方面:堆内存的总大小和已使用堆内存的大小。
如果堆内存总大小过小,可能导致OutOfMemory错误;如果已使用堆内存过大,可能导致垃圾回收的频繁发生。
2.垃圾回收情况:垃圾回收是JVM自动管理内存的过程,当对象不再被引用时,JVM会回收这部分内存以供其他对象使用。
垃圾回收的指标包括垃圾回收的次数、垃圾回收的时间、垃圾回收器的类型等。
监控垃圾回收可以帮助我们确定是否存在内存泄漏或垃圾回收频繁的问题。
3.线程数:线程是一种执行代码的执行单元,JVM可以支持并发执行多个线程。
监控线程数可以帮助我们了解应用程序的并发性能。
线程数过高可能会导致系统资源的竞争,线程数过低可能会导致并发执行的效果不佳。
4. 类加载情况:JVM在运行过程中会动态加载Java类。
监控类加载情况可以帮助我们了解应用程序的类加载需求和性能。
类加载的指标包括已加载类的数量、加载类的时间等。
类加载数量过多或加载时间过长可能会导致应用程序启动缓慢或响应时间延迟。
5.CPU使用情况:监控CPU使用情况可以帮助我们了解应用程序的计算资源需求和负载情况。
CPU使用情况包括CPU的使用率、CPU的消耗时间等指标。
高的CPU使用率可能是由于应用程序的计算密集型任务导致的,而低的CPU使用率可能是由于I/O等待导致的。
6.IO等待情况:IO等待是指应用程序在执行过程中等待I/O操作完成的时间。
监控IO等待情况可以帮助我们了解应用程序的IO负载情况。
IO等待的指标包括IO等待的次数、等待的时间等。
高的IO等待次数和时间可能会导致应用程序的响应时间延迟。
weblogic调优参数及监控指标
weblogic调优参数对Weblogic的调优主要从SEVER、ExecuteQueue、JDBC等几个方面的相关参数进行调优:一、SERVER在mydomain->Servers->myserver->Configuration->Tuning->“Enable Native IO”中: 1、Native IOEnabledTRUE,表示该Server使用本地I/O2、SocketReaders设置在执行线程中专用做Socket Readers的百分比3、Maximum Open Sockets最大打开Socket数4、Stuck Thread MaxTime堵塞线程时间,超过这个时间没有返回的执行线程,系统将认为是堵塞线程如果weblogic认为某个队列中的所有的线程全部堵塞的话,weblogic将会增加执行线程的数量。
注意:执行线程的数量一旦增加,目前weblogic不会去减少他,如果增加了一些线程以后再次出现overflow的警告,weblogic会继续增加执行线程的数量,一直到达到上限为止。
5、Stuck Thread Timer Interval系统检查堵塞线程的时间间隔6、Low Memory GC Threshold当可用内存小于该百分比时,垃圾回收启动7、Low Memory Granularity Level当两次检测的可用内存变化超过该百分比时,垃圾回收启动8、Low Memory Sample Size在一次检测中的取样次数9、Low Memory Time Interval检测间隔时间10、Accept Backlog等待队列中最多可以有多少TCP连接等待处理,如果在许多客户端连接被拒绝,而在服务器端没有错误显示,说明该值设得过低。
如果连接时收到connection refused消息,说明应提高该值,每次增加25%二、ExecuteQueue在mydomain->Servers->myserver ->Monitoring->Monitor all Active Queues... ->Configuration->weblogic.kernel.Default->1、ThreadCount服务器初始创建的执行线程的数量,设置原则:增大机器的最大并发线程数使处理器利用率达到最大。
weblogic的使用
weblogic的使用
WebLogic是一种常用的Java应用服务器,它能够提供高度可扩展的企业级应用程序运行环境。
使用WebLogic可以简化应用程序开发、部署和管理过程,提高应用程序的可靠性和性能。
以下是WebLogic 的使用方法:
1. 安装WebLogic服务器:在官方网站下载WebLogic服务器安装包,按照安装向导完成安装过程。
2. 创建WebLogic域:WebLogic域是WebLogic服务器的逻辑管理单元,通过创建域可以管理应用程序、配置服务器等。
使用配置向导创建域。
3. 部署应用程序:将应用程序的WAR或EAR文件部署到WebLogic 服务器中,可以使用WebLogic控制台或命令行工具进行部署。
4. 配置服务器:通过WebLogic控制台或命令行工具可以配置WebLogic服务器,如配置JDBC数据源、安全设置、JMS等。
5. 启动和停止服务器:可以使用WebLogic控制台或命令行工具启动和停止WebLogic服务器。
6. 监控服务器:通过WebLogic控制台可以实时监控WebLogic 服务器的运行状态、应用程序状态、日志等信息。
7. 优化服务器性能:WebLogic服务器提供了多种性能优化选项,如配置缓存、调整线程池大小等。
8. 备份和恢复服务器:通过备份WebLogic域和应用程序,可以实现服务器数据的备份和恢复。
WebLogic的使用需要一定的Java和Web应用程序开发基础,但是通过学习官方文档和示例,可以快速掌握WebLogic的使用方法。
服务器监控指标了解常用的性能指标和监控工具
服务器监控指标了解常用的性能指标和监控工具服务器监控是确保系统运行正常的关键一环。
通过实时监控服务器性能指标,可以及时发现并解决潜在的问题,提高服务器的稳定性和可靠性。
本文将介绍几个常用的服务器性能指标以及用于监控这些性能指标的工具。
一、CPU使用率CPU使用率是衡量服务器负载的重要指标之一。
它表示CPU正在执行指令的时间占总时间的比例。
通常,当CPU使用率超过70%时,就表明服务器正在超负荷运行。
常用的CPU监控工具有:1. top:top是Linux系统中常用的监控工具,它可以实时显示CPU 的使用率、内存使用率、进程信息等。
2. Windows任务管理器:在Windows系统中,任务管理器可以监控系统CPU的使用率,并以图表的形式展示。
二、内存使用率内存使用率是反映服务器内存负载的重要指标。
它表示已用内存占总内存的比例。
当内存使用率过高时,可能会导致服务器响应变慢或出现蓝屏等问题。
常用的内存监控工具有:1. free:free命令可以实时显示系统的内存使用情况,包括已用内存、可用内存、缓存等信息。
2. Performance Monitor(Perfmon):Perfmon是Windows系统自带的监控工具,可以实时监控系统的内存使用情况,并生成详细的报告。
三、磁盘空间使用率磁盘空间使用率是评估服务器存储容量的重要指标。
它表示已用磁盘空间占总磁盘空间的比例。
当磁盘空间使用率接近或超过100%时,可能会导致服务器无法正常写入数据,从而影响系统运行。
常用的磁盘监控工具有:1. df:df命令可以实时显示文件系统的使用情况,包括已用空间、可用空间、挂载点等信息。
2. Windows资源监视器:在Windows系统中,资源监视器可以监控磁盘空间的使用情况,并提供详细的磁盘分析报告。
四、网络流量网络流量是评估服务器网络性能的重要指标。
它表示服务器单位时间内收发的数据量。
通过监控网络流量,可以及时发现网络拥堵、带宽瓶颈等问题。
通过JMX获取weblogic的监控指标
通过JMX获取weblogic的监控指标通过JMX获取weblogic的监控数据,包括JDBC,SESSION,SERVERLET,JVM等信息。
主要⽤到weblogic⾃⼰的t3协议,所以要⽤到weblogic的jar包:wlfullclient.jar和wlclient.jar。
这两个jar包怎么获取我专门在另外⼀篇⽂章中讲。
下⾯贴⼀些获取监控指标的代码,做个备份只⽤吧。
1、对JDBC的监控,只取了最重要的监控指标:package test;import java.io.IOException;import .MalformedURLException;import java.util.Hashtable;import javax.management.MBeanServerConnection;import javax.management.MalformedObjectNameException;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;import javax.naming.Context;public class PrintJdbc {private static MBeanServerConnection connection;private static JMXConnector connector;private static final ObjectName service;static {try {service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean");}catch (MalformedObjectNameException e) {throw new AssertionError(e.getMessage());}}public static void initConnection(String hostname, String portString,String username, String password) throws IOException,MalformedURLException {String protocol = "t3";Integer portInteger = Integer.valueOf(portString);int port = portInteger.intValue();String jndiroot = "/jndi/";String mserver = "weblogic.management.mbeanservers.runtime";JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,port, jndiroot + mserver);Hashtable h = new Hashtable();h.put(Context.SECURITY_PRINCIPAL, username);h.put(Context.SECURITY_CREDENTIALS, password);h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");connector = JMXConnectorFactory.connect(serviceURL, h);connection = connector.getMBeanServerConnection();}public static ObjectName getServerRuntimes() throws Exception {return (ObjectName)connection.getAttribute(service,"ServerRuntime");}public ObjectName getJDBCServer() throws Exception {ObjectName dc = getServerRuntimes();ObjectName jdbcService = (ObjectName)connection.getAttribute(dc,"JDBCServiceRuntime");return jdbcService;}public ObjectName[] getJDBCDataSourceRuntime() throws Exception {ObjectName[] jdbcDataSourceRTMB = (ObjectName[]) connection.getAttribute(getJDBCServer(), "JDBCDataSourceRuntimeMBeans");return jdbcDataSourceRTMB;}public void printJdbc() throws Exception {ObjectName[] objectList = getJDBCDataSourceRuntime();if(objectList != null && objectList.length > 0){for(ObjectName obj : objectList){int connectionsTotalCount = (int) connection.getAttribute(obj, "ConnectionsTotalCount");int activeConnectionsCurrentCount = (int)connection.getAttribute(obj, "ActiveConnectionsCurrentCount");int activeConnectionsAverageCount = (int)connection.getAttribute(obj,"ActiveConnectionsAverageCount");int failuresToReconnectCount = (int)connection.getAttribute(obj, "FailuresToReconnectCount");String name = (String)connection.getAttribute(obj, "Name");int waitingForConnectionCurrentCount = (int)connection.getAttribute(obj, "WaitingForConnectionCurrentCount");long waitingForConnectionFailureTotal = (long)connection.getAttribute(obj, "WaitingForConnectionFailureTotal");int waitSecondsHighCount = (int)connection.getAttribute(obj, "WaitSecondsHighCount");int connectionDelayTime = (int)connection.getAttribute(obj, "ConnectionDelayTime");int activeConnectionsHighCount = (int)connection.getAttribute(obj, "ActiveConnectionsHighCount");int currCapacity = (int)connection.getAttribute(obj, "CurrCapacity");System.out.println("currCapacity==" + currCapacity);System.out.println("activeConnectionsHighCount==" + activeConnectionsHighCount);System.out.println("connectionDelayTime==" + connectionDelayTime);System.out.println("connectionsTotalCount==" + connectionsTotalCount);System.out.println("activeConnectionsCurrentCount==" + activeConnectionsCurrentCount);System.out.println("activeConnectionsAverageCount==" + activeConnectionsAverageCount);System.out.println("failuresToReconnectCount==" + failuresToReconnectCount);System.out.println("name==" + name);System.out.println("waitingForConnectionCurrentCount==" +waitingForConnectionCurrentCount );System.out.println("waitingForConnectionFailureTotal==" + waitingForConnectionFailureTotal);System.out.println("waitSecondsHighCount==" + waitSecondsHighCount);}}}public static void main(String[] args) throws Exception {String hostname = "10.111.131.50";String portString = "7001";String username = "weblogic";String password = "weblogic123";PrintJdbc s = new PrintJdbc();initConnection(hostname, portString, username, password);s.printJdbc();connector.close();}} 2、有关thread的监控:package test;import java.io.IOException;import .MalformedURLException;import java.util.Hashtable;import javax.management.MBeanServerConnection;import javax.management.MalformedObjectNameException;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;import javax.naming.Context;public class PrintThread {private static MBeanServerConnection connection;private static JMXConnector connector;private static final ObjectName service;static {try {service = new ObjectName("com.bea:Name=RuntimeService,Type=weblogic.management.mbeanservers.runtime.RuntimeServiceMBean"); }catch (MalformedObjectNameException e) {throw new AssertionError(e.getMessage());}}public static void initConnection(String hostname, String portString,String username, String password) throws IOException,MalformedURLException {String protocol = "t3";Integer portInteger = Integer.valueOf(portString);int port = portInteger.intValue();String jndiroot = "/jndi/";String mserver = "weblogic.management.mbeanservers.runtime";JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,port, jndiroot + mserver);Hashtable h = new Hashtable();h.put(Context.SECURITY_PRINCIPAL, username);h.put(Context.SECURITY_CREDENTIALS, password);h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");connector = JMXConnectorFactory.connect(serviceURL, h);connection = connector.getMBeanServerConnection();}public static ObjectName getServerRuntimes() throws Exception {return (ObjectName)connection.getAttribute(service,"ServerRuntime");}public void printInfo() throws Exception{ObjectName objThreadPool = null;ObjectName serverRT = getServerRuntimes();objThreadPool = (ObjectName) connection.getAttribute(serverRT, "ThreadPoolRuntime");double throughput = Double.parseDouble(String.valueOf(connection.getAttribute(objThreadPool,"Throughput")));System.out.println("throughput:" + throughput);int executeThreadTotalCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "ExecuteThreadTotalCount"))); System.out.println("executeThreadTotalCount:" + executeThreadTotalCount);int executeThreadIdleCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "ExecuteThreadIdleCount"))); System.out.println("executeThreadIdleCount:" + executeThreadIdleCount);int StandbyThreadCount = Integer.parseInt(String.valueOf(connection.getAttribute(objThreadPool, "StandbyThreadCount")));System.out.println("StandbyThreadCount:" + StandbyThreadCount);long timestamp = System.currentTimeMillis() / 1000;String metricJson = "";String jsonFormat = "{\"name\": \"weblogic_threadpool_metric_demo\", " +"\"command\":\"weblogic_threadpool_metric\"," +"\"type\": \"metric\"," +"\"handlers\": [\"influxdb\"],"+"\"output\": \"%s %.5f %d\\n%s %d %d\\n%s %d %d\\n\"," +"\"status\": 0}";metricJson = String.format(jsonFormat,".weblogic.threadpool.throughput", (double)throughput, timestamp,".weblogic.threadpool.executeThreadTotalCount", (int)executeThreadTotalCount, timestamp,".weblogic.threadpool.executeThreadIdleCount", (int)executeThreadIdleCount, timestamp);System.out.println("metricJson==" + metricJson);}public static void main(String args[]) throws Exception {String hostname = "10.111.131.50";String portString = "7001";String username = "weblogic";String password = "weblogic123";PrintThread s = new PrintThread();initConnection(hostname, portString, username, password);s.printInfo();connector.close();}} 3、有关session的监控:package test;import java.io.IOException;import .MalformedURLException;import java.util.Hashtable;import javax.management.MBeanServerConnection;import javax.management.MalformedObjectNameException;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;import javax.naming.Context;public class PrintServerState {private static MBeanServerConnection connection;private static JMXConnector connector;private static final ObjectName service;static {try {service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean"); }catch (MalformedObjectNameException e) {throw new AssertionError(e.getMessage());}}public static void initConnection(String hostname, String portString,String username, String password) throws IOException,MalformedURLException {String protocol = "t3";Integer portInteger = Integer.valueOf(portString);int port = portInteger.intValue();String jndiroot = "/jndi/";String mserver = "weblogic.management.mbeanservers.domainruntime";JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,port, jndiroot + mserver);Hashtable h = new Hashtable();h.put(Context.SECURITY_PRINCIPAL, username);h.put(Context.SECURITY_CREDENTIALS, password);h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");connector = JMXConnectorFactory.connect(serviceURL, h);connection = connector.getMBeanServerConnection();}public static ObjectName[] getServerRuntimes() throws Exception {return (ObjectName[]) connection.getAttribute(service,"ServerRuntimes");}public static ObjectName[] getApplicationRuntimes(ObjectName serverRuntime) throws Exception {return (ObjectName[])connection.getAttribute(serverRuntime, "ApplicationRuntimes");}public static ObjectName[] getComponentRuntimes(ObjectName componentRutime) throws Exception {return (ObjectName[]) connection.getAttribute(componentRutime, "ComponentRuntimes");}public void printSessionState() throws Exception {ObjectName[] serverRT = getServerRuntimes();int length = (int) serverRT.length;for(int i = 0;i<length;i++){ObjectName[] applicationRT = getApplicationRuntimes(serverRT[i]);int length_app = (int)applicationRT.length;for(int y = 0;y<length_app;y++){String applicationName = (String)connection.getAttribute(applicationRT[y], "ApplicationName");if(applicationName.equals("helloworld")){ObjectName[] componentRuntime = getComponentRuntimes(applicationRT[y]);int length_component = (int)componentRuntime.length;System.out.println("length_component==" + length_component);for(int z = 0;z<length_component;z++){String type = (String)connection.getAttribute(componentRuntime[z], "Type");if(type.equals("WebAppComponentRuntime")){int SessionsOpenedTotalCount = (int)connection.getAttribute(componentRuntime[z], "SessionsOpenedTotalCount");System.out.println("SessionsOpenedTotalCount==" + SessionsOpenedTotalCount);int openSessionsHighCount = (int)connection.getAttribute(componentRuntime[z], "OpenSessionsHighCount");System.out.println("openSessionsHighCount==" + openSessionsHighCount);int openSessionsCurrentCount = (int)connection.getAttribute(componentRuntime[z], "OpenSessionsCurrentCount");System.out.println("openSessionsCurrentCount==" + openSessionsCurrentCount);break;}}break;}}}}public void printNameAndState() throws Exception {ObjectName[] serverRT = getServerRuntimes();System.out.println("got server runtimes");int length = (int) serverRT.length;for (int i = 0; i < length; i++) {String name = (String) connection.getAttribute(serverRT[i],"Name");String state = (String) connection.getAttribute(serverRT[i],"State");long activationTime = (Long)connection.getAttribute(serverRT[i], "ActivationTime");System.out.println("Server name: " + name);System.out.println("Server state:" + state);System.out.println("Server activationTime:" + activationTime);String weblogicVersion = (String) connection.getAttribute(serverRT[i], "WeblogicVersion");System.out.println("Server weblogicVersion:" + weblogicVersion);String weblogicHome = (String) connection.getAttribute(serverRT[i], "WeblogicHome");System.out.println("Server WeblogicHome:" +weblogicHome );}}public static void main(String[] args) throws Exception {String hostname = "10.111.131.50";String portString = "7001";String username = "weblogic";String password = "weblogic123";PrintServerState s = new PrintServerState();initConnection(hostname, portString, username, password);s.printNameAndState();s.printSessionState();connector.close();}} 4、有关serverlet的监控:package test;import java.io.IOException;import .MalformedURLException;import java.util.Hashtable;import javax.management.MBeanServerConnection;import javax.management.MalformedObjectNameException;import javax.management.ObjectName;import javax.management.remote.JMXConnector;import javax.management.remote.JMXConnectorFactory;import javax.management.remote.JMXServiceURL;import javax.naming.Context;public class PrintServerlet {private static MBeanServerConnection connection;private static JMXConnector connector;private static final ObjectName service;private final String applicationName_app="helloworld";private final String serverletName1="index.jsp";private final String serverletName2="helloworld.jsp";static {try {service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean"); }catch (MalformedObjectNameException e) {throw new AssertionError(e.getMessage());}}public static void initConnection(String hostname, String portString,String username, String password) throws IOException,MalformedURLException {String protocol = "t3";Integer portInteger = Integer.valueOf(portString);int port = portInteger.intValue();String jndiroot = "/jndi/";String mserver = "weblogic.management.mbeanservers.domainruntime";JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname,port, jndiroot + mserver);Hashtable h = new Hashtable();h.put(Context.SECURITY_PRINCIPAL, username);h.put(Context.SECURITY_CREDENTIALS, password);h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");connector = JMXConnectorFactory.connect(serviceURL, h);connection = connector.getMBeanServerConnection();}public static ObjectName[] getServerRuntimes() throws Exception {return (ObjectName[]) connection.getAttribute(service,"ServerRuntimes");}public String getApplicationName(ObjectName objectName) throws Exception {return (String)connection.getAttribute(objectName, "Name");}public String getServletName(ObjectName objectName) throws Exception {return (String)connection.getAttribute(objectName,"Name");}public void getServletData() throws Exception {ObjectName[] serverRT = getServerRuntimes();int length = (int) serverRT.length;for (int i = 0; i < length; i++) {ObjectName[] appRT =(ObjectName[]) connection.getAttribute(serverRT[i],"ApplicationRuntimes");int appLength = (int) appRT.length;for (int x = 0; x < appLength; x++) {String applicationName = getApplicationName(appRT[x]);if(applicationName_app.equals(applicationName)){System.out.println("Application name: " + applicationName);ObjectName[] compRT =(ObjectName[]) connection.getAttribute(appRT[x],"ComponentRuntimes");int compLength = (int) compRT.length;for (int y = 0; y < compLength; y++) {printValue("Component name",(String)connection.getAttribute(compRT[y], "Name"));String componentType =(String) connection.getAttribute(compRT[y], "Type");System.out.println(componentType.toString());if (componentType.toString().equals("WebAppComponentRuntime")){ObjectName[] servletRTs = (ObjectName[])connection.getAttribute(compRT[y], "Servlets");int servletLength = (int) servletRTs.length;for (int z = 0; z < servletLength; z++) {String servletName = getServletName(servletRTs[z]);if (servletName.contains(serverletName1) || servletName.contains(serverletName2)){ printValue("Servlet name",servletName);printValue("Servlet context path" ,(String)connection.getAttribute(servletRTs[z],"ContextPath"));printValue("Invocation Total Count" ,(Object)connection.getAttribute(servletRTs[z],"InvocationTotalCount"));printValue("ExecutionTimeHigh",(Object)connection.getAttribute(servletRTs[z],"ExecutionTimeHigh"));printValue("ExecutionTimeTotal",(Object)connection.getAttribute(servletRTs[z],"ExecutionTimeTotal"));printValue("ExecutionTimeAverage",(Object)connection.getAttribute(servletRTs[z], "ExecutionTimeAverage"));}}}}}}}}private void printValue(String key,Object value){System.out.println(" " + key + " : " + value);}public static void main(String[] args) throws Exception {String hostname = "10.111.131.50";String portString = "7001";String username = "weblogic";String password = "weblogic123";PrintServerlet s = new PrintServerlet();initConnection(hostname, portString, username, password); s.getServletData();connector.close();}}。
Wls_weblogic管理监控
中间件Weblogic 管理监控注意事项Weblogic 监控的目的:发现系统屮的隐患及系统运行是否稳定。
主要从以下几方面进行检查:一、操作系统:检査系统CPU 、内存等使用是否异常。
如在负载不大的悄况下,卬U 是否一 直居高不下,内存占用是否一直很大。
可以通过top(topas)、vmstat 、free -m 、 ps 等命令査看。
网络:1、 位于一个domain 中各个服务器是否能够联通。
2、 w eblogic 服务器与数据库服务器的链接是否畅通。
Weblogic检査是否对jvm 进行了优化,如最大堆内存、最小堆内存,以及gc 算法是 否合理。
主要是通过weblogic 控制台,査看jvm 的空闲内存的变化情况,每次gc 的 回收情况。
特别是可以在控制台强制垃圾回收,看看回收的内存是否太小。
如 果回收的内存太小,说明可能存在内存益处的隐患。
3、检查线程数通过weblogic 控制台可以査看线程数的统计信息oweblogic9及以上的线程 塔自优化的。
但应该査看系统的线程最大数是否过大,如果过大,就要注意系 统为什么会有这么大的压力。
如下为示例截图itiread l»(wl(rthnrpd - More rolimrs tJefet)Showing l - 1 of 1 PreviXB问tActive Execute Threads :在活动的线程池内处理请求的线程个数 Execute Thread Total Count :线程池内线程的总数Execute Thread Idle Count ;池内的空闲线程数。
它不包含stuck 和standby 的线程数。
它是指等待接收新请求到来并处理的线程个数queue length :请求队列的长度,及队列中等待线程处理的请求的个数hogging thread count :线程处理一个请求时间超过一定值被视为hogging 状态,如果继续处理请求超过一定时间将被视为stuck,或处理完请求后被 放回线程池1、 2、检查gc 是否正常standby thread count :统计在standby (备用)线程池内的线程数o这些线程不需要处理当前请求被放入standby池内,当活动的线程池内需要更多线程时,这些线程将被激活。
weblogic面试的知识点
WebLogic面试的知识点1. 介绍WebLogicWebLogic是一款由Oracle开发的Java EE应用服务器,它提供了企业级的可靠性、可扩展性和高性能。
WebLogic支持多种开发技术和标准,包括Java EE、SOA、Web 2.0等,广泛应用于企业级应用的开发和部署。
2. WebLogic的特性•高可用性和可靠性:WebLogic提供了分布式架构和集群支持,能够实现高可用性和可靠性的应用部署。
•可扩展性:WebLogic支持水平和垂直扩展,可以根据需要增加服务器节点或增强服务器的资源。
•高性能:WebLogic使用了高效的JVM和优化的网络通信,能够提供卓越的性能表现。
•安全性:WebLogic提供了强大的安全功能,包括身份认证、权限控制和数据加密等。
•容器管理:WebLogic提供了对Java EE容器的完整管理和监控,方便开发人员进行应用程序的开发和调试。
•集成能力:WebLogic支持与其他系统和应用的无缝集成,包括数据库、消息队列和企业服务总线等。
3. WebLogic的架构WebLogic的架构包括以下几个关键组件: - 域(Domain):一个域是WebLogic 的基本管理单位,它包含了一组关联的服务器和资源。
每个域都有一个域配置文件,用于定义域中的服务器、集群、数据源等。
- 服务器(Server):WebLogic服务器是WebLogic域的基本运行单元,可以独立工作,也可以作为集群的一部分。
服务器可以分为管理员服务器和托管服务器两种类型。
- 集群(Cluster):集群是一组WebLogic服务器的逻辑组合,通过负载均衡和故障恢复实现高可用性和可伸缩性。
集群中的服务器共享会话数据和应用程序状态。
- 数据源(Data Source):数据源用于管理数据库连接池,在应用程序中使用JNDI查找数据源,可以提高数据库访问的性能和效率。
- 部署(Deployment):部署是指将应用程序或模块文件发布到WebLogic服务器上的过程。
WebLogic的日常操作和监控
WebLogic Server启动验证 启动验证
WebLogic的其他启动方式 的其他启动方式
• 如果想从WebLogic的console启动Managed Server, 必须配置NodeManager进程及Machine组件,并将需 要在console中启动的Managed Server target到对应的 Machine中 • 一般在3台及3台主机组成的Domain中,尽量少用 Machine配置,减少配置层次,有利于提高系统的稳定 性。
• 管理和监控接口丰富
• MBEAN • SNMP
• 与第三方实现嵌入
• Wily • Load Runner
Weblogic console简介 简介
• 基于主控Server的web应用的监控工具 • 具有良好交互性的图形化监控配置工具 • 具有强大功能的管理配置监控工具
• • • • • • 部署、配置应用和Server 停止和启动Servers 监控Domain、Server安全及性能 监控应用性能 观察Domain、Server日志 其他服务和组建的监控管理功能(监控JDBC Connection pool ,JTA,JMS等)
当前线程情况
数据库连接池使用情况
数据库连接池使用情况
• Active Connections Average Count
应用同一时刻使用的数据库连接平均数
• Active Connections Current Count
当前应用正在使用的数据库连接数
• Active Connections High Count
在这条日志信息中,它们的格式是: 时间戳,错误级别,子系统 ,机器名,Server名称,线程号,用户号,事务号,.. 信息号 ,文本信息。 如果这信息包括跟踪堆栈的信息,这些信息将紧跟在这条信息 后面。
监控参数一览
常用监测参数一览一、windows操作系统监控参数一览:二、Unix操作系统监控参数一览:三、Oracle数据库监控参数一览:四、Informix数据库监控参数一览:五、DB2数据库监控参数一览:六、WebLogic中间件监控参数一览:七、WebSphere中间件监控参数一览:八、Tuxedo中间件监控参数一览:九、MQ Control中间件监控参数一览:十、Lotus Notes中间件监控参数一览:十一、存储监控指标HP STORAGE ESSENTIALS 可以很高的支持Oracle, MS SQL, Sybase和MS Exchange Server的监控, 例如在监控Oracle时,可以给出Oracle的14项参数实现性能的实时监控或历史性能回放。
并可以给出这些应用对硬件,包括主机,HBA卡片,交换机和磁盘阵列的详细依赖关系.可以实时监控存储设备的性能有:∙磁盘阵列端口传送数据量- Storage System Port Bytes Transmitted (MB/sec)∙磁盘阵列端口接收数据量- Storage System Port Bytes Received (MB/sec)∙磁盘阵列联接失败频率- Storage System Link Failures (Failures/sec)∙磁盘阵列循环冗余码校验错误频率- Storage System CRC Errors (Errors/sec)同时也提供光纤交换机端口和HBA卡端口的性能监控:∙光纤交换机端口和HBA卡端口传送数据量- FC Port Bytes Transmitted (MB/sec)∙光纤交换机端口和HBA卡端口接收数据量– FC Port Bytes Received (MB/sec)∙光纤交换机端口和HBA卡端口联接失败频率– FC Port Link Failures (Failures/sec) ∙光纤交换机端口和HBA卡端口循环冗余码校验错误频率– FC Port CRC Errors (Errors/sec)可以提供的存储报表包括:∙存储资产汇总∙存储可用卷报表∙存储依赖关系报表∙存储详细报表∙存储事件报表∙LUN Mount报表∙存储系统磁盘阵列过载利用率报表∙存储系统磁盘阵列利用率报表∙存储系统硬盘Map报表∙利用率报表报表的格式包括PDF,XML,HTML和EXCEL四种。
Weblogic监控jndi泄露连接的方法
Weblogic监控jndi泄露连接的方法1说明如果后台出现“No resources currently available in pool iscjndi to allocate to applications”类似这个错误,说明weblogic 的数据库连接池满了:可以考虑通过此方法排查一下具体是程序中的什么方法导致。
查看数据源监控页面,如果“当前活动连接数”超过系统配置的最大数字(系统默认是15,优化之后为150),就会出现以上错误:最大连接数配置:2配置一:设置“非活动连接超时”参数设置后连接在指定时间内(单位:秒)没有活动的话,WebLogic会将之释放并回收到连接池。
设置步骤:“数据源-(数据源名称)-连接池-非活动连接超时”1、点击“数据源-(数据源名称)”2、选择“连接池”3、展开高级内容4、找到高级中“非活动连接超时”参数,设置为1004、保存配置3配置二:开启weblogic数据库连接泄漏日志设置步骤:“数据源-(数据源名称)-诊断-概要文件连接使用情况”1、点击“数据源-(数据源名称)”2、点击“诊断”3、选中“概要文件连接情况”、“概要文件连接泄露”:4、保存配置4查看日志在系统中操作,重现一下相关问题,同时监控weblogic日志,日志中会出现类似以下格式的异常信息,提供研发找到具体class进一步排查泄露原因。
注意:操作之后等待一段时间,weblogic自动回收连接时才产生日志,不是操作的时候立即产生。
日志文件位置:/app/weblogic/user_projects/domains/【domain名称】/servers/【server名称】/logs/【server名称】.log比如总部测试环境的日志文件位置:at mon.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:373)at mon.resourcepool.ResourcePoolImpl.reserveResource(ResourcePoolImpl.java:339)at mon.internal.ConnectionPool.reserve(ConnectionPool.java:469)at mon.internal.ConnectionPool.reserve(ConnectionPool.java:363)at mon.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:125)at mon.internal.ConnectionPoolManager.reserve(ConnectionPoolManager.java:158)at weblogic.jdbc.pool.Driver.connect(Driver.java:132)at weblogic.jdbc.jts.Driver.getNonTxConnection(Driver.java:658)at weblogic.jdbc.jts.Driver.connect(Driver.java:127)at mon.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:548)at mon.internal.RmiDataSource.getConnection(RmiDataSource.java:513)at mon.internal.RmiDataSource.getConnection(RmiDataSource.java:506)at org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider.getConnection(LocalDataSourceConnectionProvider.java:81) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:116)at org.hibernate.jdbc.AbstractBatcher.prepareStatement(AbstractBatcher.java:109)at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:202)at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1310)at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:396)at erPostReleDao.updateUserBizRoleNum(UserPostReleDao.java:360)at erPostReleService.saveUserPost(UserPostReleService.java:77)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController.saveUserPost(BusinessDutyController.java:314)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController$$FastClassByCGLIB$$f3bff139.invoke(<generated>)at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:80)at com.sgcc.isc.authorize.sync.aop.ServerAop.aroundMethod(ServerAop.java:138)at sun.reflect.GeneratedMethodAccessor639.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:597)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)at com.sgcc.isc.authorize.businessduty.action.BusinessDutyController$$EnhancerByCGLIB$$94f3347a.saveUserPost(<generated>)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)at ng.reflect.Method.invoke(Method.java:597)at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at mon.filter.AuthorFilter.doFilter(AuthorFilter.java:57)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at mon.filter.CurrentThreadContextInitFilter.doFilter(CurrentThreadContextInitFilter.java:43)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748)at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1491)at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)。
weblogic运维时经常遇到的问题和常用的配置
weblogic运维时经常遇到的问题和常⽤的配置希望这篇能把weblogic运维时经常遇到的问题、常⽤的配置汇总到⼀起。
1、配置jvm参数:⼀般在domain启动过程中会看到以下启动的⽇志信息,如下图所⽰:图中红⾊⽅框部分为启动weblogic domain的命令。
其中包括了jvm参数以及classpath信息。
【注意】java -client是由于之前建⽴的domain是开发模式的。
⽣产模式的话,这⾥执⾏的是java -server。
⾄于-client与-server的区别,⼤家去google下吧,这⾥不介绍了。
那如何修改这个配置呢?找到setDomainEnv.cmd⽂件(linux下⾯就是setDomainEnv.sh了),位置为:weblogic11\user_projects\domains\example\bin\setDomainEnv.cmd修改⽂件中的MEM_ARGS部分,相关参数配置如下:Java代码1. call "%WL_HOME%\common\bin\commEnv.cmd"2.3. set WLS_HOME=%WL_HOME%\server4.5. if "%JAVA_VENDOR%"=="Sun" (6. set WLS_MEM_ARGS_64BIT=-Xms256m -Xmx512m7. set WLS_MEM_ARGS_32BIT=-Xms256m -Xmx512m8. ) else (9. set WLS_MEM_ARGS_64BIT=-Xms512m -Xmx512m10. set WLS_MEM_ARGS_32BIT=-Xms512m -Xmx512m11. )12.13. set MEM_ARGS_64BIT=%WLS_MEM_ARGS_64BIT%14.15. set MEM_ARGS_32BIT=%WLS_MEM_ARGS_32BIT%16.17. if "%JAVA_USE_64BIT%"=="true" (18. set MEM_ARGS=%MEM_ARGS_64BIT%19. ) else (20. set MEM_ARGS=%MEM_ARGS_32BIT%21. )22.23. set MEM_PERM_SIZE_64BIT=-XX:PermSize=128m24.25. set MEM_PERM_SIZE_32BIT=-XX:PermSize=48m26.27. if "%JAVA_USE_64BIT%"=="true" (28. set MEM_PERM_SIZE=%MEM_PERM_SIZE_64BIT%29. ) else (30. set MEM_PERM_SIZE=%MEM_PERM_SIZE_32BIT%31. )32.33. set MEM_MAX_PERM_SIZE_64BIT=-XX:MaxPermSize=256m34.35. set MEM_MAX_PERM_SIZE_32BIT=-XX:MaxPermSize=128m36.37. if "%JAVA_USE_64BIT%"=="true" (38. set MEM_MAX_PERM_SIZE=%MEM_MAX_PERM_SIZE_64BIT%39. ) else (40. set MEM_MAX_PERM_SIZE=%MEM_MAX_PERM_SIZE_32BIT%41. )42. if "%JAVA_VENDOR%"=="Sun" (43. if "%PRODUCTION_MODE%"=="" (44. set MEM_DEV_ARGS=-XX:CompileThreshold=8000 %MEM_PERM_SIZE%45. )46. )47.48. @REM Had to have a separate test here BECAUSE of immediate variable expansion on windows49.50. if "%JAVA_VENDOR%"=="Sun" (51. set MEM_ARGS=%MEM_ARGS% %MEM_DEV_ARGS% %MEM_MAX_PERM_SIZE%52. )53.54. if "%JAVA_VENDOR%"=="HP" (55. set MEM_ARGS=%MEM_ARGS% %MEM_MAX_PERM_SIZE%56. )57.58. if "%JAVA_VENDOR%"=="Apple" (59. set MEM_ARGS=%MEM_ARGS% %MEM_MAX_PERM_SIZE%60. )61.62. @REM IF USER_MEM_ARGS the environment variable is set, use it to override ALL MEM_ARGS values63.64. if NOT "%USER_MEM_ARGS%"=="" (65. set MEM_ARGS=%USER_MEM_ARGS%66. )主要就是修改-Xms、-Xmx、-XX:PermSize、-XX:MaxPermSize的参数(视具体硬件、JVM负载情况进⾏修改)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
性能测试工作室,专注于性能测试技术研究()Weblogic常用监控指标JMSRuntimeJMSServersCurrentCount 返回当前JMS服务的连接数ConnectionsCurrentCount 返回本JMS服务器上当前的连接数JMSServersHighCount 返回自服务器启动后JMS服务的最大连接数ConnectionsHighCount 返回本JMS服务器自上次重置后的最大连接数JVMRuntimeHeapSizeCurrent 返回当前JVM堆中内存数,单位时字节HeapFreeCurrent 返回当前JVM堆中空闲内存数,单位时字节ExecuteQueueRuntimeExecuteThreadCurrentIdleCount 返回队列中当前空闲线程数PendingRequestOldestTime 返回队列中最长的等待时间PendingRequestCurrentCount 返回队列中等待的请求数Queue Length 队列长度JDBCConnectionPoolRuntimeWaitingForConnectionHighCount返回本JDBCConnectionPoolRuntimeMBean 上最大等待连接数WaitingForConnectionCurrentCount 返回当前等待连接的总数MaxCapacity 返回JDBC池的最大能力WaitSecondsHighCount 返回等待连接中的最长时间等待者的秒数ActiveConnectionsCurrentCount 返回当前活动连接总数ActiveConnectionsHighCount 返回本JDBCConnectionPoolRuntimeMBean 上最大活动连接数注:weblogic通常监控JVM和执行队列,JDBC连接池,其中执行队列最关键的指标是Queue Length 队列长度weblogic一般来说监控jvm的使用、执行线程队列情况、和连接池的变化情况,还有一个很重要的检查weblogic的console日志这里经常能反映一些很重要到情况。
监控weblogic的jvm有一个很好的自带工具,由于weblogic使用自己的jroc kit作为jvm,自带一个工具通过在启动参数加-Xmanagement,然后进入到jroc kit的bin路径下命令行console启动,可以看到更加细微的jvm的情况,对jv m的调优很好。
这里还是建议一定对jvm的工作原理做一个深入的理解会对你很有帮助,同时了解不同的jrockit的jvm垃圾回收器各自的特点,这些都对weblogic的调优大有帮助。
小结BEA WebLogic Server 8.1监视的核心在于Java Management Extensions(JMX)规范。
简单的理解,WebLogic对每个可以进行管理的资源通过一个或者多个管理Bean来管理,这就是Mbeans,然后JMX代理直接控制可管理资源,提供了管理对象的注册,并将此对象公开给兼容JMX的应用程序。
我们主要关注两种Mbeans:配置Mbeans 与运行时Mbeans.配置配置Mbeans 用于域针对其资源的配置信息。
配置Mbeans被进一步分类为:1)管理(Admi nistration):配置Mbeans位于域的管理服务器上。
要修改域的配置,需要在管理服务器上修改适当的管理Mbeans。
2)本地配置(Local Configuration):管理Mbeans的本地复制,个别服务器用于提升性能。
本地配置Mbeans是不能修改的。
运行时Mbeans 则提供了诸如JVM 内存资源使用状况以及WebLogic 服务器状态等资源的信息快照。
当域中的某一资源实例化时(例如Web应用),相应地就会创建一个Mbeans 实例来收集该资源的信息。
在WebLogic Server 8.1的监视方式中,主要有四种:通过管理控制台访问监控页面时。
实质是通过JMX代理对Mbeans执行Get操作来获得该资源的当前属性值。
通过命令行工具来获取监控信息。
实质是通过Java命令直接操纵底层Mbeans。
编程实现自定义的监视。
实质是在程序中调用相应的Mbeans来获取信息。
使用第三方软件监视。
下面详细介绍这几种监视方式。
(1)管理控制台监视通过管理控制台,可以对WebLogic的性能以及运行状况,发布的应用,资源等进行监视。
下面列举部分用来管理WebLogic的监视页面来简要说明管理控制台所提供的监视功能。
服务器->监视->常规,该页面显示了服务器的当前状态。
高级选项里还显示了WebLogic 版本,JDK的提供商,版本,操作系统的版本等信息。
最后从这个页面,还可以访问JNDI 树、监视活动队列、监视连接以及监视活动套接口。
服务器->监视->常规->监视所有活动队列,执行队列的配置对WebLogic 性能是很重要的,根据经验值,一颗CPU可以配置25-30之间的执行线程。
从该页面可以查看到已经分配给队列的执行线程数,当前空闲的线程数,最长等待请求放入队列中的时间,队列中的等待请求数,此队列已处理的请求数等重要信息,这些信息可以作为判断是否需要对执行线程调整的参考。
服务器->监视->性能,从该页面中可以了解WebLogic 服务器性能的基本情况,包括空闲线程数,等待处理的请求数,JVM的内存堆使用状态等。
部署->应用程序->EAR模块->监视,当应用程序部署运行后,可以监视单一组件,如EJB,Se rvlet等。
如上图所示,该页面提供了发布的应用程序中EJB的统计信息,可以有效了解EJB处理请求的效率。
服务->JDBC->连接缓冲池->监视,在控制台中可以监视资源的运行的状态,如JDBC等。
该页面提供了JDBC连接缓冲池的统计信息,包括连接缓冲池可包含的最大数据库连接数,当前使用的物理数据库连接数,当前使用的物理数据库连接数等信息。
值得一提的是在控制台监视页面里可能会有一个自定义此视图的选项,使用自定义视图后可以使用自定义的视图,可以包含个人关注的信息,而且可以监视更多的信息。
如上图所示,该视图是自定义后的JDBC连接缓冲池监视页面。
控制台上其它的监视页面就不一一列举了,所有的监视页面参考:/wls/docs81/adminguide/monitoring.html#1039671(2)运用命令行工具监视命令行工具可以使用特殊命令(GET、SET、CREATE、INVOKE、DELETE 和QUERY)直接操纵底层JMX 基础结构。
这使命令行工具可以访问管理控制台所有可用的功能,甚至还为访问某些功能提供了更灵活的方法。
具体运用过程是使用Java命令,调用weblogic.Admin这个java类。
在运用该工具时,需要设定环境变量,指定java命令路径及weblogic包的类路径。
使用weblogic.Admin工具的语法如下:java weblogic.Admin [ [-url | -adminurl] [protocol://] listen-address:port] -username user name [-password password] COMMAND-NAME arguments在上面的命令语法中,username和password表示用户名和密码,url表示运行命令的服务器实例的监听地址和监听端口,adminurl表示管理服务器可以检索域中任何服务器实例的本地配置MBean 或运行时MBean,COMMAND-NAME表示具体执行的特殊命令(GET、SET、CR EATE、INVOKE、DELETE 和QUERY),arguments表示命令的参数。
实际运用的一条命令如下:java weblogic.Admin -username weblogic -password weblogic -url localhost:7001 GET -pretty -type JVMRuntime需要留意的是最后的命令参数–type,指定了想获得信息的资源(如果是某个具体的Mbean,使用-mbean 参数,-type是所指定类型的实例的所有MBean 进行操作),该参数的获取规则是:在WebLogic Server 8.1 API Reference查找MBean 的接口类,并从类名中删除MBean后缀。
对于为weblogic.management.runtime.JDBCConnectionPoolRuntimeMBean 的实例的MBean,使用JDBCConnectionPoolRuntime。
对于本地配置MBean,将Config 追加到名称中。
例如,对于为weblogic.management.configuration.JDBCConnectionPoolMBean 接口类的实例的本地配置MBean,使用JDBCConnectionPoolConfig。
对于对应的管理MBean实例,使用JDBCConnectionPool。
具体的命令参考请见:/wls/docs81/admin_ref/cli.html上面的图示演示了从javadoc中获取type参数,最后获取相应监视信息的过程(3)编程Mbean自定义监视Mbeans实质上是一个java类,那么肯定可以编程使用,于是就可以编程实现自定义监视。
MBeanHome home = (MBeanHome) newInitialContext().lookup(MBeanHome.LOCAL_JNDI_NAME);Set pools = home.getMBeansByType("JDBCConnectionPool");上面的代码片段是对于JDBC连接缓冲池的配置mbean的操纵的核心部分。
得到该mbean 实例后可以得到各种weblogic能够提供的关于JDBC连接缓冲池配置信息,实现自定义监视。
(4)使用第三方工具监视BEA WebLogic Server作为一种广泛运用的Java应用服务器,有大量第三方软件可以运用,包括HP-Mercury LoadRunner,QUEST Spotlight for WebLogic Server,Wily's Introscope for WebLogic等,详细的使用方法见其产品文档,在此不再累述。
----------- 软件性能测试工作室:提供性能测试咨询、培训和项目指导(QQ: 2225045276 E-Mail: AutomationQA@)评论#1楼2012-06-18 10:56 liubang推荐hyperic hq和Jennifer软件。