1.python的脚本如下:

 

  1 ###############################################################################

  2 #created on 2013-07-09

  3 #author : zhaolijun

  4 #used to get weblogic  server runtime infomation

  5 #wls_ver:weblogic 10.3.5.0

  6 ###############################################################################

  7

  8 ###############################################################################

  9 # parameters define

 10 ###############################################################################

 11 username='weblogic'

 12 password='isp902isp'

 13 url='t3://10.200.36.210:17101'

 14 LOOPS=3

 15 IntervalTime=30000

 16 FILEPATH="e:/logs/"

 17 newline = "\n"

 18 ###############################################################################

 19 # define functions

 20 ###############################################################################

 21 def WriteToFile(ServerName, SubModule, LogString, LSTARTTIME, FILENAME):

 22

 23     if SubModule == "ServerCoreInfo":

 24         HeadLineInfo = "DateTime,ServerName,ExecuteThreadIdleCount,StandbyThreadCount,ExecuteThreadTotalCount,busythread,HoggingThreadCount"

 25     elif SubModule == "DataSourceInfo":

 26         HeadLineInfo = "DateTime,ServerName,DataSourceName,ActiveConnectionsCurrentCount,CurrCapacity,WaitingForConnectionCurrentCount,WaitingForConnectionTotal"

 27            

 28     if not os.path.exists(FILENAME):

 29         print  "path not exist, create log file by self."

 30         f = open(FILENAME, "a+")

 31         f.write(HeadLineInfo + newline)

 32         f.write(LSTARTTIME + "," + ServerName + "," + LogString + newline)

 33         f.close()

 34         f = None

 35     else:

 36         f = open(FILENAME, "a+")   

 37         f.write(LSTARTTIME + "," + ServerName + ","  + LogString + newline)

 38         f.close()

 39         f = None

 40    

 41 def getCurrentTime():

 42     s=SimpleDateFormat("yyyyMMdd HHmmss")

 43     currentTime=s.format(Date())

 44     return currentTime

 45 def GetJdbcRuntimeInfo():

 46     domainRuntime()

 47     servers = domainRuntimeService.getServerRuntimes();

 48     print ' ******************DATASOURCE CONNECTION POOL RUNTIME INFORMATION*******'

 49     for server in servers:  

 50         print 'SERVER: ' + server.getName();

 51         ServerName=server.getName()

 52         jdbcRuntime = server.getJDBCServiceRuntime();

 53         datasources = jdbcRuntime.getJDBCDataSourceRuntimeMBeans();

 54         for datasource in datasources:

 55             ds_name=datasource.getName()

 56             print('-Data Source: ' + datasource.getName() + ', Active Connections: ' + repr(datasource.getActiveConnectionsCurrentCount()) + ', CurrCapacity: ' + repr(datasource.getCurrCapacity())+' , WaitingForConnectionCurrentCount: '+repr(datasource.getWaitingForConnectionCurrentCount())+' , WaitingForConnectionTotal: '+str(datasource.getWaitingForConnectionTotal()));

 57             FILENAME=FILEPATH + ServerName +"_"+ ds_name + "_"+ "DataSourceInfo" +".csv"

 58             LSTARTTIME=getCurrentTime()

 59             dsLogString=ds_name +','+ str(datasource.getActiveConnectionsCurrentCount())+','+repr(datasource.getCurrCapacity())+','+str(datasource.getWaitingForConnectionCurrentCount())+','+str(datasource.getWaitingForConnectionTotal())

 60             WriteToFile(ServerName, "DataSourceInfo", dsLogString, LSTARTTIME, FILENAME)

 61            

 62 def GetThreadRuntimeInfo():

 63     domainRuntime()

 64     servers=domainRuntimeService.getServerRuntimes();

 65     print ' ******************SERVER QUEUE THREAD RUNTIME INFOMATION***************'

 66     for server in servers:

 67         print 'SERVER: ' + server.getName()

 68         ServerName=server.getName()

 69         threadRuntime=server.getThreadPoolRuntime()

 70         hoggingThreadCount = str(threadRuntime.getHoggingThreadCount())

 71         idleThreadCount = str(threadRuntime.getExecuteThreadIdleCount())

 72         standbycount = str(threadRuntime.getStandbyThreadCount())

 73         threadTotalCount = str(threadRuntime.getExecuteThreadTotalCount())

 74         busythread=str(threadRuntime.getExecuteThreadTotalCount()-threadRuntime.getStandbyThreadCount()-threadRuntime.getExecuteThreadIdleCount()-1)

 75         print ('-Thread :' + 'idleThreadCount:' + idleThreadCount+' ,standbycount:'+standbycount+' , threadTotalCount: '+threadTotalCount+' , hoggingThreadCount:'+hoggingThreadCount+' ,busythread:'+busythread)

 76         FILENAME=FILEPATH + ServerName +"_"+ "ServerCoreInfo" +".csv"

 77         LSTARTTIME=getCurrentTime()

 78         serLogString=idleThreadCount+','+standbycount+','+threadTotalCount+','+busythread+','+hoggingThreadCount

 79         WriteToFile(ServerName, "ServerCoreInfo", serLogString, LSTARTTIME, FILENAME)

 80 ###############################################################################

 81 ############ main

 82 ###############################################################################              

 83 if __name__ == '__main__':

 84     from wlstModule import *#@UnusedWildImport

 85 #import sys, re, os

 86 #import java

 87 from java.util import Date

 88 from java.text import SimpleDateFormat

 89 print 'starting the script ....'

 90 connect(username,password, url);

 91 try:

 92     for i in range(LOOPS) :

 93        

 94         GetThreadRuntimeInfo()

 95         GetJdbcRuntimeInfo()

 96         java.lang.Thread.sleep(IntervalTime)

 97        

 98 except Exception, e:

 99     print e

100     dumpStack()

101     raise

102 disconnect()

ColletRuntime.py

2.将脚本放到weblogic的安装目录D:\weblogic\bea\wlserver_10.3\common\bin下
3.修改collectionRuntime.py中的weblogic的用户名,密码,IP,端口,日志路径修改成正确的数据。

4.打开CMD窗口,切换到D:\weblogic\bea\wlserver_10.3\common\bin下,然后执行命令wlst.cmd CollectRuntime.py

5.在日志路径下会看到自动生成的CSV文件。能看到HoggingThread和busyThread的数据。

监控gc执行情况的方法如下:

1. 首先需要安装jdk,在jdk/bin目录下,例如:C:\Program Files (x86)\Java\jdk1.6.0_10\bin

2. 打开CMD窗口,切换到jdk/bin目录下,使用命令jstat -gcutil 4556 5s 100 >d:/jstat/text.log ,其中的4556为服务器的进程号。通过jconsole查询得出。

使用 > d:/jstat/text.log的方式可以将jstat的输出结果保存到文件中。

3. 在输出的结果中,可以看到full gc的输出结果。

4. 在监控full gc和hogging thread的过程中,adminserver是不用监控的。

计算方法:

1. full gc间隔,使用FGC列计算,最后一项减去第一项,除以场景时间(分)。

2. gc执行时间,使用FGCT列计算,最后一项减去第一项,除以场景的执行时间(秒)。

3. hogging  thread 和 busy thread都是找出最大值即可

至此,监控过程全部完成。

posted on 2022-08-11 08:44  root-123  阅读(138)  评论(0编辑  收藏  举报