alibaba / jvm-sandbox

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

用agent 模式启动后,自定义模块没生效。 #438

Closed dennis-lee-1983 closed 5 months ago

dennis-lee-1983 commented 1 year ago

用agent 模式启动后,自己的模块从log 看已经加载,但是代码没有被执行。attach 模式则没问题。sandbox.log如下 2023-09-06 14:20:37 default INFO initializing logback success. file=/Users/dennis/.opt/sandbox/cfg/sandbox-logback.xml; 2023-09-06 14:20:37 default INFO initializing server. cfg=;mode=agent;sandbox_home=/Users/dennis/.opt/sandbox;user_module=/Users/dennis/.opt/sandbox/sandbox-module\;/Users/dennis/.opt/sandbox/user-module\;;cfg=/Users/dennis/.opt/sandbox/cfg;provider=/Users/dennis/.opt/sandbox/provider;namespace=default;system_module=/Users/dennis/.opt/sandbox/module;unsafe.enable=false #true;server.charset=UTF-8; 2023-09-06 14:20:37 default INFO loading provider[com.alibaba.jvm.sandbox.provider.api.ModuleJarLoadingChain] was success from provider-jar[/Users/dennis/.opt/sandbox/provider/sandbox-mgr-provider.jar], impl=com.alibaba.jvm.sandbox.provider.mgr.EmptyModuleJarLoadingChain 2023-09-06 14:20:37 default INFO loading provider[com.alibaba.jvm.sandbox.provider.api.ModuleLoadingChain] was success from provider-jar[/Users/dennis/.opt/sandbox/provider/sandbox-mgr-provider.jar], impl=com.alibaba.jvm.sandbox.provider.mgr.EmptyModuleLoadingChain 2023-09-06 14:20:37 default INFO loading provider-jar[/Users/dennis/.opt/sandbox/provider/sandbox-mgr-provider.jar] was success. 2023-09-06 14:20:39 default INFO initializing ws-http-handler. path=/sandbox/default/module/websocket/* 2023-09-06 14:20:39 default INFO initializing http-handler. path=/sandbox/default/module/http/* 2023-09-06 14:20:39 default INFO resetting all loaded modules:[] 2023-09-06 14:20:39 default INFO force unloading all loaded modules:[] 2023-09-06 14:20:39 default INFO loading module-lib=/Users/dennis/.opt/sandbox/module, found 1 module-jar files : /Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar 2023-09-06 14:20:39 default INFO prepare loading module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO IMLCB: found new module, prepare to load. module=sandbox-control;class=class com.alibaba.jvm.sandbox.module.mgr.ControlModule;loader=ModuleJarClassLoader[crc32=705482150;file=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar;]; 2023-09-06 14:20:40 default INFO loading module, module=sandbox-control;class=com.alibaba.jvm.sandbox.module.mgr.ControlModule;module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO active module when OnLoad, module=sandbox-control 2023-09-06 14:20:40 default INFO active module, module=sandbox-control;class=com.alibaba.jvm.sandbox.module.mgr.ControlModule;module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO IMLCB: found new module, prepare to load. module=sandbox-info;class=class com.alibaba.jvm.sandbox.module.mgr.InfoModule;loader=ModuleJarClassLoader[crc32=705482150;file=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar;]; 2023-09-06 14:20:40 default INFO loading module, module=sandbox-info;class=com.alibaba.jvm.sandbox.module.mgr.InfoModule;module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO active module when OnLoad, module=sandbox-info 2023-09-06 14:20:40 default INFO active module, module=sandbox-info;class=com.alibaba.jvm.sandbox.module.mgr.InfoModule;module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO IMLCB: found new module, prepare to load. module=sandbox-module-mgr;class=class com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule;loader=ModuleJarClassLoader[crc32=705482150;file=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar;]; 2023-09-06 14:20:40 default INFO loading module, module=sandbox-module-mgr;class=com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule;module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO active module when OnLoad, module=sandbox-module-mgr 2023-09-06 14:20:40 default INFO active module, module=sandbox-module-mgr;class=com.alibaba.jvm.sandbox.module.mgr.ModuleMgrModule;module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar; 2023-09-06 14:20:40 default INFO loaded module-jar completed, loaded 3 module in module-jar=/Users/dennis/.opt/sandbox/module/sandbox-mgr-module.jar, modules=[sandbox-control, sandbox-info, sandbox-module-mgr] 2023-09-06 14:20:40 default INFO loading module-lib=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar, found 1 module-jar files : /Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar 2023-09-06 14:20:40 default INFO prepare loading module-jar=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar; 2023-09-06 14:20:40 default INFO IMLCB: found new module, prepare to load. module=kafka-timeout-scenario-inject;class=class org.example.KafkaTimeoutScenarioInjectAgent;loader=ModuleJarClassLoader[crc32=1844664214;file=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar;]; 2023-09-06 14:20:40 default INFO loading module, module=kafka-timeout-scenario-inject;class=org.example.KafkaTimeoutScenarioInjectAgent;module-jar=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar; 2023-09-06 14:20:40 default INFO active module when OnLoad, module=kafka-timeout-scenario-inject 2023-09-06 14:20:40 default INFO active module, module=kafka-timeout-scenario-inject;class=org.example.KafkaTimeoutScenarioInjectAgent;module-jar=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar; 2023-09-06 14:20:40 default INFO IMLCB: found new module, prepare to load. module=mock-logger;class=class org.example.MockLogger;loader=ModuleJarClassLoader[crc32=1844664214;file=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar;]; 2023-09-06 14:20:40 default INFO loading module, module=mock-logger;class=org.example.MockLogger;module-jar=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar; 2023-09-06 14:20:40 default INFO active module when OnLoad, module=mock-logger 2023-09-06 14:20:40 default INFO active module, module=mock-logger;class=org.example.MockLogger;module-jar=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar; 2023-09-06 14:20:40 default INFO loaded module-jar completed, loaded 2 module in module-jar=/Users/dennis/.opt/sandbox/user-module/demo-1.0-SNAPSHOT-jar-with-dependencies.jar, modules=[kafka-timeout-scenario-inject, mock-logger] 2023-09-06 14:20:40 default INFO initialized server. actual bind to localhost:62583 2023-09-06 14:20:40 default INFO server[127.0.0.1:0] bind success. 其中demo-1.0-SNAPSHOT-jar-with-dependencies.jar就是自己编写的demo module jar包,kafka-timeout-scenario-injectmock-logger是内置的两个module。

