背景

weblogic可以通过console查看数据源运行时统计信息,如当前活动数,最大容量,最小容量等,如果Server数量庞大或者需要做数据源统计监控功能,那么需要通过程序定时获取数据源运行时信息,有两个方案可以获取到数据源运行时信息。

  • 通过JMX获取weblogic运行时MBean信息,从MBean中获取数据源运行时信息。
  • 通过jython脚本获取数据源运行时信息,这也是本文要介绍的方法。

console上查看数据源运行时信息

wlst 脚本

基本思路就是通过连接服务器获取数据源运行时信息,通过csv格式输出到文件里,csv文件可以通过excel打开做统计分析,也可以将csv文件上传到服务器通过第三方程序进行统计分析。

import sys
url=sys.argv[1]
username=sys.argv[2]
password=sys.argv[3]
connect(username,password,'t3://'+url)
file=open("datasource.csv",'a')
file.write("machine,server,Name,ActiveConnectionsAverageCount,ActiveConnectionsCurrentCount,ActiveConnectionsHighCount,ConnectionDelayTime,ConnectionsTotalCount,CurrCapacity,CurrCapacityHighCount,DeploymentState,FailedReserveRequestCount,FailuresToReconnectCount,HighestNumAvailable,HighestNumUnavailable,LeakedConnectionCount,NumAvailable,NumUnavailable,PrepStmtCacheAccessCount,PrepStmtCacheAddCount,PrepStmtCacheCurrentSize,PrepStmtCacheDeleteCount,PrepStmtCacheHitCount,PrepStmtCacheMissCount,Properties,ReserveRequestCount,State,WaitingForConnectionCurrentCount,WaitingForConnectionFailureTotal,WaitingForConnectionHighCount,WaitingForConnectionSuccessTotal,WaitingForConnectionTotal,WaitSecondsHighCount\n")
allServers=domainRuntimeService.getServerRuntimes();
if (len(allServers) > 0):
  for tempServer in allServers:
    jdbcServiceRT = tempServer.getJDBCServiceRuntime();
    dataSources = jdbcServiceRT.getJDBCDataSourceRuntimeMBeans();
    if (len(dataSources) > 0):
        for dataSource in dataSources:
            print "Server:" , tempServer
            print "Datasource:" , dataSource.getName()
            print "ActiveCount" , dataSource.getActiveConnectionsCurrentCount()
            file.write(url+",")
            file.write(str(tempServer.getName())+",")
            file.write(str(dataSource.getName())+",")
            file.write(str(dataSource.getActiveConnectionsAverageCount())+",")
            file.write(str(dataSource.getActiveConnectionsCurrentCount())+",")
            file.write(str(dataSource.getActiveConnectionsHighCount())+",")
            file.write(str(dataSource.getConnectionDelayTime())+",")
            file.write(str(dataSource.getConnectionsTotalCount())+",")
            file.write(str(dataSource.getCurrCapacity())+",")
            file.write(str(dataSource.getCurrCapacityHighCount())+",")
            file.write(str(dataSource.getDeploymentState())+",")
            file.write(str(dataSource.getFailedReserveRequestCount())+",")
            file.write(str(dataSource.getFailuresToReconnectCount())+",")
            file.write(str(dataSource.getHighestNumAvailable())+",")
            file.write(str(dataSource.getHighestNumUnavailable())+",")
            file.write(str(dataSource.getLeakedConnectionCount())+",")
            file.write(str(dataSource.getNumAvailable())+",")
            file.write(str(dataSource.getNumUnavailable())+",")
            file.write(str(dataSource.getPrepStmtCacheAccessCount())+",")
            file.write(str(dataSource.getPrepStmtCacheAddCount())+",")
            file.write(str(dataSource.getPrepStmtCacheCurrentSize())+",")
            file.write(str(dataSource.getPrepStmtCacheDeleteCount())+",")
            file.write(str(dataSource.getPrepStmtCacheHitCount())+",")
            file.write(str(dataSource.getPrepStmtCacheMissCount())+",")
            file.write(str(dataSource.getProperties())+",")
            file.write(str(dataSource.getReserveRequestCount())+",")
            file.write(str(dataSource.getState())+",")
            file.write(str(dataSource.getWaitingForConnectionCurrentCount())+",")
            file.write(str(dataSource.getWaitingForConnectionFailureTotal())+",")
            file.write(str(dataSource.getWaitingForConnectionHighCount())+",")
            file.write(str(dataSource.getWaitingForConnectionSuccessTotal())+",")
            file.write(str(dataSource.getWaitingForConnectionTotal())+",")
            file.write(str(dataSource.getWaitSecondsHighCount()))
            file.write("\n")

相关属性介绍

