/** Copyright 2008 Matthew Corby-Eaglen * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package commands.god import java.lang.management.* def stream = source.getTerminalOutput() def all = false if("-a" in args){ all = true } if(args?.size() == 0 || argstr == null){ stream.writeln """Usage: mem [-a] [-os] [-r] [-cls] [-m] [-t] [-gc] [-o [object name]] where: \t-a\tshow everything \t-os\tshow OS and architecture info \t-r\tshow runtime info \t-cls\t class loader information \t-m\t memory information \t-t\t show thread information \t-gc\t show garbage collection data \t-o [object]\t show objects in registry, with optional name parameter """; return } if("-os" in args || all){ def os = ManagementFactory.operatingSystemMXBean stream.writeln """OPERATING SYSTEM: \tarchitecture = $os.arch \tname = $os.name \tversion = $os.version \tprocessors = $os.availableProcessors """ } if("-r" in args || all){ def rt = ManagementFactory.runtimeMXBean stream.writeln """RUNTIME: \tname = $rt.name \tspec name = $rt.specName \tvendor = $rt.specVendor \tspec version = $rt.specVersion \tmanagement spec version = $rt.managementSpecVersion """ } if("-cls" in args || all){ def cl = ManagementFactory.classLoadingMXBean stream.writeln """CLASS LOADING SYSTEM: \tisVerbose = ${cl.isVerbose()} \tloadedClassCount = $cl.loadedClassCount \ttotalLoadedClassCount = $cl.totalLoadedClassCount \tunloadedClassCount = $cl.unloadedClassCount """ def comp = ManagementFactory.compilationMXBean stream.writeln """COMPILATION: \ttotalCompilationTime = $comp.totalCompilationTime """ } if("-m" in args || all){ def mem = ManagementFactory.memoryMXBean def heapUsage = mem.heapMemoryUsage def nonHeapUsage = mem.nonHeapMemoryUsage stream.writeln """MEMORY: HEAP STORAGE: \tcommitted = $heapUsage.committed \tinit = $heapUsage.init \tmax = $heapUsage.max \tused = $heapUsage.used NON-HEAP STORAGE: \tcommitted = $nonHeapUsage.committed \tinit = $nonHeapUsage.init \tmax = $nonHeapUsage.max \tused = $nonHeapUsage.used """ ManagementFactory.memoryPoolMXBeans.each{ mp -> stream.writeln "\tname: " + mp.name String[] mmnames = mp.memoryManagerNames mmnames.each{ mmname -> stream.writeln "\t\tManager Name: $mmname" } stream.writeln "\t\tmtype = $mp.type" stream.writeln "\t\tUsage threshold supported = " + mp.isUsageThresholdSupported() } stream.writeln() } if("-t" in args || all){ def td = ManagementFactory.threadMXBean stream.writeln "THREADS:" td.allThreadIds.each { tid -> stream.writeln "\tThread name = ${td.getThreadInfo(tid).threadName}" } stream.writeln() } if("-gc" in args || all){ stream.writeln "GARBAGE COLLECTION:" ManagementFactory.garbageCollectorMXBeans.each { gc -> stream.writeln "\tname = $gc.name" stream.writeln "\t\tcollection count = $gc.collectionCount" stream.writeln "\t\tcollection time = $gc.collectionTime" String[] mpoolNames = gc.memoryPoolNames mpoolNames.each { mpoolName -> stream.writeln "\t\tmpool name = $mpoolName" } } } if("-o" in args || all){ stream.writeln "OBJECT REGISTRY:" def matcher = (argstr =~ /\-o\s[a-zA-Z0-9]*/) def hasName = matcher.find() if(hasName){ matcher = (matcher.group() =~ /\s[a-zA-Z0-9]*/) matcher.find() def oName = matcher.group().trim() def hash = registry.getInventoryHandler().getMudObjects(oName) stream.writeln "\t$oName=> " hash.each{ it-> stream.writeln "\t\t $it" } }else{ def map = registry.getInventoryHandler().getMudObjectsMap() map.each{ it -> stream.writeln "\t$it.key => " it.value.each{ val -> stream.writeln "\t\t $val" } } } }