# 动态挂载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**的方式获取。