名称 说明
名称 此配置的名称。WebLogic Server 使用 MBean 来实施并保存配置。
MBean 属性:
JDBCDataSourceRuntimeMBean.Name
服务器 部署此数据源的服务器。
活动连接平均计数 此数据源实例中的平均活动连接数。
活动连接是指应用程序使用的连接。仅当已将资源配置为允许收缩时,此值才有效。
MBean 属性:
JDBCDataSourceRuntimeMBean.ActiveConnectionsAverageCount
当前活动连接计数 当前正在由应用程序使用的连接数。
MBean 属性:
JDBCDataSourceRuntimeMBean.ActiveConnectionsCurrentCount
最大活动连接计数 实例化数据源以来数据源此实例中的活动数据库连接的最大数量。
活动连接是指应用程序使用的连接。
MBean 属性:
JDBCDataSourceRuntimeMBean.ActiveConnectionsHighCount
连接延迟时间 创建到数据库的物理连接所花费的平均时间 (毫秒)。
使用所有连接时间的总和除以总连接数来计算该值。
MBean 属性:
JDBCDataSourceRuntimeMBean.ConnectionDelayTime
连接总数 自部署数据源以来在其中累积创建的数据库连接的总数。
MBean 属性:
JDBCDataSourceRuntimeMBean.ConnectionsTotalCount
当前容量 当前数据源连接池中的 JDBC 连接的计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.CurrCapacity
最大当前容量计数 自部署数据源以来数据源的此实例中可用或正在使用 (当前容量) 的数据库连接的最大数量。
MBean 属性:
JDBCDataSourceRuntimeMBean.CurrCapacityHighCount
已启用 指示数据源是处于启用还是禁用状态:

如果已启用数据源。

如果已禁用数据源。
MBean 属性:
JDBCDataSourceRuntimeMBean.Enabled
失败的保留请求计数 无法完成的从此数据源发出的连接请求的累积动态计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.FailedReserveRequestCount
重新连接失败计数 数据源尝试刷新数据库连接并失败的次数。
如果数据库不可用或到数据库的网络连接中断,连接就会失败。
MBean 属性:
JDBCDataSourceRuntimeMBean.FailuresToReconnectCount
最大可用数量 部署数据源以来,任意时刻此数据源实例中的空闲并可供应用程序使用的数据库连接的最大数量。
MBean 属性:
JDBCDataSourceRuntimeMBean.HighestNumAvailable
泄漏连接计数 泄漏连接数。泄漏连接是指在数据源中保留但在调用 close() 时未返回给数据源的连接。
MBean 属性:
JDBCDataSourceRuntimeMBean.LeakedConnectionCount
可用数量 此数据源实例中当前空闲并可供应用程序使用的数据库连接数。
MBean 属性:
JDBCDataSourceRuntimeMBean.NumAvailable
不可用数量 当前由应用程序使用的连接数,或在此数据源实例中测试的连接数。
MBean 属性:
JDBCDataSourceRuntimeMBean.NumUnavailable
预定义语句高速缓存访问计数 访问语句高速缓存的次数的累积动态计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.PrepStmtCacheAccessCount
预定义语句高速缓存添加计数 添加到语句高速缓存的语句的累积动态计数。
连接池中的每个连接都有其自己的语句高速缓存。此数字是添加到连接池中所有连接的高速缓存的语句数之和。
MBean 属性:
JDBCDataSourceRuntimeMBean.PrepStmtCacheAddCount
预定义语句高速缓存当前大小 当前高速缓存在语句高速缓存中的预定义语句和可调用语句的数量。
连接池中的每个连接都有其自己的语句高速缓存。此数字是连接池中所有连接的高速缓存的语句数之和。
MBean 属性:
JDBCDataSourceRuntimeMBean.PrepStmtCacheCurrentSize
预定义语句高速缓存删除计数 从高速缓存丢弃的语句的累积动态计数。
连接池中的每个连接都有其自己的语句高速缓存。此数字是从连接池中所有连接的高速缓存丢弃的语句数之和。
MBean 属性:
JDBCDataSourceRuntimeMBean.PrepStmtCacheDeleteCount
预定义语句高速缓存命中计数 高速缓存中的语句使用次数的累积动态计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.PrepStmtCacheHitCount
预定义语句高速缓存未命中计数 无法使用高速缓存中的语句满足语句请求的次数。
MBean 属性:
JDBCDataSourceRuntimeMBean.PrepStmtCacheMissCount
保留请求计数 从此数据源发出的连接请求的累积动态计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.ReserveRequestCount
状态 数据源的当前状态。
可能的状态有:
正在运行
- 数据源已启用 (已部署并且未挂起)。这是数据源的正常状态。此状态包括以下情形:数据库服务器不可用并且创建了数据源 (必须启用创建重试),或者所有连接均未通过连接测试 (包括创建、保留或定期测试时进行的测试)。
已挂起
- 已禁用数据源。
关闭
- 已关闭数据源并且已关闭所有数据库连接。
超载
- 池中的所有资源都处于使用状态。
未知
- 数据源状态未知。
MBean 属性:
JDBCDataSourceRuntimeMBean.State
成功的基于 RCLB 的借用计数 发现现有的连接满足运行时连接负载平衡策略的保留请求数。
MBean 属性:
JDBCOracleDataSourceRuntimeMBean.SuccessfulRCLBBasedBorrowCount
失败的基于 RCLB 的借用计数 根据运行时连接负载平衡策略未找到连接的保留请求数。
MBean 属性:
JDBCOracleDataSourceRuntimeMBean.FailedRCLBBasedBorrowCount
成功的基于关系的借用计数 发现现有的连接满足关系策略的保留请求数。
MBean 属性:
JDBCOracleDataSourceRuntimeMBean.SuccessfulAffinityBasedBorrowCount
失败的基于关系的借用计数 未找到关系策略的现有连接的保留请求数。
MBean 属性:
JDBCOracleDataSourceRuntimeMBean.FailedAffinityBasedBorrowCount
JDBC 驱动程序 用于创建数据库连接的 JDBC 驱动程序的驱动程序类名称。
MBean 属性:
JDBCDataSourceRuntimeMBean.VersionJDBCDriver
最长等待秒数 自实例化连接池以来,应用程序等待此连接池实例中的连接的最大秒数 (最长连接保留等待时间)。
已完成的 getConnection 请求返回连接所花费的时间长于任何以前的请求时,将会更新此值。
MBean 属性:
JDBCDataSourceRuntimeMBean.WaitSecondsHighCount
等待连接当前计数 等待数据库连接的连接请求数。
MBean 属性:
JDBCDataSourceRuntimeMBean.WaitingForConnectionCurrentCount
等待连接失败总数 从此数据源发出的必须等待才能获得连接而最终又未能获得连接的连接请求的累积动态计数。
等待的连接请求失败的原因有多种,其中包括等待时间超过了 ConnectionReserveTimeoutSeconds。
MBean 属性:
JDBCDataSourceRuntimeMBean.WaitingForConnectionFailureTotal
最大等待连接计数 当前同时等待此数据源实例中的连接的最大应用程序请求数。
MBean 属性:
JDBCDataSourceRuntimeMBean.WaitingForConnectionHighCount
等待连接成功总数 从此数据源发出的必须等待才能获得连接而最终成功获得连接的连接请求的累积动态计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.WaitingForConnectionSuccessTotal
等待连接总数 从此数据源发出的必须等待才能获得连接的连接请求 (包括最终获得或未获得连接的连接请求) 的累积动态计数。
MBean 属性:
JDBCDataSourceRuntimeMBean.WaitingForConnectionTotal
实例名 此实例的名称。
MBean 属性:
JDBCOracleDataSourceInstanceRuntimeMBean.InstanceName
签名 唯一标识实例的签名。
MBean 属性:
JDBCOracleDataSourceInstanceRuntimeMBean.Signature
当前权重 实例的当前权重。
MBean 属性:
JDBCOracleDataSourceInstanceRuntimeMBean.CurrentWeight
最大不可用数量 自数据源部署以来数据源的此实例中由应用程序使用或由系统测试的最大数据库连接数。
MBean 属性:
JDBCOracleDataSourceRuntimeMBean.HighestNumUnavailable

