性能问答>Unsafe.defineClass挂起-反射速度慢>
4回复
10月前

Unsafe.defineClass挂起-反射速度慢



https://heapdump.cn/question/258925

这个链接一样的问题

在Java 8 / SpringBoot / Tomcat 8.5 Web应用程序中观察到运行时间极长的请求(> 30s)。而且卡顿时间会随程序运行时间变久。但是大部分请求的响应还是正常的。卡顿发生时的cpu负载增长到100%,过几分钟后会自己降下来。

Threaddumps显示Unsafe.defineClass正在挂起:

"http-nio-8080-exec-9" #254 daemon prio=5 os_prio=0 tid=0x00007f8a98b4f000 nid=0x2258 runnable [0x00007f89fb0b0000]
   java.lang.Thread.State: RUNNABLE
	at sun.misc.Unsafe.defineClass(Native Method)
	at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:63)
	at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:399)
	at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:394)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:393)
	at sun.reflect.MethodAccessorGenerator.generateMethod(MethodAccessorGenerator.java:75)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:53)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.beans.BeanUtils.copyProperties(BeanUtils.java:618)
	at org.springframework.beans.BeanUtils.copyProperties(BeanUtils.java:538)
	at com.haigui.stateaction.action_impl.DisputeSubmit.insertDisputeInfo(DisputeSubmit.java:128)

pstack 输出的调用栈如下
image.png

1082 阅读
请先登录,再评论

问题解决了吗

10月前

看了下GetThreadLocalStoreage()的本地实现,如果是长时间hang在这个函数上,那么这个函数的实现中只有一个点会造成hang:
ThreadInVMfromNative __tiv(current_thread);
当线程从本地进入到JVM时,可能此时的JVM正在或准备要求进入安全点时,本地线程就可能会hang,hang时看看有没有GC发生?CPU使用率高不高,如果高,那就看下是GC线程使用率高还是用户线程使用率高

10月前
回复 X.M.:

这就奇怪了,这个问题好浮现吗?你能弄个简单Demo吗,想看看到底是啥问题

10月前回复
回复 鸠摩:

出现问题的时候,就只有那个对应处理请求的业务线程的CPU高,分析了年轻代、老年代、元数据区都是正常的,垃圾回收线程的CPU也是正常的

10月前回复