Ths class below was created to manage JVMs. To create, update or delete JVM properties, and add custom props. It is designed using an OO approach and imlpements Log4J for logging.
#Import Java logging - Assumes class in in WAS class path ie wsadmin.properties for DMGR profile. from org.apache.log4j import Logger from org.apache.log4j import PropertyConfigurator #Global logger variable - local to this script global logger ####################################################################################################### # CLASS: This class provides the ability to create/modify JVM parameters. ####################################################################################################### #We work on the premis that this class is pushing the config to a specifc names server at any one time. class JVM: __beanId = None __beanObjectId = None __cellName = None __scope = None __clusterName = None __nodeName = None __serverName = None __simulateMode = "false" __modifyOnCreateMode = "false" #If true will modify a during create if variable already exists #Instance Variables __serverName = None #- The name of the Server whose process definition is modified. If there is only one server in the entire configuration, then this parameter is optional. __nodeName = None #- The name of the node. This is only needed for the server scopes that do not have a unique name across nodes. __classpath = None #- The standard class path in which the Java virtual machine code looks for classes. __bootClasspath = None #- Bootstrap classes and resources for JVM code. This option is only available for JVM instructions that support bootstrap classes and resources. You can separate multiple paths by a colon (:) or semi-colon (;), depending on operating system of the node. __verboseModeClass = None #- Specifies whether to use verbose debug output for class loading. The default is not to enable verbose class loading. __verboseModeGarbageCollection = None #- Specifies whether to use verbose debug output for garbage collection. The default is not to enable verbose garbage collection __verboseModeJNI = None #- Specifies whether to use verbose debug output for native method invocation. The default is not to enable verbose Java Native Interface (JNI) activity. __initialHeapSize = None #- Specifies the initial heap size available to the JVM code, in megabytes. __maximumHeapSize = None #- Specifies the maximum heap size available to the JVM code, in megabytes. __runHProf = None #- This setting applies to base WebSphere Application Server only. It specifies whether to use HProf profiler support. To use another profiler, specify the custom profiler settings using the HProf Arguments setting. The default is not to enable HProf profiler support. __hprofArguments = None #- This setting applies to base WebSphere Application Server only. It specifies command-line profiler arguments to pass to the JVM code that starts the application server process. You can specify arguments when HProf profiler support is enabled. __debugMode = None #- Specifies whether to run the JVM in debug mode. The default is not to enable debug mode support. __debugArgs = None #- Specifies command-line debug arguments to pass to the JVM code that starts the application server process. You can specify arguments when Debug Mode is enabled. __genericJvmArguments = None #- Specifies command line arguments to pass to the Java virtual machine code that starts the application server process. __internalClassAccessMode = None #- Specifies the internal Class Access Mode for the JVM. <ALLOW | RESTRICT> __executableJarFileName = None #- Specifies a full path name for an executable JAR file that the JVM code uses. __disableJIT = None #- Specifies whether to disable the just in time (JIT) compiler option of the JVM code. __osName = None #- Specifies JVM settings for a given operating system. When started, the process uses the JVM settings for the operating system of the node. #------------------------------------------------------------------------------------- #Constructor #------------------------------------------------------------------------------------- def __init__(self,*args) : #ensure we know we are using a global var. global logger #PropertyConfigurator.configure('/root/scripts/wmqManager/log4j.properties') PropertyConfigurator.configure('c:/scripts/jvmManager/log4j.properties') logger = Logger.getLogger("JVM Manager") #use the config data in the properties file logger.info("Instantiated a JVM Manager Object") logger.debug("EXIT: __init__()") #endDef #------------------------------------------------------------------------------------- #Class Setter Methods ... #------------------------------------------------------------------------------------- def nodeName(self, valueString): logger.debug("SETTER: nodeName") self.__nodeName = valueString; #endDef def serverName(self, valueString): logger.debug("SETTER: serverName") self.__serverName = valueString; #endDef def classpath(self, pathString): logger.debug("SETTER: classpath") self.__classpath = pathString; #endDef def bootClasspath(self, pathString): logger.debug("SETTER: bootClasspath") self.__bootClasspath = pathString; #endDef def verboseModeClass(self, state): logger.debug("SETTER: verboseModeClass") self.__verboseModeClass = state; #endDef def verboseModeGarbageCollection(self, state): logger.debug("SETTER: verboseModeGarbageCollection") self.__verboseModeGarbageCollection = state; #endDef def verboseModeJNI(self, state): logger.debug("SETTER: verboseModeJNI") self.__verboseModeJNI = state; #endDef def initialHeapSize(self, size): logger.debug("SETTER: initialHeapSize") self.__initialHeapSize = size; #endDef def maximumHeapSize(self, size): logger.debug("SETTER: maximumHeapSize") self.__maximumHeapSize = size; #endDef def runHProf(self, state): logger.debug("SETTER: runHProf") self.__runHProf = state; #endDef def hprofArguments(self, argString): logger.debug("SETTER: hprofArguments") self.__hprofArguments = argString; #endDef def debugMode(self, state): logger.debug("SETTER: debugMode") self.__debugMode = state; #endDef def debugArgs(self, argString): logger.debug("SETTER: debugArgs") self.__debugArgs = argString; #endDef def genericJvmArguments(self, argString): logger.debug("SETTER: genericJvmArguments") self.__genericJvmArguments = argString; #endDef def internalClassAccessMode(self, state): logger.debug("SETTER: internalClassAccessMode") self.__internalClassAccessMode = argString; #endDef def executableJarFileName(self, fileNameString): logger.debug("SETTER: executableJarFileName") self.__executableJarFileName = fileNameString; #endDef def disableJIT(self, state): logger.debug("SETTER: disableJIT") self._disableJIT = state; #endDef #------------------------------------------------------------------------------------- #Class Getter Methods for resource object... #------------------------------------------------------------------------------------- def getServerName(self) : logger.debug("GETTER: getServerName") return self.__serverName #endDef #------------------------------------------------------------------------------------- #Scope Methods... #------------------------------------------------------------------------------------- def setCellScope(self, cellName) : logger.debug( "SETTER: setCellScope") self.__scope = "cell"; self.__cellName = cellName; #endDef def setNodeScope(self, nodeName) : logger.debug( "SETTER: setNodeScope") self.__scope = "node"; self.__nodeName = nodeName; #endDef def setClusterScope(self, clusterName) : logger.debug( "SETTER: setClusterScope") self.__scope = "cluster"; logger.debug("self.__scope=" + self.__scope) self.__clusterName = clusterName; logger.debug("self.__clusterName=" + self.__clusterName) #endDef def setServerScope(self, nodeName, serverName) : logger.debug( "SETTER: setServerScope") self.__scope = "server"; self.__nodeName = nodeName; self.__serverName = serverName; #endDef #------------------------------------------------------------------------------------- #Decision tree Methods... #------------------------------------------------------------------------------------- def setModifyOnCreateMode(self, booleanString) : logger.debug( "SETTER: setModifyOnCreateMode") if ((booleanString == "") or (booleanString == None)) : self.__modifyOnCreateMode = "false"; else : self.__modifyOnCreateMode = "true"; #endIf #endDef def setSimulateMode(self, booleanString) : logger.debug( "SETTER: setSimulateMode") if ((booleanString == "") or (booleanString == None)) : self.__simulateMode = "false"; else : self.__simulateMode = "true"; #endIf #endDef #------------------------------------------------------------------------------------- #getAttribute Method... #------------------------------------------------------------------------------------- def getAttributes(self): logger.debug("ENTER: getAttributes()") attrib = "" if(self.__serverName) == "": print "ERROR: No Server Name" sys.exit(0) if self.__nodeName == None: print "ERROR: No Node Name" sys.exit(0) if(self.__nodeName) != None: attrib = attrib + '-nodeName ' + self.__nodeName if(self.__serverName) != None: attrib = attrib + ' -serverName ' + self.__serverName if self.__verboseModeClass != None: attrib = attrib + ' -verboseModeClass ' + self.__verboseModeClass if self.__verboseModeGarbageCollection != None: attrib = attrib + ' -verboseModeGarbageCollection ' + self.__verboseModeGarbageCollection if self.__verboseModeJNI != None: attrib = attrib + ' -verboseModeJNI ' + self.__verboseModeJNI if self.__initialHeapSize != None: attrib = attrib + ' -initialHeapSize ' + self.__initialHeapSize if self.__maximumHeapSize != None: attrib = attrib + ' -maximumHeapSize ' + self.__maximumHeapSize if self.__runHProf != None: attrib = attrib + ' -runHProf ' + self.__runHProf if self.__hprofArguments != None: attrib = attrib + ' -hprofArguments ' + self.__hprofArguments if self.__debugMode != None: attrib = attrib + ' -debugMode ' + self.__debugMode if self.__debugArgs != None: attrib = attrib + ' -debugArgs ' + self.__debugArgs if self.__genericJvmArguments != None: attrib = attrib + ' -genericJvmArguments ' + '"' + self.__genericJvmArguments + '"' if self.__executableJarFileName != None: attrib = attrib + ' -executableJarFileName ' + self.__executableJarFileName if self.__internalClassAccessMode != None: attrib = attrib + ' -internalClassAccessMode ' + self.__internalClassAccessMode if self.__disableJIT != None: attrib = attrib + ' -disableJIT ' + self.__disableJIT if self.__osName != None: attrib = attrib + ' -osName ' + self.__osName return "[" + attrib + "]" logger.debug("EXIT: getAttributes()") #endDef #Helper for converting string to list def wsadminToList(self,inStr): inStr = inStr.rstrip(); outList=[] if (len(inStr)>0 and inStr[0]=='[' and inStr[-1]==']'): tmpList = inStr[1:-1].split(" ") else: tmpList = inStr.split("\n") #splits for Windows or Linux for item in tmpList: item = item.rstrip(); #removes any Windows "\r" if (len(item)>0): outList.append(item) return outList #endDef #endDef #------------------------------------------------------------------------------------- #Modify Method... #------------------------------------------------------------------------------------- def modify(self): logger.debug("ENTER: modify()") logger.debug( "Modifying the following JVM attributes: " + self.getAttributes()) #Apply the JVM Settings AdminTask.setJVMProperties(self.getAttributes()) #this is an example of how to call the set JVMProperties. #AdminTask.setJVMProperties('[-nodeName node01 -serverName server1 -verboseModeClass true]') #save logger.debug("Saving configuration after setting new attributes to JVM (" + self.__nodeName + ":" + self.__serverName + ")") AdminConfig.save() logger.debug("Modify - COMPLETED SUCCESSFULLY") logger.debug("EXIT: modify()") #endDef #------------------------------------------------------------------------------------- #propExists Method... #------------------------------------------------------------------------------------- def propExists(self, existingName): logger.debug("ENTER: propExists()") returnVal = 0 if((self.__cellName == "") or (self.__cellName == None)) : self.__cellName = AdminControl.getCell() logger.warn("setCellName method was not called, assuming current cell") #endIf if( (self.__nodeName == None) or (self.__nodeName=="") ): logger.error("self.__serverName property not set!") #end nodeId = AdminConfig.getid("/Node:" + self.__nodeName + "/") logger.debug("nodeId = " + nodeId) if( (self.__serverName == None) or (self.__serverName=="") ): logger.error("self.__serverName property not set!") #end serverId = AdminConfig.getid("/Node:" + self.__nodeName + "/Server:" + self.__serverName + "/") if(serverId == "" or serverId == None) : logger.debug("Server beanid not located, check server name. EXIT: propExists") return #endIf logger.debug("serverId = " + serverId) name = AdminConfig.showAttribute(serverId, "name") logger.debug("name=" + name) jvmProps = AdminConfig.getid("/Cell:"+self.__cellName+"/Node:"+self.__nodeName+"/Server:"+self.__serverName+"/JavaProcessDef:/JavaVirtualMachine:/Property:/" ) logger.debug("jvmProps=" + str(jvmProps)) jvmProps = jvmProps.splitlines() logger.debug("jvmProps=" + str(jvmProps)) for jvmProp in jvmProps: logger.debug("jvmprop=" + jvmProp) name = AdminConfig.showAttribute(jvmProp, "name" ) logger.debug("name=" + name) if(existingName==name): logger.debug("Property [" + name + "] already exists!") value = AdminConfig.showAttribute(jvmProp, "value" ) logger.debug("value=" + value) returnVal = 1 break #endIf #endFor logger.debug("returnVal=" + str(returnVal)) logger.debug("EXIT: propExists()") return returnVal #endDef #------------------------------------------------------------------------------------- #propExists Method... #------------------------------------------------------------------------------------- def removeCustomProp(self, existingName): logger.debug("ENTER: removeCustomProp()") found = 0 if((self.__cellName == "") or (self.__cellName == None)) : self.__cellName = AdminControl.getCell() logger.warn("setCellName method was not called, assuming current cell") #endIf if( (self.__nodeName == None) or (self.__nodeName=="") ): logger.error("self.__serverName property not set!") #end nodeId = AdminConfig.getid("/Node:" + self.__nodeName + "/") logger.debug("nodeId = " + nodeId) if( (self.__serverName == None) or (self.__serverName=="") ): logger.error("self.__serverName property not set!") #end serverId = AdminConfig.getid("/Node:" + self.__nodeName + "/Server:" + self.__serverName + "/") if(serverId == "" or serverId == None) : logger.debug("Server beanid not located, check server name. EXIT: propExists") return #endIf logger.debug("serverId = " + serverId) name = AdminConfig.showAttribute(serverId, "name") logger.debug("name=" + name) jvmProps = AdminConfig.getid("/Cell:"+self.__cellName+"/Node:"+self.__nodeName+"/Server:"+self.__serverName+"/JavaProcessDef:/JavaVirtualMachine:/Property:/" ) logger.debug("jvmProps=" + str(jvmProps)) jvmProps = jvmProps.splitlines() logger.debug("jvmProps=" + str(jvmProps)) for jvmProp in jvmProps: logger.debug("jvmprop=" + jvmProp) name = AdminConfig.showAttribute(jvmProp, "name" ) logger.debug("name=" + name) if(existingName==name): logger.debug("Property [" + name + "] exists!") value = AdminConfig.showAttribute(jvmProp, "value" ) logger.debug("value=" + value) found = 1 break #endIf #endFor if(found==1) : logger.info( "Removing property...") AdminConfig.remove(jvmProp) #Save if set to do so if( self.__simulateMode=="true" ) : logger.warn( "Simuation mode = " + self.__simulateMode + ", save inhibited") else : logger.info( "remove: Saving configuration after adding new property") AdminConfig.save() #end If else : logger.warn( "Property [" + name + "] on server [" + self.__serverName + "] was not located. No remove action was performed!") #endIf #endIf logger.debug("EXIT: removeCustomProp()") #endDef #------------------------------------------------------------------------------------- #ListCustomProps Method... #------------------------------------------------------------------------------------- def listCustomProps(self): logger.debug("ENTER: listCustomProps()") if((self.__cellName == "") or (self.__cellName == None)) : self.__cellName = AdminControl.getCell() logger.warn("setCellName method was not called, assuming current cell") #endIf if( (self.__nodeName == None) or (self.__nodeName=="") ): logger.error("self.__serverName property not set!") #end nodeId = AdminConfig.getid("/Node:" + self.__nodeName + "/") logger.debug("nodeId = " + nodeId) if( (self.__serverName == None) or (self.__serverName=="") ): logger.error("self.__serverName property not set!") #end serverId = AdminConfig.getid("/Node:" + self.__nodeName + "/Server:" + self.__serverName + "/") if(serverId == "" or serverId == None) : logger.debug("Server beanid not located, check server name. EXIT: listCustomProps") return #endIf logger.debug("serverId = " + serverId) name = AdminConfig.showAttribute(serverId, "name") logger.debug("name=" + name) jvmProps = AdminConfig.getid("/Cell:"+self.__cellName+"/Node:"+self.__nodeName+"/Server:"+self.__serverName+"/JavaProcessDef:/JavaVirtualMachine:/Property:/" ) #On closer examination, you can't really see in a print statement unless in interactive console, but the fact is that the elements are separated by newline characters ("\r\n") and the entire result is surrounded by single quotation marks. #Thus, wsadmin is actually returning a Jython string see type output immediately below. logger.debug( type(jvmProps)) logger.debug("jvmProps=" + str(jvmProps)) #To get the elements ie an array (known as a Jython list), you first have to remove the line separators and convert the string to a Jython list. You use the splitlines() function to turn the results into a list jvmProps = jvmProps.splitlines() logger.debug( type(jvmProps)) logger.debug("jvmProps=" + str(jvmProps)) #Method one : Get properties from the property list inside a JavaVirtualMachine mbean object for jvmProp in jvmProps: logger.debug("jvmprop=" + jvmProp) name = AdminConfig.showAttribute(jvmProp, "name" ) logger.debug("name=" + name) value = AdminConfig.showAttribute(jvmProp, "value" ) logger.debug("value=" + value) #endFor #Method two : Iterate the JVM properties from a given JJavaVirtualMachine mbean object. This option is more confusing, but valid. jvmId = AdminConfig.list("JavaVirtualMachine", serverId) logger.debug("jvmId=" + jvmId) #In this example we see that by returning attrbites we do not have a comma delimited list, rather a " " (space) delimted list and thus the code has to be different. In this case use the old nugget of wsadminToList function. jvmProps = AdminConfig.showAttribute(jvmId, "systemProperties") jvmProps = self.wsadminToList(jvmProps) logger.debug("jvmProps=" + str(jvmProps)) #Iterate and display properties for jvmProp in jvmProps: logger.debug("jvmProp=" + jvmProp) name = AdminConfig.showAttribute(jvmProp, "name") logger.debug("name=" + name) value = AdminConfig.showAttribute(jvmProp, "value") logger.debug("value=" + value) #endFor logger.debug("listCustomProps - COMPLETED SUCCESSFULLY") logger.debug("EXIT: listCustomProps()") #endDef #------------------------------------------------------------------------------------- #createCustomProp Method... #------------------------------------------------------------------------------------- def createCustomProp(self, name, value, description): logger.debug("ENTER: createCustomProp()") if (name == "" or name == None) : logger.error("name property not set! name required to add a property") logger.debug( "EXIT: createCustomProp()") return #endIf if (value == "" or value == None) : logger.error("value property not set! value required to add a property") logger.debug( "EXIT: createCustomProp()") return #endIf if((self.__cellName == "") or (self.__cellName == None)) : self.__cellName = AdminControl.getCell() logger.warn("setCellName method was not called, assuming current cell") #endIf if( (self.__nodeName == None) or (self.__nodeName=="") ): logger.error("self.__serverName property not set!") #end nodeId = AdminConfig.getid("/Node:" + self.__nodeName + "/") logger.debug("nodeId = " + nodeId) if( (self.__serverName == None) or (self.__serverName=="") ): logger.error("self.__serverName property not set!") #end jvmId = AdminConfig.getid("/Cell:"+self.__cellName+"/Node:"+self.__nodeName+"/Server:"+self.__serverName+"/JavaProcessDef:/JavaVirtualMachine:/" ) logger.debug("jvmId = " + jvmId) if(jvmId == "" or jvmId == None) : logger.debug("Server (jvm) beanid not located, check server name. EXIT: createCustomProp") return #endIf #Create the attributes for our new property to be added to the JMVs custom props attrib = "" if(name != "" and name !=None): logger.debug("Apppending attribute... ") attrib += '[' + "name " + '"' + name + '"' + ']' logger.debug(attrib) #endIf if(value != "" and value != None): logger.debug("Apppending attribute... ") attrib += '[' + "value " + '"' + value + '"' + ']' logger.debug(attrib) #endIf if(description != "" and description != None): logger.debug("Apppending attribute... ") attrib += '[' + "description " + '"' + description + '"' + ']' logger.debug(attrib) #endIf logger.debug("Attributes: " + attrib) attrib = "[" + attrib + "]" if(self.propExists(name)==0) : AdminConfig.create('Property', jvmId, attrib) #Save if set to do so if( self.__simulateMode=="true" ) : logger.warn( "Simuation mode = " + self.__simulateMode + ", save inhibited") else : logger.info( "create: Saving configuration after adding new property") AdminConfig.save() #end If else : if( self.__modifyOnCreateMode=="true" ) : logger.warn( "Modifying existing entry...") self.modifyCustomProp(name, value, description) #endIf #endIf ''' jvmId = (cells/myCell01/nodes/myNode01/servers/Server1|server.xml#JavaVitualMachine_1343632560875) AdminConfig.create('Property', '(cells/myCell01/nodes/myNode01/servers/Server1|server.xml#JavaVirtualMachine_1343632560875)', '[ [validationExpression ""] [name "test"] [description ""] [value "value"] [required "false"] ]') ''' logger.debug("createCustomProp - COMPLETED SUCCESSFULLY") logger.debug("EXIT: createCustomProps()") #endDef #------------------------------------------------------------------------------------- #modifyCustomProp Method... #------------------------------------------------------------------------------------- def modifyCustomProp(self, name, value, description): logger.debug("ENTER: modifyCustomProp()") if (name == "" or name == None) : logger.error("name property not set! name required to add a property") logger.debug( "EXIT: modifyCustomProp()") return #endIf if (value == "" or value == None) : logger.error("value property not set! value required to add a property") logger.debug( "EXIT: modifyCustomProp()") return #endIf if((self.__cellName == "") or (self.__cellName == None)) : self.__cellName = AdminControl.getCell() logger.warn("setCellName method was not called, assuming current cell") #endIf if( (self.__nodeName == None) or (self.__nodeName=="") ): logger.error("self.__serverName property not set!") #end nodeId = AdminConfig.getid("/Node:" + self.__nodeName + "/") logger.debug("nodeId = " + nodeId) if( (self.__serverName == None) or (self.__serverName=="") ): logger.error("self.__serverName property not set!") #end jvmProps = AdminConfig.getid("/Cell:"+self.__cellName+"/Node:"+self.__nodeName+"/Server:"+self.__serverName+"/JavaProcessDef:/JavaVirtualMachine:/Property:/" ) logger.debug("jvmProps=" + str(jvmProps)) if(jvmProps == "" or jvmProps == None) : logger.warn("JVM propeties not located, check server name. EXIT: modifyCustomProp") return #endIf jvmProps = jvmProps.splitlines() logger.debug("jvmProps=" + str(jvmProps)) found=0 for jvmProp in jvmProps: logger.debug("jvmprop=" + jvmProp) existingName = AdminConfig.showAttribute(jvmProp, "name" ) logger.debug("existingName=" + existingName) if(existingName==name): logger.debug("Property [" + existingName + "] already exists!") existingValue = AdminConfig.showAttribute(jvmProp, "value" ) logger.debug("existingValue=" + existingValue) found = 1 break #endIf #endFor #If we can locate the existing propertym then modify it if(found==1) : logger.debug("Modifying existing property [" + existingName + "] ...") logger.debug("Building required attributes ...") #Create the attributes for our new property to be added to the JMVs custom props attrib = "" if(name != "" and name !=None): logger.debug("Apppending attribute... ") attrib += '[' + "name " + '"' + name + '"' + ']' logger.debug(attrib) #endIf if(value != "" and value != None): logger.debug("Apppending attribute... ") attrib += '[' + "value " + '"' + value + '"' + ']' logger.debug(attrib) #endIf if(description != "" and description != None): logger.debug("Apppending attribute... ") attrib += '[' + "description " + '"' + description + '"' + ']' logger.debug(attrib) #endIf logger.debug("Attributes: " + attrib) attrib = "[" + attrib + "]" AdminConfig.modify( jvmProp, attrib) #Save if set to do so if( self.__simulateMode=="true" ) : logger.warn( "Simuation mode = " + self.__simluateMode + ", save inhibited") else : logger.info( "modify: Saving configuration after modifying existing property") AdminConfig.save() logger.debug("modifyCustomProp - COMPLETED SUCCESSFULLY") #end If else: logger.warn("No modifications made due to no matching property found") #endIf logger.debug("EXIT: modifyCustomProp()") #endDef logger.debug( "*** Completed Loading Class JVM") #endClass ################################################################################################### jvm = JVM() jvm.setModifyOnCreateMode("true") jvm.nodeName("myNode01") jvm.serverName("Server1") jvm.verboseModeClass("true") jvm.verboseModeGarbageCollection("false") jvm.verboseModeJNI("true") jvm.initialHeapSize("512") jvm.maximumHeapSize("1024") #Create a String of generic JVM Args, this should really use a find/replce to chnge params for each server/node gJvmArgs = "-Xbootclasspath/p:${ITCAMDCHOME}/toolkit/lib/bcm-bootstrap.jar" gJvmArgs = gJvmArgs + " -agentlib:am_ibm_16=/opt/IBM/ITM/aix533/yn/wasdc/7.1.0.2.5/runtime/was70.P2PPA01_mgaMnode.p2ppaapp1/" gJvmArgs = gJvmArgs + " -Xdump:heap:none" gJvmArgs = gJvmArgs + " -verbosegc" gJvmArgs = gJvmArgs + " -Xdump:heap:events=gpf+user,range=1..0,file=/var/was/heapdump/myServer_heapdump.%Y%m%d.%H%M%S.%pid.phd,request=exclusive+prepwalk" gJvmArgs = gJvmArgs + " -Xdump:heap:events=systhrow,filter=java/lang/OutOfMemoryError,range=1..1,file=/var/was/heapdump/myServer_heapdump.%Y%m%d.%H%M%S.%pid.phd,request=exclusive+prepwalk" gJvmArgs = gJvmArgs + " -Xdump:java:file=/var/was/heapdump/myServer_javacore.%Y%m%d.%H%M%S.%pid.txt" gJvmArgs = gJvmArgs + " -Xdump:snap:file=/var/was/heapdump/myServer_snapdump.%Y%m%d.%H%M%S.%pid.trc" gJvmArgs = gJvmArgs + " -Xdump:tool:events=gpf+abort,range=1..0,exec=USER_GENERATED=NO;/var/was/scripts/dumphandler.sh,priority=999" gJvmArgs = gJvmArgs + " -Xdump:tool:events=user,range=1..0,exec=USER_GENERATED=YES;/var/was/scripts/dumphandler.sh,priority=999" gJvmArgs = gJvmArgs + " -Xdump:tool:events=systhrow,filter=java/lang/OutOfMem*,range=1..0,exec=USER_GENERATED=NO;/var/wascripts/dumphandler.sh,priority=999" gJvmArgs = gJvmArgs + " -Xdump:what" gJvmArgs = gJvmArgs + " -Xnocompactgc" jvm.genericJvmArguments(gJvmArgs) #Do the actual modify + Save jvm.modify() #Create requires that serverName is set above. jvm.createCustomProp("service.component.log.location","/var/log/was/" + jvm.getServerName(), "") #jvm.modifyCustomProp("service.component.log.location","/var/log/was/" + jvm.getServerName(), "") #jvm.removeCustomProp("service.component.log.location") #jvm.listCustomProps() #=============== HELP ===================== ''' #Note that the example uses Jython list ie keyword, where as I use value/key pair by named paramater value. AdminConfig.modify('(cells/LW621LX6026649Cell01/nodes/LW621LX6026649Node02/servers/Server01|server.xml#JavaVirtualMachine_1334828235093)', '[[debugArgs "-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=7777"] [classpath ""] [initialHeapSize "512"] [runHProf "false"] [genericJvmArguments "-verbosegc"] [hprofArguments ""] [osName "windows"] [bootClasspath ""] [verboseModeJNI "true"] [maximumHeapSize "1024"] [disableJIT "false"] [executableJarFileName ""] [verboseModeGarbageCollection "false"] [debugMode "false"] [verboseModeClass "true"]]') ''' ''' #print AdminTask.help('setJVMProperties') WASX8006I: Detailed help for command: setJVMProperties Description: Set Java virtual machine (JVM) configuration for the application server. Target object: template or server object name. Arguments: serverName - The name of the Server whose process definition is modified. If there is only one server in the entire configuration, then this parameter is optional. nodeName - The name of the node. This is only needed for the server scopes that do not have a unique name across nodes. processType - The process type of the server. This is for zOS only. classpath - The standard class path in which the Java virtual machine code looks for classes. bootClasspath - Bootstrap classes and resources for JVM code. This option is only available for JVM instructions that support bootstrap classes and resources. You can separate multiple paths by a colon (:) or semi-colon (;), depending on operating system of the node. verboseModeClass - Specifies whether to use verbose debug output for class loading. The default is not to enable verbose class loading. verboseModeGarbageCollection - Specifies whether to use verbose debug output for garbage collection. The default is not to enable verbose garbage collection verboseModeJNI - Specifies whether to use verbose debug output for native method invocation. The default is not to enable verbose Java Native Interface (JNI) activity. initialHeapSize - Specifies the initial heap size available to the JVM code, in megabytes. maximumHeapSize - Specifies the maximum heap size available to the JVM code, in megabytes. runHProf - This setting applies to base WebSphere Application Server only. It specifies whether to use HProf profiler support. To use another profiler, specify the custom profiler settings using the HProf Arguments setting. The default is not to enable HProf profiler support. hprofArguments - This setting applies to base WebSphere Application Server only. It specifies command-line profiler arguments to pass to the JVM code that starts the application server process. You can specify arguments when HProf profiler support is enabled. debugMode - Specifies whether to run the JVM in debug mode. The default is not to enable debug mode support. debugArgs - Specifies command-line debug arguments to pass to the JVM code that starts the application server process. You can specify arguments when Debug Mode is enabled. genericJvmArguments - Specifies command line arguments to pass to the Java virtual machine code that starts the application server process. internalClassAccessMode - Specifies the internal Class Access Mode for the JVM. <ALLOW | RESTRICT> executableJarFileName - Specifies a full path name for an executable JAR file that the JVM code uses. disableJIT - Specifies whether to disable the just in time (JIT) compiler option of the JVM code. osName - Specifies JVM settings for a given operating system. When started, the process uses the JVM settings for the operating system of the node. Steps: None ''' ''' Creating a new JVM custom property AdminConfig.create('Property', '(cells/myCell01/nodes/myNode01/servers/Server1|server.xml#JavaVirtualMachine_1343632560875)', '[[validationExpression ""] [name "test"] [description ""] [value "value"] [required "false"]]') Modifying an existing JVM property AdminConfig.modify('(cells/myCell01/nodes/myNode01/servers/Server1|server.xml#Property_1343632560885)', '[[validationExpression ""] [name "com.ibm.security.jgss.debug"] [description ""] [value "off"] [required "false"]]') '''