I assume it's a simple ThreadInfo then a simple text form would work; if not, you can use the format NB use if you have the reader.

Mandy

On 10/22/18 7:53 AM, Sven Reimers wrote:
Hi Mandy,
will try to get a sample to you.

Which format do you prefer?

Thanks for helping

-Sven


Mandy Chung <mandy.ch...@oracle.com <mailto:mandy.ch...@oracle.com>> schrieb am So., 21. Okt. 2018, 23:26:

    Hi Sven,

    Do you have a sample ThreadInfo to reproduce this issue?   That
    will be helpful.  JMX monitoring is not impacted as far as I can
    tell.  NB profiling is using this internal API
    `sun.management.ThreadInfoCompositeData::toCompositeData` which
    may be unused since JMX supports MXBean.

    Mandy

    On 10/21/18 5:38 PM, Sven Reimers wrote:
    Hi,

    one more problem to go

    After applying the proposed fix for the
    ThreadINfoCompositeData.compositeTyoe() the following exception
    is raised:

    java.lang.reflect.InvocationTargetException
    at
    java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native
    Method)
    at
    
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
    
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at
    
org.netbeans.modules.sampler.SamplesOutputStream.toCompositeData(SamplesOutputStream.java:178)
    at
    
org.netbeans.modules.sampler.SamplesOutputStream.access$400(SamplesOutputStream.java:44)
    at
    
org.netbeans.modules.sampler.SamplesOutputStream$Sample.writeToStream(SamplesOutputStream.java:285)
    at
    
org.netbeans.modules.sampler.SamplesOutputStream$Sample.access$300(SamplesOutputStream.java:253)
    at
    
org.netbeans.modules.sampler.SamplesOutputStream.close(SamplesOutputStream.java:202)
    at
    org.netbeans.modules.sampler.Sampler.stopSampling(Sampler.java:231)
    at org.netbeans.modules.sampler.Sampler.stop(Sampler.java:207)
    at
    
org.netbeans.core.ui.sampler.SelfSamplerAction$1.doInBackground(SelfSamplerAction.java:90)
    at java.desktop/javax.swing.SwingWorker$1.call(SwingWorker.java:304)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.desktop/javax.swing.SwingWorker.run(SwingWorker.java:343)
    at
    
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at
    
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:835)
    Caused by: java.lang.AssertionError:
    javax.management.openmbean.OpenDataException: Argument value of
    wrong type for item lockInfo: value false, type
    
javax.management.openmbean.CompositeType(name=java.lang.management.LockInfo,items=((itemName=className,itemType=javax.management.openmbean.SimpleType(name=java.lang.String)),(itemName=identityHashCode,itemType=javax.management.openmbean.SimpleType(name=java.lang.Integer))))
    at
    
java.management/sun.management.ThreadInfoCompositeData.getCompositeData(ThreadInfoCompositeData.java:135)
    at
    
java.management/sun.management.ThreadInfoCompositeData.toCompositeData(ThreadInfoCompositeData.java:72)
    ... 18 more
    Caused by: javax.management.openmbean.OpenDataException: Argument
    value of wrong type for item lockInfo: value false, type
    
javax.management.openmbean.CompositeType(name=java.lang.management.LockInfo,items=((itemName=className,itemType=javax.management.openmbean.SimpleType(name=java.lang.String)),(itemName=identityHashCode,itemType=javax.management.openmbean.SimpleType(name=java.lang.Integer))))
    at
    
java.management/javax.management.openmbean.CompositeDataSupport.<init>(CompositeDataSupport.java:235)
    at
    
java.management/javax.management.openmbean.CompositeDataSupport.<init>(CompositeDataSupport.java:118)
    at
    
java.management/sun.management.ThreadInfoCompositeData.getCompositeData(ThreadInfoCompositeData.java:130)
    ... 19 more

    Seems the sequence of values is broken for
    ThreadInfoCompoositeData also.

    Changing the sequence so that lockInfoData is after isNative
    fixes the problem:

           final Object[] threadInfoItemValues = {
                threadInfo.getThreadId(),
                threadInfo.getThreadName(),
    threadInfo.getThreadState().name(),
                threadInfo.getBlockedTime(),
                threadInfo.getBlockedCount(),
                threadInfo.getWaitedTime(),
                threadInfo.getWaitedCount(),
                threadInfo.getLockName(),
                threadInfo.getLockOwnerId(),
                threadInfo.getLockOwnerName(),
                stackTraceData,
                threadInfo.isSuspended(),
                threadInfo.isInNative(),
                lockInfoData,
                lockedMonitorsData,
                lockedSyncsData,
                threadInfo.isDaemon(),
                threadInfo.getPriority(),
            };

    With both of this fixes in place I can finally get the self
    sampling in NetBeans to work on JDK 12.. (and 11)

    Thanks for looking into this

    -Sven
-- Sven Reimers

    * Senior Expert Software Architect
    * Java Champion
    * JUG Leader JUG Bodensee: http://www.jug-bodensee.de
    * Duke's Choice Award Winner 2009


Reply via email to