Closed dongshuke closed 2 years ago
jdk17一直包含在持续集成中,且是成功的。
我本地用java17测试也正常,没法复现你的异常。
建议提供更多信息,如jvm启动参数详细信息,javaagent启动参数配置。
建议提供更多信息,如jvm启动参数详细信息,javaagent启动参数配置。
尽量给出完整的信息,尤其是运行出错相关信息、完整的异常栈。 @dongshuke
类循环加载ClassCircularityError
(Java Agent
实现方式的顽疾😖虽然出现的概率低)和业务运行逻辑代码相关,剥离复现比较麻烦。
解决方法(workaroud)可以是: @dongshuke @wuwen5
Java Agent
跳过处理 会导致『类循环加载』的类。
(TTL Agent
不需要增强ConcurrentHashMap$ForwardingNode
。)premain
中提前主动加载掉 会导致『类循环加载』的类。
提前加载后面不会再处理了,效果上也是跳过了。Java Agent
的正确性 就好。相关的 issue:
这边发个版本,再加一些 workaroud 的逻辑。
手动添加 jvm 启动参数
-javaagent:C:/application/development/maven/repository/com/alibaba/transmittable-thread-local/2.12.6/transmittable-thread-local-2.12.6.jar
IDEA生成启动参数:
非debug:
C:\application\development\jdk\jdk-17.0.2\bin\java.exe
-javaagent:C:/application/development/maven/repository/com/alibaba/transmittable-thread-local/2.12.6/transmittable-thread-local-2.12.6.jar
"-javaagent:C:\application\development\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar=62134:C:\application\development\JetBrains\IntelliJ IDEA 2021.2.3\bin"
-Dfile.encoding=UTF-8
-classpath
C:\application\development\projects\idea\练习\nacos-dubbo\consumer-1\target\test-classes;
C:\application\development\projects\idea\练习\nacos-dubbo\consumer-1\target\classes;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-starter-dubbo\2021.1\spring-cloud-starter-dubbo-2021.1.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-openfeign-core\3.1.1\spring-cloud-openfeign-core-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.4\spring-boot-autoconfigure-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot\2.6.4\spring-boot-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-aop\2.6.4\spring-boot-starter-aop-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\spring-aop\5.3.16\spring-aop-5.3.16.jar;
C:\application\development\maven\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;
C:\application\development\maven\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;
C:\application\development\maven\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;
C:\application\development\maven\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;
C:\application\development\maven\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;
C:\application\development\maven\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo\3.0.6\dubbo-3.0.6.jar;
C:\application\development\maven\repository\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;
C:\application\development\maven\repository\org\javassist\javassist\3.28.0-GA\javassist-3.28.0-GA.jar;
C:\application\development\maven\repository\com\google\code\gson\gson\2.8.9\gson-2.8.9.jar;
C:\application\development\maven\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;
C:\application\development\maven\repository\com\alibaba\fastjson\1.2.70\fastjson-1.2.70.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-starter\3.0.6\dubbo-spring-boot-starter-3.0.6.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-autoconfigure\3.0.6\dubbo-spring-boot-autoconfigure-3.0.6.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-autoconfigure-compatible\3.0.6\dubbo-spring-boot-autoconfigure-compatible-3.0.6.jar;
C:\application\development\maven\repository\io\netty\netty-all\4.1.74.Final\netty-all-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-buffer\4.1.74.Final\netty-buffer-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec\4.1.74.Final\netty-codec-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-dns\4.1.74.Final\netty-codec-dns-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-haproxy\4.1.74.Final\netty-codec-haproxy-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-http\4.1.74.Final\netty-codec-http-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-http2\4.1.74.Final\netty-codec-http2-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-memcache\4.1.74.Final\netty-codec-memcache-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-mqtt\4.1.74.Final\netty-codec-mqtt-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-redis\4.1.74.Final\netty-codec-redis-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-smtp\4.1.74.Final\netty-codec-smtp-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-socks\4.1.74.Final\netty-codec-socks-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-stomp\4.1.74.Final\netty-codec-stomp-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-xml\4.1.74.Final\netty-codec-xml-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-common\4.1.74.Final\netty-common-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-handler\4.1.74.Final\netty-handler-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-tcnative-classes\2.0.48.Final\netty-tcnative-classes-2.0.48.Final.jar;
C:\application\development\maven\repository\io\netty\netty-handler-proxy\4.1.74.Final\netty-handler-proxy-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-resolver\4.1.74.Final\netty-resolver-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns\4.1.74.Final\netty-resolver-dns-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport\4.1.74.Final\netty-transport-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-rxtx\4.1.74.Final\netty-transport-rxtx-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-sctp\4.1.74.Final\netty-transport-sctp-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-udt\4.1.74.Final\netty-transport-udt-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-classes-epoll\4.1.74.Final\netty-transport-classes-epoll-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-unix-common\4.1.74.Final\netty-transport-native-unix-common-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-classes-kqueue\4.1.74.Final\netty-transport-classes-kqueue-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns-classes-macos\4.1.74.Final\netty-resolver-dns-classes-macos-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-epoll\4.1.74.Final\netty-transport-native-epoll-4.1.74.Final-linux-x86_64.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-epoll\4.1.74.Final\netty-transport-native-epoll-4.1.74.Final-linux-aarch_64.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-kqueue\4.1.74.Final\netty-transport-native-kqueue-4.1.74.Final-osx-x86_64.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-kqueue\4.1.74.Final\netty-transport-native-kqueue-4.1.74.Final-osx-aarch_64.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns-native-macos\4.1.74.Final\netty-resolver-dns-native-macos-4.1.74.Final-osx-x86_64.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns-native-macos\4.1.74.Final\netty-resolver-dns-native-macos-4.1.74.Final-osx-aarch_64.jar;
C:\application\development\maven\repository\io\github\openfeign\feign-jaxrs2\11.8\feign-jaxrs2-11.8.jar;
C:\application\development\maven\repository\io\github\openfeign\feign-core\11.8\feign-core-11.8.jar;
C:\application\development\maven\repository\io\github\openfeign\feign-jaxrs\11.8\feign-jaxrs-11.8.jar;
C:\application\development\maven\repository\javax\ws\rs\javax.ws.rs-api\2.1.1\javax.ws.rs-api-2.1.1.jar;
C:\application\development\projects\idea\练习\nacos-dubbo\common\target\classes;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2021.1\spring-cloud-starter-alibaba-nacos-discovery-2021.1.jar;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2021.1\spring-cloud-alibaba-commons-2021.1.jar;
C:\application\development\maven\repository\com\alibaba\nacos\nacos-client\2.0.4\nacos-client-2.0.4.jar;
C:\application\development\maven\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\core\jackson-core\2.13.1\jackson-core-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\core\jackson-databind\2.13.1\jackson-databind-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.1\jackson-annotations-2.13.1.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpcore\4.4.15\httpcore-4.4.15.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpcore-nio\4.4.15\httpcore-nio-4.4.15.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;
C:\application\development\maven\repository\org\reflections\reflections\0.9.11\reflections-0.9.11.jar;
C:\application\development\maven\repository\com\google\guava\guava\20.0\guava-20.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient\0.12.0\simpleclient-0.12.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient_tracer_otel\0.12.0\simpleclient_tracer_otel-0.12.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient_tracer_common\0.12.0\simpleclient_tracer_common-0.12.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient_tracer_otel_agent\0.12.0\simpleclient_tracer_otel_agent-0.12.0.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-commons\3.1.1\spring-cloud-commons-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\security\spring-security-crypto\5.6.2\spring-security-crypto-5.6.2.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-context\3.1.1\spring-cloud-context-3.1.1.jar;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2021.1\spring-cloud-starter-alibaba-nacos-config-2021.1.jar;
C:\application\development\maven\repository\com\alibaba\transmittable-thread-local\2.12.6\transmittable-thread-local-2.12.6.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-web\2.6.4\spring-boot-starter-web-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter\2.6.4\spring-boot-starter-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-logging\2.6.4\spring-boot-starter-logging-2.6.4.jar;
C:\application\development\maven\repository\ch\qos\logback\logback-classic\1.2.10\logback-classic-1.2.10.jar;
C:\application\development\maven\repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;
C:\application\development\maven\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.1\log4j-to-slf4j-2.17.1.jar;
C:\application\development\maven\repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;
C:\application\development\maven\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;
C:\application\development\maven\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;
C:\application\development\maven\repository\org\springframework\spring-core\5.3.16\spring-core-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-jcl\5.3.16\spring-jcl-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-json\2.6.4\spring-boot-starter-json-2.6.4.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.1\jackson-datatype-jdk8-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.1\jackson-datatype-jsr310-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.1\jackson-module-parameter-names-2.13.1.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-tomcat\2.6.4\spring-boot-starter-tomcat-2.6.4.jar;
C:\application\development\maven\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.58\tomcat-embed-core-9.0.58.jar;
C:\application\development\maven\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.58\tomcat-embed-el-9.0.58.jar;
C:\application\development\maven\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.58\tomcat-embed-websocket-9.0.58.jar;
C:\application\development\maven\repository\org\springframework\spring-web\5.3.16\spring-web-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-beans\5.3.16\spring-beans-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-webmvc\5.3.16\spring-webmvc-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-context\5.3.16\spring-context-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-expression\5.3.16\spring-expression-5.3.16.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-actuator\3.0.6\dubbo-spring-boot-actuator-3.0.6.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-actuator-compatible\3.0.6\dubbo-spring-boot-actuator-compatible-3.0.6.jar;
C:\application\development\maven\repository\cn\hutool\hutool-all\5.8.3\hutool-all-5.8.3.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.1\spring-cloud-starter-bootstrap-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-starter\3.1.1\spring-cloud-starter-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\security\spring-security-rsa\1.0.10.RELEASE\spring-security-rsa-1.0.10.RELEASE.jar;
C:\application\development\maven\repository\org\bouncycastle\bcpkix-jdk15on\1.68\bcpkix-jdk15on-1.68.jar;
C:\application\development\maven\repository\org\bouncycastle\bcprov-jdk15on\1.68\bcprov-jdk15on-1.68.jar
com.xiao.pang.Main
debug:
C:\application\development\jdk\jdk-17.0.2\bin\java.exe
-agentlib:jdwp=transport=dt_socket,address=127.0.0.1:62897,suspend=y,server=n
-javaagent:C:/application/development/maven/repository/com/alibaba/transmittable-thread-local/2.12.6/transmittable-thread-local-2.12.6.jar
-javaagent:C:\Users\86583\AppData\Local\JetBrains\IntelliJIdea2021.2\captureAgent\debugger-agent.jar
-Dfile.encoding=UTF-8
-classpath
"C:\application\development\projects\idea\练习\nacos-dubbo\consumer-1\target\test-classes;
C:\application\development\projects\idea\练习\nacos-dubbo\consumer-1\target\classes;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-starter-dubbo\2021.1\spring-cloud-starter-dubbo-2021.1.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-openfeign-core\3.1.1\spring-cloud-openfeign-core-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-autoconfigure\2.6.4\spring-boot-autoconfigure-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot\2.6.4\spring-boot-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-aop\2.6.4\spring-boot-starter-aop-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\spring-aop\5.3.16\spring-aop-5.3.16.jar;
C:\application\development\maven\repository\org\aspectj\aspectjweaver\1.9.7\aspectjweaver-1.9.7.jar;
C:\application\development\maven\repository\io\github\openfeign\form\feign-form-spring\3.8.0\feign-form-spring-3.8.0.jar;
C:\application\development\maven\repository\io\github\openfeign\form\feign-form\3.8.0\feign-form-3.8.0.jar;
C:\application\development\maven\repository\commons-fileupload\commons-fileupload\1.4\commons-fileupload-1.4.jar;
C:\application\development\maven\repository\commons-io\commons-io\2.2\commons-io-2.2.jar;
C:\application\development\maven\repository\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo\3.0.6\dubbo-3.0.6.jar;
C:\application\development\maven\repository\com\alibaba\spring\spring-context-support\1.0.11\spring-context-support-1.0.11.jar;
C:\application\development\maven\repository\org\javassist\javassist\3.28.0-GA\javassist-3.28.0-GA.jar;
C:\application\development\maven\repository\com\google\code\gson\gson\2.8.9\gson-2.8.9.jar;
C:\application\development\maven\repository\org\yaml\snakeyaml\1.29\snakeyaml-1.29.jar;
C:\application\development\maven\repository\com\alibaba\fastjson\1.2.70\fastjson-1.2.70.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-starter\3.0.6\dubbo-spring-boot-starter-3.0.6.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-autoconfigure\3.0.6\dubbo-spring-boot-autoconfigure-3.0.6.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-autoconfigure-compatible\3.0.6\dubbo-spring-boot-autoconfigure-compatible-3.0.6.jar;
C:\application\development\maven\repository\io\netty\netty-all\4.1.74.Final\netty-all-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-buffer\4.1.74.Final\netty-buffer-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec\4.1.74.Final\netty-codec-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-dns\4.1.74.Final\netty-codec-dns-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-haproxy\4.1.74.Final\netty-codec-haproxy-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-http\4.1.74.Final\netty-codec-http-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-http2\4.1.74.Final\netty-codec-http2-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-memcache\4.1.74.Final\netty-codec-memcache-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-mqtt\4.1.74.Final\netty-codec-mqtt-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-redis\4.1.74.Final\netty-codec-redis-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-smtp\4.1.74.Final\netty-codec-smtp-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-socks\4.1.74.Final\netty-codec-socks-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-stomp\4.1.74.Final\netty-codec-stomp-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-codec-xml\4.1.74.Final\netty-codec-xml-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-common\4.1.74.Final\netty-common-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-handler\4.1.74.Final\netty-handler-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-tcnative-classes\2.0.48.Final\netty-tcnative-classes-2.0.48.Final.jar;
C:\application\development\maven\repository\io\netty\netty-handler-proxy\4.1.74.Final\netty-handler-proxy-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-resolver\4.1.74.Final\netty-resolver-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns\4.1.74.Final\netty-resolver-dns-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport\4.1.74.Final\netty-transport-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-rxtx\4.1.74.Final\netty-transport-rxtx-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-sctp\4.1.74.Final\netty-transport-sctp-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-udt\4.1.74.Final\netty-transport-udt-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-classes-epoll\4.1.74.Final\netty-transport-classes-epoll-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-unix-common\4.1.74.Final\netty-transport-native-unix-common-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-classes-kqueue\4.1.74.Final\netty-transport-classes-kqueue-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns-classes-macos\4.1.74.Final\netty-resolver-dns-classes-macos-4.1.74.Final.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-epoll\4.1.74.Final\netty-transport-native-epoll-4.1.74.Final-linux-x86_64.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-epoll\4.1.74.Final\netty-transport-native-epoll-4.1.74.Final-linux-aarch_64.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-kqueue\4.1.74.Final\netty-transport-native-kqueue-4.1.74.Final-osx-x86_64.jar;
C:\application\development\maven\repository\io\netty\netty-transport-native-kqueue\4.1.74.Final\netty-transport-native-kqueue-4.1.74.Final-osx-aarch_64.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns-native-macos\4.1.74.Final\netty-resolver-dns-native-macos-4.1.74.Final-osx-x86_64.jar;
C:\application\development\maven\repository\io\netty\netty-resolver-dns-native-macos\4.1.74.Final\netty-resolver-dns-native-macos-4.1.74.Final-osx-aarch_64.jar;
C:\application\development\maven\repository\io\github\openfeign\feign-jaxrs2\11.8\feign-jaxrs2-11.8.jar;
C:\application\development\maven\repository\io\github\openfeign\feign-core\11.8\feign-core-11.8.jar;
C:\application\development\maven\repository\io\github\openfeign\feign-jaxrs\11.8\feign-jaxrs-11.8.jar;
C:\application\development\maven\repository\javax\ws\rs\javax.ws.rs-api\2.1.1\javax.ws.rs-api-2.1.1.jar;
C:\application\development\projects\idea\练习\nacos-dubbo\common\target\classes;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-discovery\2021.1\spring-cloud-starter-alibaba-nacos-discovery-2021.1.jar;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-alibaba-commons\2021.1\spring-cloud-alibaba-commons-2021.1.jar;
C:\application\development\maven\repository\com\alibaba\nacos\nacos-client\2.0.4\nacos-client-2.0.4.jar;
C:\application\development\maven\repository\commons-codec\commons-codec\1.15\commons-codec-1.15.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\core\jackson-core\2.13.1\jackson-core-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\core\jackson-databind\2.13.1\jackson-databind-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\core\jackson-annotations\2.13.1\jackson-annotations-2.13.1.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpasyncclient\4.1.5\httpasyncclient-4.1.5.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpcore\4.4.15\httpcore-4.4.15.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpcore-nio\4.4.15\httpcore-nio-4.4.15.jar;
C:\application\development\maven\repository\org\apache\httpcomponents\httpclient\4.5.13\httpclient-4.5.13.jar;
C:\application\development\maven\repository\org\reflections\reflections\0.9.11\reflections-0.9.11.jar;
C:\application\development\maven\repository\com\google\guava\guava\20.0\guava-20.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient\0.12.0\simpleclient-0.12.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient_tracer_otel\0.12.0\simpleclient_tracer_otel-0.12.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient_tracer_common\0.12.0\simpleclient_tracer_common-0.12.0.jar;
C:\application\development\maven\repository\io\prometheus\simpleclient_tracer_otel_agent\0.12.0\simpleclient_tracer_otel_agent-0.12.0.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-commons\3.1.1\spring-cloud-commons-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\security\spring-security-crypto\5.6.2\spring-security-crypto-5.6.2.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-context\3.1.1\spring-cloud-context-3.1.1.jar;
C:\application\development\maven\repository\com\alibaba\cloud\spring-cloud-starter-alibaba-nacos-config\2021.1\spring-cloud-starter-alibaba-nacos-config-2021.1.jar;
C:\application\development\maven\repository\com\alibaba\transmittable-thread-local\2.12.6\transmittable-thread-local-2.12.6.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-web\2.6.4\spring-boot-starter-web-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter\2.6.4\spring-boot-starter-2.6.4.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-logging\2.6.4\spring-boot-starter-logging-2.6.4.jar;
C:\application\development\maven\repository\ch\qos\logback\logback-classic\1.2.10\logback-classic-1.2.10.jar;
C:\application\development\maven\repository\ch\qos\logback\logback-core\1.2.10\logback-core-1.2.10.jar;
C:\application\development\maven\repository\org\apache\logging\log4j\log4j-to-slf4j\2.17.1\log4j-to-slf4j-2.17.1.jar;
C:\application\development\maven\repository\org\apache\logging\log4j\log4j-api\2.17.1\log4j-api-2.17.1.jar;
C:\application\development\maven\repository\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;
C:\application\development\maven\repository\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;
C:\application\development\maven\repository\org\springframework\spring-core\5.3.16\spring-core-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-jcl\5.3.16\spring-jcl-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-json\2.6.4\spring-boot-starter-json-2.6.4.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.1\jackson-datatype-jdk8-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.1\jackson-datatype-jsr310-2.13.1.jar;
C:\application\development\maven\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.1\jackson-module-parameter-names-2.13.1.jar;
C:\application\development\maven\repository\org\springframework\boot\spring-boot-starter-tomcat\2.6.4\spring-boot-starter-tomcat-2.6.4.jar;
C:\application\development\maven\repository\org\apache\tomcat\embed\tomcat-embed-core\9.0.58\tomcat-embed-core-9.0.58.jar;
C:\application\development\maven\repository\org\apache\tomcat\embed\tomcat-embed-el\9.0.58\tomcat-embed-el-9.0.58.jar;
C:\application\development\maven\repository\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.58\tomcat-embed-websocket-9.0.58.jar;
C:\application\development\maven\repository\org\springframework\spring-web\5.3.16\spring-web-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-beans\5.3.16\spring-beans-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-webmvc\5.3.16\spring-webmvc-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-context\5.3.16\spring-context-5.3.16.jar;
C:\application\development\maven\repository\org\springframework\spring-expression\5.3.16\spring-expression-5.3.16.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-actuator\3.0.6\dubbo-spring-boot-actuator-3.0.6.jar;
C:\application\development\maven\repository\org\apache\dubbo\dubbo-spring-boot-actuator-compatible\3.0.6\dubbo-spring-boot-actuator-compatible-3.0.6.jar;
C:\application\development\maven\repository\cn\hutool\hutool-all\5.8.3\hutool-all-5.8.3.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-starter-bootstrap\3.1.1\spring-cloud-starter-bootstrap-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\cloud\spring-cloud-starter\3.1.1\spring-cloud-starter-3.1.1.jar;
C:\application\development\maven\repository\org\springframework\security\spring-security-rsa\1.0.10.RELEASE\spring-security-rsa-1.0.10.RELEASE.jar;
C:\application\development\maven\repository\org\bouncycastle\bcpkix-jdk15on\1.68\bcpkix-jdk15on-1.68.jar;
C:\application\development\maven\repository\org\bouncycastle\bcprov-jdk15on\1.68\bcprov-jdk15on-1.68.jar;
C:\application\development\JetBrains\IntelliJ IDEA 2021.2.3\lib\idea_rt.jar"
com.xiao.pang.Main
代码如下, 使用 debug 启动 100% 报错 非debug启动 正常
package com.xiao.pang;
import com.alibaba.ttl.TransmittableThreadLocal;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.*;
public class Main
{
public static ThreadLocal<String> threadLocal = new TransmittableThreadLocal<>();
public static ForkJoinPool executorService = new ForkJoinPool();
public static void main(String[] args) {
for (int i = 0; i < 4; i++) {
int round = i;
List<String> strings = Arrays.asList("a", "b", "c");
threadLocal.set(i + "");
executorService.submit(() -> {
strings.parallelStream().forEach(s -> show("in stream " + round, s));
}
).join();
}
}
private static void show(String title, Object value) {
System.out.printf("[%s] %-15s - value: %s, thread local value: %s%n",
Thread.currentThread().getName(), title, value, threadLocal.get());
}
具体看了一下:
TTL Agent
有java.util
包(含ConcurrentHashMap$ForwardingNode
)的跳过处理逻辑。这个异常栈,是在加载Java Agent Class
(InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:435)
),还没有进入(TTL) Agent
的处理。
Exception in thread "main" java.lang.ClassCircularityError: java/util/concurrent/ConcurrentHashMap$ForwardingNode
at java.base/java.util.concurrent.ConcurrentHashMap.transfer(ConcurrentHashMap.java:2441)
at java.base/java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2354)
at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1075)
at java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541)
at java.base/java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:666)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:651)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:435)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503)
*** java.lang.instrument ASSERTION FAILED ***: "result" with message agent load/premain call failed at t:\workspace\open\src\java.instrument\share\native\libinstrument\JPLISAgent.c line: 422
FATAL ERROR in native method: processing of -javaagent failed, processJavaStart failed
所以,看起来可能是JDK 17.0.2
的Bug
。 @dongshuke @wuwen5
@dongshuke 从你上面说明,可以看出是在
IntelliJ IDEA
IDE中运行
IntelliJ IDEA
IDE的运行,有额外的处理 -javaagent:...\idea_rt.jar
DEBUG
方式运行
有额外的处理 -javaagent:...\debugger-agent.jar
才会出这个问题。在线上生产环境,不会有这个问题。
你用JDK 11/8
来开发Debug
吧,避免这些复杂混乱的情况(IDE 额外处理、可能JDK Bug
)。应该也不会影响你的开发效率~ @dongshuke
PS: 你上面提供的复现方式,如此的复杂(超长的命令组装与环境准备),以至于其实只有你自己当前是可以运行起来的; 别人是不能以你给的方式运行起来的(并复现&排查问题)。🙃🙃 @dongshuke
好的 好的 谢谢
@dongshuke 这个 issue 先 close 了。 ❤️
如果发现 对开发或线上有实际影响的问题,可以 reopen。
@dongshuke 你在使用IntelliJ IDEA
DEBUG
的时候可以加上=ttl.agent.logger:STDOUT
试试
例如:-javaagent:C:/application/development/maven/repository/com/alibaba/transmittable-thread-local/2.12.6/transmittable-thread-local-2.12.6.jar=ttl.agent.logger:STDOUT
我使用IntelliJ IDEA
DEBUG
模式复现了,然而当加上=ttl.agent.logger:STDOUT
它又好了,怀疑和类加载数量和顺序有某种关系,异常发生在ConcurrentHashMap
扩容阶段加载内部类。
TTL Agent有java.util包(含ConcurrentHashMap$ForwardingNode)的跳过处理逻辑。
@oldratlee java.util
包应该并不包含ConcurrentHashMap$ForwardingNode
的跳过处理逻辑,它在java.util.concurrent
包 (如果我没理解错)。
我尝试加上
if (classFile.startsWith("java/util/concurrent/ConcurrentHashMap")) return NO_TRANSFORM;
测试就好了
对比了jdk11与jdk17 类加载日志,发现使用jdk11 时ConcurrentHashMap$ForwardingNode
加载的时机远早于 ttl 的加载,而使用jdk17时,ConcurrentHashMap$ForwardingNode
的加载正好处于 ttl 的doTransform
阶段。
@dongshuke 你在使用
IntelliJ IDEA
DEBUG
的时候可以加上=ttl.agent.logger:STDOUT
试试例如:
-javaagent:C:/application/development/maven/repository/com/alibaba/transmittable-thread-local/2.12.6/transmittable-thread-local-2.12.6.jar=ttl.agent.logger:STDOUT
我使用
IntelliJ IDEA
DEBUG
模式复现了,然而当加上=ttl.agent.logger:STDOUT
它又好了,怀疑和类加载数量和顺序有某种关系,异常发生在ConcurrentHashMap
扩容阶段加载内部类。
对比了jdk11与jdk17 类加载日志,发现使用jdk11 时
ConcurrentHashMap$ForwardingNode
加载的时机远早于 ttl 的加载,而使用jdk17时,ConcurrentHashMap$ForwardingNode
的加载正好处于 ttl 的doTransform
阶段。
@wuwen5 👍 666
@oldratlee
java.util
包应该并不包含ConcurrentHashMap$ForwardingNode
的跳过处理逻辑,它在java.util.concurrent
包
@wuwen5
你说的对;现在的实现有跳过java.util
包的逻辑,但并没有包含 子包java.util.concurrent
(如ConcurrentHashMap
及其内部类)。
是可以加一下处理。能避免一些已经出现的问题 总是好的。
这个问题修复逻辑,你方便加一下提交? 😄 ❤️
PS: v2.x
版本 在分支2.x
上开发。
然后可以发个版本出来。
其实 TTL Agent
不会有增强处理的 常用基础类(就像ConcurrentHashMap
及其内部类),
是可以并应该 提前return NO_TRANSFORM
掉,尽量安全的避免ClassCircularityError
问题。
@oldratlee
虽然我尝试去增加 ConcurrentHashMap$ForwardingNode
的跳过处理逻辑,反复在IDEA
DEBUG 下测试是OK的,但是仍然解释不通,因为即使不加跳过,ttl agent也并不会处理该类,与加跳过逻辑执行流程是一样的,仅仅只是提前 return NO_TRANSFORM
我尝试将IDEA
DEBUG
模式下执行的java启动参数完整单独去执行(包含ttl agent 和idea 的debugger-agent.jar),也并没有复现问题,程序一切都是正常的。
我建议ttl先不做修复处理,需更多验证,不排除与IDEA
自身有关系
- 但是仍然解释不通,因为即使不加跳过,ttl agent也并不会处理该类,与加跳过逻辑执行流程是一样的,仅仅只是提前
return NO_TRANSFORM
嗯嗯。『即使不加跳过,ttl agent也并不会处理该类』这个很奇怪,所以有怀疑是JDK Bug
。
(当然 目前问题排查 可能还不够完整。)
我建议ttl先不做修复处理,需更多验证,不排除与
IDEA
自身有关系
好的,赞成。 👍 @wuwen5
我也赞成:对于排查还没有形成逻辑自洽的原因,则先不上 可能是在猜的修复。
另一方面,目前这个问题没有实际的影响。
现象:
Exception in thread "main" java.lang.ClassCircularityError: java/util/concurrent/ConcurrentHashMap$ForwardingNode
at java.base/java.util.concurrent.ConcurrentHashMap.transfer(ConcurrentHashMap.java:2441)
at java.base/java.util.concurrent.ConcurrentHashMap.addCount(ConcurrentHashMap.java:2354)
at java.base/java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1075)
at java.base/java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1541)
at java.base/java.lang.ClassLoader.getClassLoadingLock(ClassLoader.java:666)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:651)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:435)
at java.instrument/sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:503)
各位大佬有什么解法
发布了v2.14.3
以解决这个问题:
https://github.com/alibaba/transmittable-thread-local/releases/tag/v2.14.3
可以试一下,是否解决问题,测试验证结果麻烦回复一下 💕 @primitiveheart @dongshuke
发布了解决这个问题,可以试一下
v2.14.3
💕https://github.com/alibaba/transmittable-thread-local/releases/tag/v2.14.3
666666
使用 8 与 11 可以正常启动