# 动态挂载Java探针 ## 兼容性要求 请确保您的系统和应用满足如下这些条件: - Kubernetes UniAgent 2.6.0 及以上版本探针 - 内核版本3.0及以上的 Linux 操作系统,支持的系统包括:Redhat 7及以上、CentOS 7及以上、Ubuntu 14及以上、Oracle Linux 7及以上、Debian 7及以上 - Java应用运行环境必须包含JDK,不支持在JRE环境下动态挂载 - Java应用可用的堆空间需要大于500MB - 容器c库必须为glibc,不支持Alpine类型的容器 - 已经通过打Label重启加载探针的应用,不支持再次卸载和挂载 ## 技术优势 动态挂载探针是通过 JavaAgent 的 Attach 技术实现的,这种实现方法带来了高度的实时性、灵活性和适应性等多重优势。尤其是通过 Java 应用运行时动态挂载探针的特性,无需重新启动应用程序,使监控在生产环境中更为便捷。同样的技术原理也使得在应用正常运行的情况下卸载探针成为可能,探针能够自动还原字节码,不对应用的业务处理逻辑造成任何影响。这种灵活性和自动化的卸载过程使得监控系统的维护更加便捷,维护者可以根据实际需要动态地挂载或卸载探针,实现对应用性能和行为的精准调控。这种操作的可行性和效果,为监控系统的优化和定制提供了更高的可操作性。 ## 挂载步骤和注意事项 请不要在业务高峰时期挂载探针,挂载探针时应用可能会出现短暂的Safepoint,这会影响应用的业务处理。 在听云平台左侧导航栏中选择**管理>部署状态**,在**UniAgents管理**页面中找到部署探针的主机,单击进程右侧**挂载**按钮挂载探针 ## 卸载探针 仅支持对使用**挂载**操作安装探针的应用进行**卸载**操作,其他方式安装探针的应用请使用**屏蔽**操作 对于已经挂载探针的应用,可以在**UniAgents管理**页面中找到部署探针的主机,单击进程右侧**卸载**按钮卸载探针 ## 挂载方式支持的组件列表 ### JVM | 名称 | 支持版本 | |----------------------|-----------------| | Open JDK | 1.6 ~ 18 | | Oracle Hotspot JVM | 1.6 ~ 18 | ### 应用服务容器 | 容器名称 | 支持版本 | |-----------------|---------------------------------| | Apache Tomcat | 5.5.12 ~ 9.0.84 | | Undertow | 1.0.0.Final ~ 2.2.21.Final | | WebLogic Server | 10.3.x、12.1.x、12.2.x、14.1.x | | Wildfly | 8.x~26.x | ### 数据库 | 数据库 | 支持版本 | | --------------------------- | ------------------------------------------------------------ | | Apache Derby | 10.3.x~10.15.x | | Apache Derby(derbyclient) | 10.3.x~10.15.x | | IBM DB2 | db2jcc(1.4.2)、db2jcc4(11.1.4.4~11.5.6.0) | | Informix | 4.10.10~4.50.4.1 | | MariaDB | mariadb-java-client(2.1.1~2.7.3) | | Microsoft SQL Server | sqljdbc4(4.0)、jtds(1.2 ~1.3.1)、mssql-jdbc(6.1.0.jre8 ~ 10.2.1.jre8) | | MySQL | 5.0.x ~ 8.x | | mssql-jdbc | 6.2.2.jre8~9.2.1.jre8 | | Oracle | ojdbc5(11.1.x ~ 11.2.x)、ojdbc6(11.1.x ~ 12.1.x)、ojdbc7(12.1.0.2.0)、ojdbc8(12.2.0.1 ~ 23.2.0.0)、ojdbc10(19.3.0.0~19.16.0.0)、ojdbc11(21.1.0.0 ~ 21.7.0.0)、classes12(10g)、ojdbc14(10.2.0.4.0) | | PostgreSQL | 9.3-1104-jdbc4 、9.4.1208、42.0.0、42.1.4、42.4.0、42.5.0 | | R2DBC-MySQL | 0.8.1.RELEASE、0.8.2.RELEASE | | Sybases | 1.2~3.0 | | 达梦 | DM7、DM8 | | 神舟通用 | 支持 | | 人大金仓 | 支持 | | Apache Hive | 支持 | | KBase | 支持 | | GoldenDB | 支持 | | TiDB | 支持 | | 南大通用 | gbasedbtjdbc_3.3.0 | | OceanBase | oceanbase-client 2.2.6 | | OpenGauss | opengauss-jdbc 3.0.0 | | ClickHouse | clickhouse-jdbc 0.3.2-patch9
clickhouse-native-jdbc-shaded 2.5.4 | | HBase | hbase-client 1.1.1 ~ 1.7.2 | ### NoSQL | NoSQL | 支持版本 | | ------------- | ------------------------------------------------------------ | | Redis | Jedis(2.7.x ~ 2.10.x、1.5.2)
Jedis(3.0.0 ~ 3.5.2)
Jedis(3.6.0 ~ 3.9.0) | ### Java 框架 | Java框架 | 支持版本 | | ---------------------------- | ------------------------------------------------------------ | | Netty | io.netty:netty-all(4.0.20.Final ~ 4.1.50.Final) | | Spring WebFlux | org.springframework:spring-webflux(5.0.1.RELEASE ~ 5.3.31) | ## RPC(远程过程调用) | RPC | 支持版本 | | ----- | ------------------------------------------------------------ | | Dubbo | com.alibaba:dubbo(2.5.4 ~ 2.6.12)
org.apache.dubbo:dubbo(2.7.0 ~ 3.1.11) | ### HTTP调用 | 框架 | 支持版本 | | ----------------- | ------------------------------------------------------------ | | HttpClient | commons-httpclient:commons-httpclient(3.0 ~ 3.1)
org.apache.httpcomponents:httpclient(4.0 ~ 4.5.12)
org.apache.httpcomponents.client5:httpclient5(5.0 ~ 5.3) | | OkHttp | com.squareup.okhttp3:okhttp(3.4.0 ~ 4.12.0) | | HttpURLConnection | JDK 1.6 ~ 18 | ### 不支持的功能 | 功能 | 不支持原因 | | ------------------------ | ------------------------------------------------ | | 日志溯源 | 相关插件不支持以挂载探针的方式运行 | | 日志组件的错误及异常采集 | 相关插件不支持以挂载探针的方式运行 | | 启用Thrift监控 | 相关插件不支持以挂载探针的方式运行 | | 启用MQ消费端监控 | 相关插件不支持以挂载探针的方式运行 | | 连接池 | 挂载安装时连接池已初始化完成,无法获取连接池对象 | | 线程池 | 挂载安装时线程池已初始化完成,无法获取线程池对象 | | -Dtingyun参数 | 下一个版本提供支持 | | 容器版本信息 | 挂在安装时无法获取容器版本信息 | 如需要使用这些功能,请通过重启应用的方式加载探针。 ### 已知问题 - 以Debug方式启动应用时,挂载探针再卸载后,应用可能发生崩溃,并报如下错误: ``` JDWP exit error AGENT_ERROR_INVALID_EVENT_TYPE(204): ExceptionOccurred [eventHelper.c:834] FATAL ERROR in native method: JDWP ExceptionOccurred, jvmtiError=AGENT_ERROR_INVALID_EVENT_TYPE(204) ``` - Tomcat 5.5.34 ~ 5.5.36,6.0.33 ~ 6.0.53,当应用中没有获取HTTP POST Paramter时,数据项和用户溯源无法通过**获取途径**为**HTTP post paramter**的方式获取。