Yunda, The Serviceability Agent is maintained by the Serviceability team. I'm adding that alias to this e-mail thread (and Bcc'ing the Runtime alias.
Dan On 1/17/13 7:42 PM, 云达 wrote: > > Hi all, > > This is Yunda <yunda....@taobao.com> from Alibaba Group(with OCA). > > When I used CLHSDB( java -classpath .:$JAVA_HOME/lib/sa-jdi.jar > sun.jvm.hotspot.CLHSDB) I found two errors below(the second error > occurred after I made some fix). It seemed that some code about CMS in > SA didn’t change accordingly. > > hsdb> universe > > Heap Parameters: > > Gen 0: eden [0x0000000609200000,0x00000006094aeb90,0x0000000611820000) > space capacity = 140640256, 2.000007736049627 used > > from [0x0000000611820000,0x0000000611820000,0x00000006128e0000) space > capacity = 17563648, 0.0 used > > to [0x00000006128e0000,0x00000006128e0000,0x00000006139a0000) space > capacity = 17563648, 0.0 usedInvocations: 0 > > Gen 1: concurrent mark-sweep generation > > Exception in thread "main" java.lang.ExceptionInInitializerError > > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) > > at > sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) > > at java.lang.reflect.Constructor.newInstance(Constructor.java:395) > > at > sun.jvm.hotspot.runtime.VMObjectFactory.newObject(VMObjectFactory.java:58) > > at > sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.cmsSpace(ConcurrentMarkSweepGeneration.java:55) > > at > sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.printOn(ConcurrentMarkSweepGeneration.java:79) > > at > sun.jvm.hotspot.memory.GenCollectedHeap.printOn(GenCollectedHeap.java:139) > > at sun.jvm.hotspot.CommandProcessor$48.doit(CommandProcessor.java:1605) > > at > sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1897) > > at > sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1867) > > at sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747) > > at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91) > > at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35) > > Caused by: java.lang.RuntimeException: field "_dictionary" not found > in type CompactibleFreeListSpace > > at sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:183) > > at sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:190) > > at sun.jvm.hotspot.types.basic.BasicType.getField(BasicType.java:194) > > at > sun.jvm.hotspot.types.basic.BasicType.getAddressField(BasicType.java:282) > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace.initialize(CompactibleFreeListSpace.java:69) > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace.access$000(CompactibleFreeListSpace.java:35) > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace$1.update(CompactibleFreeListSpace.java:55) > > at sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:402) > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace.<clinit>(CompactibleFreeListSpace.java:53) > > ... 14 more > > hsdb> universe > > Heap Parameters: > > Gen 0: eden [0x0000000609200000,0x00000006094aeb90,0x0000000611820000) > space capacity = 140640256, 2.000007736049627 used > > from [0x0000000611820000,0x0000000611820000,0x00000006128e0000) space > capacity = 17563648, 0.0 used > > to [0x00000006128e0000,0x00000006128e0000,0x00000006139a0000) space > capacity = 17563648, 0.0 usedInvocations: 0 > > Gen 1: concurrent mark-sweep generation > > free-list-space[ 0x000000064cb90000 , 0x0000000661ad0000 ) Exception > in thread "main" java.lang.ExceptionInInitializerError > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace.free(CompactibleFreeListSpace.java:112) > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace.used(CompactibleFreeListSpace.java:95) > > at > sun.jvm.hotspot.memory.CompactibleFreeListSpace.printOn(CompactibleFreeListSpace.java:137) > > at > sun.jvm.hotspot.memory.ConcurrentMarkSweepGeneration.printOn(ConcurrentMarkSweepGeneration.java:79) > > at > sun.jvm.hotspot.memory.GenCollectedHeap.printOn(GenCollectedHeap.java:139) > > at sun.jvm.hotspot.CommandProcessor$48.doit(CommandProcessor.java:1605) > > at > sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1897) > > at > sun.jvm.hotspot.CommandProcessor.executeCommand(CommandProcessor.java:1867) > > at sun.jvm.hotspot.CommandProcessor.run(CommandProcessor.java:1747) > > at sun.jvm.hotspot.CLHSDB.run(CLHSDB.java:91) > > at sun.jvm.hotspot.CLHSDB.main(CLHSDB.java:35) > > Caused by: java.lang.RuntimeException: No type named "FreeList" in > database > > at > sun.jvm.hotspot.types.basic.BasicTypeDataBase.lookupType(BasicTypeDataBase.java:80) > > at > sun.jvm.hotspot.HotSpotTypeDataBase.lookupType(HotSpotTypeDataBase.java:134) > > at > sun.jvm.hotspot.types.basic.BasicTypeDataBase.lookupType(BasicTypeDataBase.java:74) > > at sun.jvm.hotspot.memory.FreeList.initialize(FreeList.java:44) > > at sun.jvm.hotspot.memory.FreeList.access$000(FreeList.java:34) > > at sun.jvm.hotspot.memory.FreeList$1.update(FreeList.java:38) > > at sun.jvm.hotspot.runtime.VM.registerVMInitializedObserver(VM.java:402) > > at sun.jvm.hotspot.memory.FreeList.<clinit>(FreeList.java:36) > > ... 11 more > > So I made a patch to fix them and now “universe” command works well. > Could someone help to review the patch below? > > diff -r b14da2e6f2dc -r 8652e04889a4 > agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary.java > > --- /dev/null Thu Jan 01 00:00:00 1970 +0000 > > +++ > b/agent/src/share/classes/sun/jvm/hotspot/memory/AFLBinaryTreeDictionary.java > Fri Jan 18 09:56:06 2013 +0800 > > @@ -0,0 +1,59 @@ > > +/* > > + * @(#)AFLBinaryTreeDictionary.java > > + * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights > reserved. > > + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. > > + * > > + * This code is free software; you can redistribute it and/or modify it > > + * under the terms of the GNU General Public License version 2 only, as > > + * published by the Free Software Foundation. > > + * > > + * This code is distributed in the hope that it will be useful, but > WITHOUT > > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License > > + * version 2 for more details (a copy is included in the LICENSE file > that > > + * accompanied this code). > > + * > > + * You should have received a copy of the GNU General Public License > version > > + * 2 along with this work; if not, write to the Free Software Foundation, > > + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. > > + * > > + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA > 94065 USA > > + * or visit www.oracle.com if you need additional information or have any > > + * questions. > > + * > > + */ > > + > > +package sun.jvm.hotspot.memory; > > + > > +import java.util.*; > > +import sun.jvm.hotspot.debugger.*; > > +import sun.jvm.hotspot.types.*; > > +import sun.jvm.hotspot.runtime.*; > > + > > +public class AFLBinaryTreeDictionary extends VMObject { > > + static { > > + VM.registerVMInitializedObserver(new Observer() { > > + public void update(Observable o, Object data) { > > + initialize(VM.getVM().getTypeDataBase()); > > + } > > + }); > > + } > > + > > + private static synchronized void initialize(TypeDataBase db) { > > + Type type = db.lookupType("AFLBinaryTreeDictionary"); > > + totalSizeField = type.getCIntegerField("_total_size"); > > + } > > + > > + // Fields > > + private static CIntegerField totalSizeField; > > + > > + // Accessors > > + public long size() { > > + return totalSizeField.getValue(addr); > > + } > > + > > + // Constructor > > + public AFLBinaryTreeDictionary(Address addr) { > > + super(addr); > > + } > > +} > > diff -r b14da2e6f2dc -r 8652e04889a4 > agent/src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.java > > --- > a/agent/src/share/classes/sun/jvm/hotspot/memory/BinaryTreeDictionary.java > Thu Jan 17 13:40:31 2013 -0500 > > +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 > > @@ -1,59 +0,0 @@ > > -/* > > - * @(#)BinaryTreeDictionary.java > > - * Copyright (c) 2000, 2008, Oracle and/or its affiliates. All rights > reserved. > > - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. > > - * > > - * This code is free software; you can redistribute it and/or modify it > > - * under the terms of the GNU General Public License version 2 only, as > > - * published by the Free Software Foundation. > > - * > > - * This code is distributed in the hope that it will be useful, but > WITHOUT > > - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > > - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License > > - * version 2 for more details (a copy is included in the LICENSE file > that > > - * accompanied this code). > > - * > > - * You should have received a copy of the GNU General Public License > version > > - * 2 along with this work; if not, write to the Free Software Foundation, > > - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. > > - * > > - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA > 94065 USA > > - * or visit www.oracle.com if you need additional information or have any > > - * questions. > > - * > > - */ > > - > > -package sun.jvm.hotspot.memory; > > - > > -import java.util.*; > > -import sun.jvm.hotspot.debugger.*; > > -import sun.jvm.hotspot.types.*; > > -import sun.jvm.hotspot.runtime.*; > > - > > -public class BinaryTreeDictionary extends VMObject { > > - static { > > - VM.registerVMInitializedObserver(new Observer() { > > - public void update(Observable o, Object data) { > > - initialize(VM.getVM().getTypeDataBase()); > > - } > > - }); > > - } > > - > > - private static synchronized void initialize(TypeDataBase db) { > > - Type type = db.lookupType("BinaryTreeDictionary"); > > - totalSizeField = type.getCIntegerField("_totalSize"); > > - } > > - > > - // Fields > > - private static CIntegerField totalSizeField; > > - > > - // Accessors > > - public long size() { > > - return totalSizeField.getValue(addr); > > - } > > - > > - // Constructor > > - public BinaryTreeDictionary(Address addr) { > > - super(addr); > > - } > > -} > > diff -r b14da2e6f2dc -r 8652e04889a4 > agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java > > --- > a/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java > Thu Jan 17 13:40:31 2013 -0500 > > +++ > b/agent/src/share/classes/sun/jvm/hotspot/memory/CompactibleFreeListSpace.java > Fri Jan 18 09:56:06 2013 +0800 > > @@ -117,7 +117,7 @@ > > } > > // large block > > - BinaryTreeDictionary bfbd = (BinaryTreeDictionary) > VMObjectFactory.newObject(BinaryTreeDictionary.class, > > + AFLBinaryTreeDictionary bfbd = (AFLBinaryTreeDictionary) > VMObjectFactory.newObject(AFLBinaryTreeDictionary.class, > > dictionaryField.getValue(addr)); > > size += bfbd.size(); > > diff -r b14da2e6f2dc -r 8652e04889a4 > agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java > > --- a/agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java Thu > Jan 17 13:40:31 2013 -0500 > > +++ b/agent/src/share/classes/sun/jvm/hotspot/memory/FreeList.java Fri > Jan 18 09:56:06 2013 +0800 > > @@ -41,7 +41,7 @@ > > } > > private static synchronized void initialize(TypeDataBase db) { > > - Type type = db.lookupType("FreeList"); > > + Type type = db.lookupType("FreeList<FreeChunk>"); > > sizeField = type.getCIntegerField("_size"); > > countField = type.getCIntegerField("_count"); > > headerSize = type.getSize(); > > diff -r b14da2e6f2dc -r 8652e04889a4 > src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp > > --- > a/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp > Thu Jan 17 13:40:31 2013 -0500 > > +++ > b/src/share/vm/gc_implementation/concurrentMarkSweep/vmStructs_cms.hpp > Fri Jan 18 09:56:06 2013 +0800 > > @@ -43,7 +43,8 @@ > > nonstatic_field(LinearAllocBlock, _word_size, size_t) \ > > nonstatic_field(AFLBinaryTreeDictionary, _total_size, size_t) \ > > nonstatic_field(CompactibleFreeListSpace, _indexedFreeList[0], > FreeList<FreeChunk>) \ > > - nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, > LinearAllocBlock) > > + nonstatic_field(CompactibleFreeListSpace, _smallLinearAllocBlock, > LinearAllocBlock) \ > > + nonstatic_field(CompactibleFreeListSpace, _dictionary, > FreeBlockDictionary<FreeChunk>*) > > #define VM_TYPES_CMS(declare_type, \ > > Regards, > > Yunda > > > ------------------------------------------------------------------------ > > This email (including any attachments) is confidential and may be > legally privileged. If you received this email in error, please delete > it immediately and do not copy it or use it for any purpose or > disclose its contents to any other person. Thank you. > > 本电邮(包括任何附件)可能含有机密资料并受法律保护。如您不是正确的收件 > 人,请您立即删除本邮件。请不要将本电邮进行复制并用作任何其 他用途、或 > 透露本邮件之内容。谢谢。