Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在本机方法上分析卡住的线程_Java_Profiling_Native_Drools - Fatal编程技术网

Java 在本机方法上分析卡住的线程

Java 在本机方法上分析卡住的线程,java,profiling,native,drools,Java,Profiling,Native,Drools,我正在使用tomcat和Java1.7.0_80。该产品是使用drools的规则引擎。 加载系统后,我的速度变慢了。我进行了一次线程转储,看到许多线程如下所示: http-bio-9980-exec-48" daemon prio=10 tid=0x00007fa8b43a3000 nid=0x10299 runnable [0x00007fa9522c5000] java.lang.Thread.State: RUNNABLE at java.lang.Clas

我正在使用tomcat和Java1.7.0_80。该产品是使用drools的规则引擎。 加载系统后,我的速度变慢了。我进行了一次线程转储,看到许多线程如下所示:

http-bio-9980-exec-48" daemon prio=10 tid=0x00007fa8b43a3000 nid=0x10299             runnable [0x00007fa9522c5000]
java.lang.Thread.State: RUNNABLE
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2595)
    at java.lang.Class.getConstructor0(Class.java:2895)
    at java.lang.Class.newInstance(Class.java:354)
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
    at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:396)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:395)
    at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:77)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:46)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
.
.
.
我认为这些线程被卡住了,所以我做了另一个线程转储(看看本机方法会发生什么):


有人能告诉我为什么这里有争论吗?

好吧,让我试着回答你。我要做一个假设,最上面的条目是最里面的调用

在反射中,调用一些方法,很难说是什么,但是 这需要创建一个或多个方法并运行它们,以及 这需要创建一个新的java.lang.Class实例 这需要获取类的构造函数,并且 这会浸入JVM,而JVM 点击一个事件,将其放入debugMonitor,其中 很可能是在线程等待中 挂起调试器中的用户输入

所以也许你需要看另一条线索? 或者这是正确的,您只需要忽略事件回调之后的级别。 在任何情况下,我都会查看反射,看看它是否引用了您的代码。 这就是你需要找到的。
深入研究您认为工作正常的系统代码是没有好处的。

问题是我在调试模式(jpda start)下启动了tomcat。即使我没有附加调试器,它也会导致问题。 当我在没有调试的情况下启动tomcat时,我没有注意到卡住的方法

00007faa1dabf6d5      __pthread_cond_wait + 0xc5
0x00007faa1cb638ad      _ZN15JvmtiRawMonitor9raw_enterEP6Thread + 0x25d
0x00007faa1cb3f63d      _ZN8JvmtiEnv15RawMonitorEnterEP15JvmtiRawMonitor + 0xad
0x00007faa1b7089a8      debugMonitorEnter + 0x38
0x00007faa1b6f5205      event_callback + 0xe5
0x00007faa1b6f5e3e      cbClassPrepare + 0x8e
0x00007faa1cb548c4      _ZN11JvmtiExport18post_class_prepareEP10JavaThreadP12klassOopDesc + 0x1b4
0x00007faa1ca1de8e      _ZN13instanceKlass15link_class_implE19instanceKlassHandlebP6Thread + 0x45e
0x00007faa1cae55c7      JVM_GetClassDeclaredConstructors + 0x1b7
0x00007faa180cac39      * java.lang.Class.getDeclaredConstructors0(boolean) bci:0 (Interpreted frame)