运行脚本

要执行wlst脚本,你需要有weblogic环境,建议在服务器上执行。

  • 先进入到$DOMAIN_HOME/bin/目录,执行setDomainEnv.sh脚本,设置weblogic环境
cd /u01/Middleware/user_projects/domains/portal_domain/bin
. ./setDomainEnv.sh
注意第二行脚本以.开头,如果没有这个点,设置不生效。
  • 将脚本上传至服务器,通过wlst工具执行脚本
cd /home/oracle/scripts
java weblogic.WLST datasource.py localhost:7001 weblogic password

脚本需要指定console地址,管理员账号,管理员密码,脚本执行成功后,会在当前目录生成一个datasource.csv文件,可以直接用excel打开,也可以将文件通过curl命令上传至远程服务器。

统计多台服务器

如果要统计多台服务器,可以再写一个调用脚本,多次调用datasource.py即可。

cd /u01/Middleware/user_projects/domains/portal_domain/bin
. ./setDomainEnv.sh
cd /home/oracle/scripts
java weblogic.WLST datasource.py localhost:7001 weblogic password
java weblogic.WLST datasource.py localhost:7002 weblogic password
java weblogic.WLST datasource.py localhost:7003 weblogic password
java weblogic.WLST datasource.py localhost:7004 weblogic password
java weblogic.WLST datasource.py localhost:7005 weblogic password
# ...

写在最后

jython属于偏小众的语言,网上资料较少,但用法和python大部分一致,如果查不到jython的资料可以试试查python。


DQuery
300 声望93 粉丝

幸福是奋斗出来的