# # Set performance monitoring service on. # Set performance monitoring flags. # #################################################################### # Patrick Finnegan 28/09/2005. V1. #################################################################### namespace eval setPerfMonOn { proc setPerfMonOn { } { 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 { setPMIOn } 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 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 # 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 ] } # 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 attrList [ list $genericJvmArguments ] 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 } } } # 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 newGenericJvmArguments [ $AdminConfig showAttribute [ lindex $localArray($serverId) 3 ] genericJvmArguments ] if { [ llength $newGenericJvmArguments ] != 0 } { foreach i $newGenericJvmArguments { putsLog [ format "%-10s %-40s" " " $i ] } } } } #################################################################### # 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. set perfId [ $AdminControl queryNames mbeanIdentifier=ServerRuleDriverMBean2,node=$nodeName,process=$serverName,* ] if { [ llength $perfId ] != 0 } { lappend beanList [ list $nodeName $serverName $perfId ] } } # display the running servers #if { [ info exist beanList ] == 0 } { # # putsLog "No running servers - no runtime performance monitor set." # return #} else { # foreach i $beanList { # putsLog "Current runtime performance monitor status." # set perfId [ lindex $i 2 ] # puts "\n $perfId \n" # set enabled [ $AdminControl getAttribute [ lindex $i 2 ] enabled ] # putsLog [ format "%-5s %-15s %-15s %s" " " [ lindex $i 1 ] [ lindex $i 0 ] $enabled ] # } #} #putsLog "Running servers are:" # 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" # } #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 ] } #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" #} }