# # Set performance monitoring service on. # Set performance monitoring flags. # #################################################################### # Patrick Finnegan 28/09/2005. V1. #################################################################### namespace eval setPMIOn { proc setPMIOn { } { set procName [ lindex [ info level 0 ] 0 ] putsLog "## proc - $procName" foreach i [ info args $procName ] { upvar 0 $i ilocal set propertiesArray($i) $ilocal } putsLog "properties are.................." foreach { a b } [ array get propertiesArray ] { putsLog [ format "%-35s %s" "$a" "$b" ] } global AdminConfig # set PMI properties if { [ catch { setPMIParms } r ] == 0 } { array set serverIdArray $r } else { return -code error $r } # set JVM properties. if { [ catch { setJVMProps serverIdArray } r ] == 0 } { set continue true } else { puts $r return -code error $r } set runtime advisor. if { [ catch { setRunPerfAdvisor serverIdArray } r ] == 0 } { set continue true } else { puts $r return -code error } } ############# # Set PMI on ############# proc setPMIParms { } { set procName [ lindex [ info level 0 ] 0 ] putsLog "## proc - $procName" foreach i [ info args $procName ] { upvar 0 $i ilocal set propertiesArray($i) $ilocal } putsLog "properties are.................." foreach { a b } [ array get propertiesArray ] { putsLog [ format "%-35s %s" "$a" "$b" ] } global AdminConfig # get the required server information and store in an array indexed by serverId. # the performance monitor metrics need to be switched on at the node agent and server levels. # From the DM list the servers and select the node agent and app server instances. # get the required server information and store in an array indexed by serverId. set PMIServiceList [ $AdminConfig list PMIService ] foreach i [ $AdminConfig list Server ] { set serverType [ $AdminConfig showAttribute $i serverType ] if { $serverType == "APPLICATION_SERVER" | $serverType == "NODE_AGENT" } { lappend serverList $i set serverName [ $AdminConfig showAttribute $i name ] regexp {(.*nodes\/)(.*)(\/servers.*)} $i a b c d set nodeId [ $AdminConfig getid /Node:$c/ ] set nodeName [ $AdminConfig showAttribute $nodeId name ] set serverIndex [ lsearch -glob $PMIServiceList *$serverName* ] set PMIServiceId [ lindex $PMIServiceList $serverIndex ] set serverIdArray($i) [ list $serverName $nodeName $PMIServiceId ] } } putsLog "Performance monitoring will be switched on for the following servers:" foreach i [ lsort $serverList ] { putsLog [ format "%-5s %-30s %-30s" " " "Node: [ lindex $serverIdArray($i) 0 ] " "Server: [ lindex $serverIdArray($i) 1 ]" ] } putsLog "Current Performance Monitor Settings are:" foreach i $serverList { set enable [ $AdminConfig showAttribute [ lindex $serverIdArray($i) 2 ] enable ] set initialSpecLevel [ $AdminConfig showAttribute [ lindex $serverIdArray($i) 2 ] initialSpecLevel ] putsLog [ format "%-5s %-20s %-20s %-s" " " [ lindex $serverIdArray($i) 0 ] "enabled:" $enable ] putsLog [ format "%-5s %-20s %-20s %-s" " " " " "initialSpecLevel:" $initialSpecLevel ] } putsLog "Applying new PMI settings:" set enable [ list enable true ] append X beanModule=X: append X cacheModule=X: append X connectionPoolModule=X: append X j2cModule=X: append X jvmRuntimeModule=X: append X orbPerfModule=X: append X servletSessionsModule=X: append X systemModule=X: append X threadPoolModule=X: append X transactionModule=X: append X webAppModule=X: append X wlmModule=X: append X webServicesModule=X: append X wsgwModule=X: set initialSpecLevel [ list initialSpecLevel $X ] set attrsList [ list $enable $initialSpecLevel ] foreach i $serverList { if { [ catch { $AdminConfig modify [ lindex $serverIdArray($i) 2 ] $attrsList } r ] == 0 } { putsLog [ format "%-5s %-20s %-s" " " "[ lindex $serverIdArray($i) 0 ]\:" "PMI settings applied successfully" ] putsLog $r } else { putsLog [ format "%-5s %-20s %-s" " " "[ lindex $serverIdArray($i) 0 ]\:" "ERROR: failed to apply PMI settings." ] putsLog $r return -code error $r } } putsLog "New PMI settings are:" foreach i $serverList { set enable [ $AdminConfig showAttribute [ lindex $serverIdArray($i) 2 ] enable ] set initialSpecLevel [ $AdminConfig showAttribute [ lindex $serverIdArray($i) 2 ] initialSpecLevel ] putsLog [ format "%-5s %-20s %-20s %-s" " " [ lindex $serverIdArray($i) 0 ] "enabled:" $enable ] putsLog [ format "%-5s %-20s %-20s %-s" " " " " "initialSpecLevel:" $initialSpecLevel ] } return [ array get serverIdArray ] } #################################################################### # Set JVM Properties. #################################################################### proc setJVMProps { serverIdArray } { set procName [ lindex [ info level 0 ] 0 ] putsLog "## proc - $procName" foreach i [ info args $procName ] { upvar 0 $i ilocal set propertiesArray($i) $ilocal } putsLog "properties are.................." foreach { a b } [ array get propertiesArray ] { putsLog [ format "%-35s %s" "$a" "$b" ] } global AdminConfig upvar $serverIdArray localArray #parray localArray putsLog "Existing JVM properties are:" foreach { serverId values } [ array get localArray ] { putsLog [ format "%-5s %-20s %-20s% -s" " " "[ lindex $localArray($serverId) 1 ]" "[ lindex $localArray($serverId) 0 ]" "JVM generic arguments are:" ] set jvmId [ $AdminConfig list JavaVirtualMachine $serverId ] # if generic JVM arguments exist display then add them to the server id array. set existingGenericJvmArguments [ $AdminConfig showAttribute $jvmId genericJvmArguments ] if { [ llength $existingGenericJvmArguments ] != 0 } { foreach i $existingGenericJvmArguments { putsLog [ format "%-10s %-40s" " " $i ] } } # add the generic arguments variable to the list even if empty. # the contents of the array element is a list. set localArray($serverId) [ lappend localArray($serverId) $jvmId $existingGenericJvmArguments ] # get the verbose garbage collection and Hprof arguments. putsLog [ format "%-5s %-20s %-20s% -s" " " "[ lindex $localArray($serverId) 1 ]" "[ lindex $localArray($serverId) 0 ]" "Verbose Garbage arguments are:" ] putsLog [ format "%-10s %-40s %-10s" " " "verboseModeGarbageCollection" [ $AdminConfig showAttribute $jvmId verboseModeGarbageCollection ]] putsLog [ format "%-10s %-40s %-10s" " " "runHProf" [ $AdminConfig showAttribute $jvmId runHProf ]] putsLog [ format "%-10s %-40s %-10s" " " "hprofArguments" [ $AdminConfig showAttribute $jvmId hprofArguments ]] } # the new generic arguments need to be appended to the existing args # otherwise the existing args are overwritten. Check whether the arguments # already exist. If so merge the existing list with the new list and modify. foreach { serverId values } [ array get localArray ] { if { [ lsearch [ lindex $localArray($serverId) 4 ] "-XrunpmiJvmpiProfiler" ] != -1 } { set continue true } else { set args [ list -XrunpmiJvmpiProfiler ] # the existing generic jvm args may contain variables like "${WPS_JVM_ARGUMENTS_EXT} that are not quoted properly." # reformat the list set currentJVMArgs [ lindex $localArray($serverId) 4 ] if { $currentJVMArgs == {} } { set currentJVMArgs2 {} } else { foreach i $currentJVMArgs { lappend currentJVMArgs2 $i } } set genericJvmArguments [ list genericJvmArguments [ eval concat $currentJVMArgs2 $args ] ] } # set the verbose gc args set verboseModeGarbageCollection [ list verboseModeGarbageCollection true ] set runHProf [ list runHProf true ] set hprofArguments [ list hprofArguments "depth=20,file=heapdump.txt" ] lappend attrList $verboseModeGarbageCollection $runHProf $hprofArguments # set the generic JVM args. if { [ info exist genericJvmArguments ] == 1 } { lappend attrList $genericJvmArguments } # set attrList [ list $genericJvmArguments $verboseModeGarbageCollection $runHProf $hprofArguments ] # puts "\n attrList is $attrList\n" if { [ catch { $AdminConfig modify [ lindex $localArray($serverId) 3 ] $attrList } r ] == 0 } { putsLog [ format "%-5s %-20s %-s" " " "[ lindex $localArray($serverId) 0 ]\:" "JVM settings applied successfully" ] putsLog $r } else { putsLog [ format "%-5s %-20s %-s" " " "[ lindex $localArray($serverId) 0 ]\:" "ERROR: failed to apply JVM settings." ] putsLog $r return -code error $r } unset attrList } # display the new generic JVM arguments. foreach { serverId values } [ array get localArray ] { putsLog [ format "%-5s %-15s %-15s %-s" " " "[ lindex $localArray($serverId) 1 ]" "[ lindex $localArray($serverId) 0 ]" "New JVM generic arguments are:" ] set jvmId [ lindex $localArray($serverId) 3 ] set newGenericJvmArguments [ $AdminConfig showAttribute [ lindex $localArray($serverId) 3 ] genericJvmArguments ] if { [ llength $newGenericJvmArguments ] != 0 } { foreach i $newGenericJvmArguments { putsLog [ format "%-10s %-40s" " " $i ] } } # get the verbose garbage collection and Hprof arguments. putsLog [ format "%-5s %-20s %-20s% -s" " " "[ lindex $localArray($serverId) 1 ]" "[ lindex $localArray($serverId) 0 ]" "New Verbose Garbage arguments are:" ] putsLog [ format "%-10s %-40s %-10s" " " "verboseModeGarbageCollection" [ $AdminConfig showAttribute $jvmId verboseModeGarbageCollection ]] putsLog [ format "%-10s %-40s %-10s" " " "runHProf" [ $AdminConfig showAttribute $jvmId runHProf ]] putsLog [ format "%-10s %-40s %-10s" " " "hprofArguments" [ $AdminConfig showAttribute $jvmId hprofArguments ]] } } #################################################################### # Enable Runtime Performance Advisor. # NB - server must be running to pick up MBean. #################################################################### proc setRunPerfAdvisor { serverIdArray } { set procName [ lindex [ info level 0 ] 0 ] putsLog "## proc - $procName" foreach i [ info args $procName ] { upvar 0 $i ilocal set propertiesArray($i) $ilocal } putsLog "properties are.................." foreach { a b } [ array get propertiesArray ] { putsLog [ format "%-35s %s" "$a" "$b" ] } global AdminConfig global AdminControl upvar $serverIdArray localArray # get the list of running servers. #parray localArray foreach { serverId values } [ array get localArray ] { set serverName [ lindex $localArray($serverId) 0 ] set nodeName [ lindex $localArray($serverId) 1 ] #puts "servername is $serverName" # there may be servers with the same name on different nodes. # differenciate by node. # if the server is not running the mbean will be null - version 5.1x only. set perfId [ $AdminControl queryNames mbeanIdentifier=ServerRuleDriverMBean,node=$nodeName,process=$serverName,* ] #puts "perfId is $perfId" if { [ llength $perfId ] != 0 } { lappend beanList [ list $nodeName $serverName $perfId ] } } if { [ info exist beanList ] == 1 } { #puts "beanList is $beanList" foreach i $beanList { foreach { nodeName serverName perfId } $i { #puts "\nnodeName is $nodeName\n" #puts "serverName is $serverName\n" #puts "perfId is $perfId\n" set enabled [ $AdminControl getAttribute $perfId enabled ] putsLog [ format "%-5s %-20s %-20s %-15s %-10s" " " $nodeName $serverName "RPA Status is:" $enabled ] $AdminControl setAttribute $perfId enabled true $AdminControl invoke $perfId reInit set enabled [ $AdminControl getAttribute $perfId enabled ] putsLog [ format "%-5s %-20s %-20s %-15s %-10s" " " $nodeName $serverName "RPA Status is:" $enabled ] } } } } #puts "\n setRunPerfAdvisor \n " #global AdminConfig #global AdminControl #set perfId [ $AdminControl queryNames mbeanIdentifier=ServerRuleDriverMBean,process=$serverName,*] ## if the server is not running the mbean will be null. #if { [ string length $perfId ] != 0 } { # # # get existing arguments # set enabled [ $AdminControl getAttribute $perfId enabled ] # puts "\nCurrent RPA Status is: $enabled\n " # $AdminControl setAttribute $perfId enabled true # $AdminControl invoke $perfId reInit # set enabled [ $AdminControl getAttribute $perfId enabled ] # puts "New RPA Status is: $enabled\n " #} else { # puts "$serverName is not running. Skip RPA enabling.\n" #} }