alibaba / jvm-sandbox

Real - time non-invasive AOP framework container based on JVM
GNU Lesser General Public License v3.0
6.69k stars 1.55k forks source link

多个java agent 挂载服务出现crash #433

Closed primitiveheart closed 2 months ago

primitiveheart commented 1 year ago

jvm 版本 1.4.0 jdk 版本 17 image

Current thread (0x00007f8e21ba4690): JavaThread "repeater-common-pool-1" [_thread_in_vm, id=6634, stack(0x00007f8bc8522000,0x00007f8bc8623000)]

Stack: [0x00007f8bc8522000,0x00007f8bc8623000], sp=0x00007f8bc8620840, free space=1018k Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) V [libjvm.so+0xd32a29] Symbol::as_C_string() const+0x9 V [libjvm.so+0xa0722d] symcmp(void const, void const)+0x1d

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) j sun.instrument.InstrumentationImpl.retransformClasses0(J[Ljava/lang/Class;)V+0 java.instrument@17 j sun.instrument.InstrumentationImpl.retransformClasses([Ljava/lang/Class;)V+29 java.instrument@17 j com.alibaba.jvm.sandbox.core.manager.impl.DefaultModuleEventWatcher.reTransformClasses(ILjava/util/List;Lcom/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress;)V+194 j com.alibaba.jvm.sandbox.core.manager.impl.DefaultModuleEventWatcher.watch(Lcom/alibaba/jvm/sandbox/core/util/matcher/Matcher;Lcom/alibaba/jvm/sandbox/api/listener/EventListener;Lcom/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress;[Lcom/alibaba/jvm/sandbox/api/event/Event$Type;)I+217 j com.alibaba.jvm.sandbox.core.manager.impl.DefaultModuleEventWatcher.watch(Lcom/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition;Lcom/alibaba/jvm/sandbox/api/listener/EventListener;Lcom/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress;[Lcom/alibaba/jvm/sandbox/api/event/Event$Type;)I+14 j jdk.internal.reflect.GeneratedMethodAccessor100.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;+64 J 11116 c2 java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object; java.base@17 (65 bytes) @ 0x00007f8e11825cdc [0x00007f8e11825a80+0x000000000000025c] j com.alibaba.jvm.sandbox.core.util.SandboxProtector.lambda$protectProxy$1(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+10 j com.alibaba.jvm.sandbox.core.util.SandboxProtector$$Lambda$353+0x00000008010dea40.invoke(Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object;+11 j jdk.proxy3.$Proxy27.watch(Lcom/alibaba/jvm/sandbox/api/listener/ext/EventWatchCondition;Lcom/alibaba/jvm/sandbox/api/listener/EventListener;Lcom/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress;[Lcom/alibaba/jvm/sandbox/api/event/Event$Type;)I+29 jdk.proxy3 j com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder.build(Lcom/alibaba/jvm/sandbox/api/listener/EventListener;Lcom/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress;[Lcom/alibaba/jvm/sandbox/api/event/Event$Type;)Lcom/alibaba/jvm/sandbox/api/listener/ext/EventWatcher;+11 j com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder.access$400(Lcom/alibaba/jvm/sandbox/api/listener/ext/EventWatchBuilder;Lcom/alibaba/jvm/sandbox/api/listener/EventListener;Lcom/alibaba/jvm/sandbox/api/resource/ModuleEventWatcher$Progress;[Lcom/alibaba/jvm/sandbox/api/event/Event$Type;)Lcom/alibaba/jvm/sandbox/api/listener/ext/EventWatcher;+4 j com.alibaba.jvm.sandbox.api.listener.ext.EventWatchBuilder$BuildingForBehavior.onWatch(Lcom/alibaba/jvm/sandbox/api/listener/EventListener;[Lcom/alibaba/jvm/sandbox/api/event/Event$Type;)Lcom/alibaba/jvm/sandbox/api/listener/ext/EventWatcher;+7 j com.test.jvm.sandbox.repeater.plugin.core.trace.TtlForkJoinAdvice.watch(Lcom/test/jvm/sandbox/repeater/plugin/domain/RepeaterConfig;)V+83 j com.test.jvm.sandbox.repeater.module.RepeaterModule.initialize(Lcom/test/jvm/sandbox/repeater/plugin/domain/RepeaterConfig;)V+412 j com.test.jvm.sandbox.repeater.module.RepeaterModule.lambda$loadCompleted$0()V+81 j com.test.jvm.sandbox.repeater.module.RepeaterModule$$Lambda$355+0x00000008011a64c8.run()V+4 j java.util.concurrent.ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V+92 java.base@17 j java.util.concurrent.ThreadPoolExecutor$Worker.run()V+36 java.base@17 j java.lang.Thread.run()V+11 java.base@17 v ~StubRoutines::call_stub

麻烦帮忙看一下哈,多谢

z529192557 commented 11 months ago

一般这种情况,是多agent对同一个class进行字节码织入,会导致难以预见的class格式问题(与虚拟机规范相冲突),这种情况下,需要将织入后的class字节码在进行虚拟机验证之前输出到文件中保存下来,才能具体定位根因,否则就只能从使用方式上来避免这种情况出现(规避对同一个class进行多次增强)

primitiveheart commented 11 months ago

嗯嗯,多谢提供思路,目前已经定位到具体代码了,多谢