dennis-lee-1983 commented 1 year ago

补充:增加了moduleLoaded 的时候输入日志的消息,重新启动后能够在目标进程上补充到这个日志 代码 @Override public void loadCompleted() { for(int x=0;x<100;x++){ System.out.println("module loaded"+x); } } 目标进程日志输出 module loaded0 module loaded1 module loaded2 module loaded3 module loaded4 module loaded5 module loaded6 module loaded7 module loaded8 module loaded9 module loaded10 module loaded11 module loaded12 module loaded13 module loaded14 module loaded15 module loaded16 module loaded17 module loaded18 module loaded19 module loaded20 module loaded21 module loaded22 module loaded23 module loaded24 module loaded25 module loaded26 module loaded27 module loaded28 module loaded29 module loaded30 module loaded31 module loaded32 module loaded33 module loaded34 module loaded35 module loaded36 module loaded37 module loaded38 module loaded39 module loaded40 module loaded41 module loaded42 module loaded43 module loaded44 module loaded45 module loaded46 module loaded47 module loaded48 module loaded49 module loaded50 module loaded51 module loaded52 module loaded53 module loaded54 module loaded55 module loaded56 module loaded57 module loaded58 module loaded59 module loaded60 module loaded61 module loaded62 module loaded63 module loaded64 module loaded65 module loaded66 module loaded67 module loaded68 module loaded69 module loaded70 module loaded71 module loaded72 module loaded73 module loaded74 module loaded75 module loaded76 module loaded77 module loaded78 module loaded79 module loaded80 module loaded81 module loaded82 module loaded83 module loaded84 module loaded85 module loaded86 module loaded87 module loaded88 module loaded89 module loaded90 module loaded91 module loaded92 module loaded93 module loaded94 module loaded95 module loaded96 module loaded97 module loaded98 module loaded99

oldmanpushcart commented 5 months ago

从日志上看demo的两个module都已经被加载了,而且loadCompleted()也应该被正常执行。 但你其实是希望能从日志中观察到你期待的

module loader0
module loaded1
...

这些信息在日志中出现对吧?

那你应该打日志啊,System.out.println(...)这个只是在控制台输出,并不会输出到日志中啊