正确理解 SqlConnection 的连接池机制
野渴搅庞MX 是什么JMX 是 “Java Management Extensions” 的缩写中文通常称为 “Java 管理扩展”。它是 Java 平台提供的一套标准框架用于对 Java 应用程序、设备、系统资源进行监控和管理。JMX 的核心作用包括监控 Java 程序运行状态如内存使用、线程数、类加载情况等动态修改配置参数无需重启应用远程管理 Java 应用通过 JConsole、VisualVM 等工具集成到监控系统中实现对 JVM 的集中监控。很多 Java 应用如 Kafka、Hadoop、Tomcat 等都通过 JMX 暴露运行时指标方便运维人员进行监控和故障排查。在监控领域你就可以简单的理解 JMX 是一种 Java 应用暴露指标的标准方式。很多新的开源项目直接暴露 Prometheus 协议的监控数据确实更方便但很多老的 Java 应用仍然通过 JMX 暴露指标数据所以掌握 JMX 监控方式等于掌握了一批 Java 应用的监控方式。OpenTelemetry 的标准已经被业界普遍使用JMX 也可以和 OpenTelemetry 集成。用于 JMX 的 OpenTelemetry 集成利用 YAML 中指定的配置文件来描述应用程序的指标应如何转换为 OpenTelemetry 指标。这些规则会提供给与 JMX API 交互的 JMX 指标抓取工具。许多现有的 Java 应用程序可配置为通过 JMX 发出指标。以下应用程序具有社区支持的预定义规则文件ActivemqCassandraHbaseHadoopJettyJvmKafkaSolrTomcatWildfly这意味着在使用 JMX 抓取工具时可以将目标应用程序识别为上述选项之一无需任何额外配置即可自动抓取指标。使用 OpenTelemetry 的 JMX 集成从应用程序中提取数据有多种方法运行 JMX 指标收集器 JAR 并将其指向您的应用程序将 OpenTelemetry Java 代理与应用程序一起运行运行 OpenTelemetry Collector 并配置 JMX 接收器以通过 JMX 获取指标JMX 指标收集器是一种简单便捷的方法可用于测试从 Java 应用程序导出指标且所需的额外依赖最少。OpenTelemetry Java 代理是一种更成熟且经过验证的机制但由于它引入了额外的 instrumentation可能也会带来一些开销。如果在你的环境中运行单独的进程或工作负载是可接受的那么 OpenTelemetry 收集器是一个可靠的替代方案。本文将探讨这三种选择。配置在深入了解 OpenTelemetry 集成之前有必要确保将要测试的应用程序正确暴露 JMX 端点。以下命令在 Docker 容器中启动 Tomcat 服务器以减少本地系统所需的依赖项数量。它使用 JAVA_OPTS 环境变量启用 JMX并使其在 9999 端口上可用。$ docker run -it --rm -p 9999:9999 -p 8888:8080 -e JAVA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.onlyfalse -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.port9999 -Dcom.sun.management.jmxremote.rmi.port9999 -Djava.rmi.server.hostname0.0.0.0 -Dcom.sun.management.jmxremote.sslfalse tomcat:9.0有许多工具可以验证 JMX 端口是否可访问以及是否在生成指标。以下使用 JConsole 并连接到已打开的端口$ jconsole localhost:9999这将弹出一个应用程序它可能会提示您连接不安全。在本地开发时此警告可以安全地忽略。image这些数据可通过远程 JMX 端口访问我们已准备好与 OpenTelemetry 集成。直接使用 JMX scraper如前所述JMX 抓取工具是最简便的入门方式。以下命令将从 Maven 下载 JMX 抓取工具的最新发布版本运行 JMX 抓取工具将其配置为从 Tomcat 收集遥测数据并通过 JMX 收集指标然后将这些指标输出到本地控制台。$ wget https://repo1.maven.org/maven2/io/opentelemetry/contrib/opentelemetry-jmx-scraper/1.49.0-alpha/opentelemetry-jmx-scraper-1.49.0-alpha.jar$ OTEL_METRICS_EXPORTERconsole java -jar opentelemetry-jmx-scraper-1.49.0-alpha.jar -config - otel.jmx.service.urlservice:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmiotel.jmx.target.systemtomcatEOF该命令的输出让我们知道连接已建立并且一些度量工具已创建WARNING: A terminally deprecated method in sun.misc.Unsafe has been calledWARNING: sun.misc.Unsafe::objectFieldOffset has been called by io.opentelemetry.internal.shaded.jctools.util.UnsafeAccess (file:/Users/alex/Downloads/opentelemetry-jmx-scraper-1.49.0-alpha.jar)WARNING: Please consider reporting this to the maintainers of class io.opentelemetry.internal.shaded.jctools.util.UnsafeAccessWARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release2025-08-27 10:28:48 INFO metrics export interval (seconds) 602025-08-27 10:28:48 WARNING SASL unsupported in current environment: class io.opentelemetry.contrib.jmxscraper.JmxConnectorBuilder cannot access class com.sun.security.sasl.Provider (in module java.security.sasl) because module java.security.sasl does not export com.sun.security.sasl to unnamed module 24313fcc2025-08-27 10:28:48 INFO Connecting to service:jmx:rmi:///jndi/rmi://localhost:9999/jmxrmi2025-08-27 10:28:48 INFO tomcat: found 3 metric rules2025-08-27 10:28:48 INFO JMX scraping started2025-08-27 10:28:49 INFO Created Counter for tomcat.error.count2025-08-27 10:28:49 INFO Created Counter for tomcat.request.count2025-08-27 10:28:49 INFO Created Gauge for tomcat.request.duration.max2025-08-27 10:28:49 INFO Created Counter for tomcat.request.duration.sum2025-08-27 10:28:49 INFO Created Counter for tomcat.network.io2025-08-27 10:28:49 INFO Created Counter for tomcat.network.io2025-08-27 10:28:49 INFO Created UpDownCounter for tomcat.thread.count2025-08-27 10:28:49 INFO Created UpDownCounter for tomcat.thread.limit2025-08-27 10:28:49 INFO Created UpDownCounter for tomcat.thread.busy.count使用JMX抓取工具是个不错的入门方法但它确实需要一个额外的 JAR 包如果我们已经在使用 Java 代理可能就不希望这样了。使用 OpenTelemetry Java 代理除了提供 JMX 集成外Java 代理还提供了自动检测应用程序的功能。出于这个原因它比 JMX 抓取工具更常用。以下命令下载最新发布版本的 OpenTelemetry Java agent jar通过将本地目录挂载到容器中将 jar 包归档文件添加到 Docker 环境中使用一些额外的环境变量运行与之前相同的 Tomcat 应用程序以加载 agent jar 包$ wget https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v2.19.0/opentelemetry-javaagent.jar$ docker run -it -v pwd:/tmp --rm \-e OTEL_LOGS_EXPORTERconsole \-e OTEL_TRACES_EXPORTERconsole \-e OTEL_METRICS_EXPORTERconsole \-e CATALINA_OPTS$CATALINA_OPTS -javaagent:/tmp/opentelemetry-javaagent.jar \-e JAVA_OPTS-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.onlyfalse -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.port9999 -Dcom.sun.management.jmxremote.rmi.port9999 -Djava.rmi.server.hostname0.0.0.0 -Dcom.sun.management.jmxremote.sslfalse -Dotel.jmx.target.systemtomcat \tomcat:9.0该命令的输出将与运行 JMX scraper 的输出非常相似04-Sep-2025 21:43:40.251 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [48] milliseconds[otel.javaagent 2025-09-04 21:43:40:787 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for tomcat.error.count[otel.javaagent 2025-09-04 21:43:40:787 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for tomcat.request.count[otel.javaagent 2025-09-04 21:43:40:789 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Gauge for tomcat.request.duration.max[otel.javaagent 2025-09-04 21:43:40:789 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for tomcat.request.duration.sum[otel.javaagent 2025-09-04 21:43:40:789 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for tomcat.network.io[otel.javaagent 2025-09-04 21:43:40:789 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created Counter for tomcat.network.io[otel.javaagent 2025-09-04 21:43:40:790 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created UpDownCounter for tomcat.thread.count[otel.javaagent 2025-09-04 21:43:40:790 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created UpDownCounter for tomcat.thread.limit[otel.javaagent 2025-09-04 21:43:40:791 0000] [jmx_bean_finder] INFO io.opentelemetry.javaagent.shaded.instrumentation.jmx.engine.MetricRegistrar - Created UpDownCounter for tomcat.thread.busy.count如果我们的部署已经在使用 OpenTelemetry Java 代理现在我们就有了一种无需引入额外工具即可收集 JMX 指标的方法。但如果我们更倾向于使用外部工具那该怎么办呢别担心OpenTelemetry 这把“瑞士军刀”已经为你准备好了使用 OpenTelemetry Collector 和 JMX receiver我们将要探讨的最后一种将JMX指标转换为 OpenTelemetry 的方法是使用 OpenTelemetry Collector。Collector 提供了许多集成功能通常作为遥测管道的一部分部署在基础设施内部。Collector 由许多组件构成其中之一是 JMX receiver它在底层使用 JMX scraper 与 Java 应用程序进行交互。在本示例中我们将继续使用之前一直在用的 tomcat 应用程序并使用由社区发布和维护的 OpenTelemetry Collector Contrib 发行版。运行带有调试导出器的 Collector 需要以下配置文件该调试导出器会将指标输出到控制台。由于 Collector 便于配置多个导出器我们还添加了一个 OpenTelemetry 协议OTLP导出器用于将数据发送到 Honeycomb译者注一个可观测性云厂商receivers:jmx/tomcat:jar_path: /tmp/opentelemetry-jmx-scraper-1.48.0-alpha.jarendpoint: localhost:9999target_system: tomcatcollection_interval: 10sexporters:otlphttp:endpoint: https://api.honeycomb.io:443headers:x-honeycomb-team: ${env:HONEYCOMB_API_KEY}x-honeycomb-dataset: jmx-testdebug:verbosity: detailedservice:telemetry:logs:level: debugpipelines:metrics:receivers: [jmx/tomcat]exporters: [debug, otlphttp]请注意要使此配置生效我们需要指定 JMX 抓取器 JAR 的位置因为接收器本身并不包含该 JAR。有了这份配置以下命令将下载最新发布的 Collector Contrib 发行版并运行它$ wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.133.0/otelcol-contrib_0.133.0_darwin_arm64.tar.gz -O - | tar -xz??$ ./otelcol-contrib --config configuration.yaml收集器的输出将包含来自JMX抓取器的详细信息以及来自调试导出器的日志以验证数据是否按照配置进行导出。使用 Collector 使我们能够收集指标而无需修改应用程序或应用程序运行的环境只要该应用程序远程暴露 JMX 端口即可。 Collector 还增加了一些灵活性可以根据需要对数据进行转换或丰富。自定义应用的监控采集OpenTelemetry 社区支持的应用程序列表不足以处理所有现有的Java应用程序。幸运的是可以定义自定义规则配置文件来支持自定义应用程序。该项目的官方文档更详细地描述了编写自定义配置的语法。在下面的示例中我们创建的规则为Resin服务器暴露的指标提供了映射。此配置将resin命名空间中ThreadPool托管BeanMBean的JMX属性ThreadActiveCount映射到OpenTelemetry中名为resin.threadpool.active.count的 gauge量规rules:- bean: resin:typeThreadPooltype: gaugeunit: {thread}mapping:ThreadActiveCount:metric: resin.threadpool.active.countdesc: Current number of active threads in the pool将OpenTelemetry与JMX集成的每种方法都支持自定义配置文件。JMX抓取器通过otel.jmx.config属性来支持这一点。收集器中的JMX接收器可以使用jmx_configs而非target_system进行配置。允许收集器使用此自定义文件的配置如下receivers:jmx/resin:jar_path: /Users/alex/Downloads/opentelemetry-jmx-scraper-1.48.0-alpha.jarendpoint: localhost:9999jmx_configs: /tmp/resin.rules.yamlcollection_interval: 10s总结有了这些我们现在就具备了将生成JMX遥测数据的应用程序集成到任何支持 OpenTelemetry 的遥测管道中的工具。可以灵活选择使用JMX抓取器、Java代理或收集器这确保我们能够选用适合自身环境的工具同时对现有工作流程的影响降至最低。

相关新闻

计算机系统基础16---计算机的基本组成---CPU总线

计算机系统基础16---计算机的基本组成---CPU总线

文章目录 什么是CPU总线?总线的层级结构现代总线技术举例总线的性能指标1、总线宽度2、总线频率3、总线带宽 什么是CPU总线? 总线,简单来说,就是一组用于在计算机组件之间传输数据的公共通信线路。它由一组导线和相关控制电路组成…

2026/5/17 9:25:21 阅读更多 →
计算机毕设java电子相册管理系统 基于SpringBoot的在线相册分享平台设计与实现 基于JavaWeb的个人影像资料管理系统开发

计算机毕设java电子相册管理系统 基于SpringBoot的在线相册分享平台设计与实现 基于JavaWeb的个人影像资料管理系统开发

计算机毕设java电子相册管理系统cj3309(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。随着移动互联网和数码设备的普及,个人数字影像资料呈现爆炸式增长,…

2026/7/6 16:18:16 阅读更多 →
Flash: 涅磐与重生

Flash: 涅磐与重生

躺媳芽谂大家好,这里是Coding茶水间。 今天我来分享一个基于深度学习的图像增强系统,主要使用开源的Zero-DCE模型。 这个系统可以帮助我们将曝光不足的暗淡图片处理成曝光正常的清晰图像。 下面我将详细介绍这个系统的原理、演示效果、代码实现以及训练方…

2026/7/7 20:21:38 阅读更多 →

最新新闻

WSL 1 vs WSL 2 性能对比:文件 I/O、网络与启动速度的 3 项实测

WSL 1 vs WSL 2 性能对比:文件 I/O、网络与启动速度的 3 项实测

WSL 1 vs WSL 2 深度性能评测:架构差异如何影响开发效率 在Windows平台上进行Linux开发的环境选择,往往决定了开发者的工作效率和体验流畅度。作为微软推出的两大子系统版本,WSL 1和WSL 2采用了截然不同的架构设计,这直接影响了文…

2026/7/7 23:54:46 阅读更多 →
CentOS 8 yum/dnf 报错排查:3步定位 Failed to download metadata 根因

CentOS 8 yum/dnf 报错排查:3步定位 Failed to download metadata 根因

CentOS 8 yum/dnf 报错排查:3步定位 Failed to download metadata 根因当你在CentOS 8或RHEL系发行版上执行yum或dnf命令时,遇到"Failed to download metadata for repo"这类错误信息,往往意味着系统无法获取软件仓库的元数据。这个…

2026/7/7 23:52:46 阅读更多 →
Ubuntu 22.04 部署 RabbitMQ 4.3:APT 源安装与 5 个关键安全配置

Ubuntu 22.04 部署 RabbitMQ 4.3:APT 源安装与 5 个关键安全配置

Ubuntu 22.04 部署 RabbitMQ 4.3:APT 源安装与 5 个关键安全配置RabbitMQ 作为企业级消息队列中间件,在分布式系统解耦、异步通信和流量削峰等场景中扮演着关键角色。本文将详细介绍在 Ubuntu 22.04 生产环境中通过官方 APT 源部署 RabbitMQ 4.3 的完整流…

2026/7/7 23:52:46 阅读更多 →
Go语言SCP服务安全实践:防御SSH会话固定攻击与安全会话管理

Go语言SCP服务安全实践:防御SSH会话固定攻击与安全会话管理

1. 项目概述与核心挑战最近在重构一个用Go语言写的内部文件传输服务,这个服务大量使用了SCP协议进行服务器间的文件同步。在安全审计的时候,我们重点关注了会话管理部分,特别是如何防御会话固定攻击。这玩意儿在Web开发里是老生常谈了&#x…

2026/7/7 23:52:46 阅读更多 →
计算机毕设 MySQL 8.0 数据库设计避坑:3个常见范式错误与性能优化方案

计算机毕设 MySQL 8.0 数据库设计避坑:3个常见范式错误与性能优化方案

MySQL 8.0数据库设计避坑指南:3个常见范式错误与性能优化实战 在计算机专业毕业设计中,数据库设计往往是决定系统质量的关键环节。许多同学虽然掌握了SQL基础语法,但在实际设计时仍会陷入各种陷阱——要么过度规范化导致查询性能低下&#xf…

2026/7/7 23:48:45 阅读更多 →
Chrome 缓存路径修改 3 种方案对比:mklink、启动参数与注册表,性能影响实测

Chrome 缓存路径修改 3 种方案对比:mklink、启动参数与注册表,性能影响实测

Chrome缓存路径修改三大方案深度评测:从符号链接到注册表调优1. 为什么需要修改Chrome缓存路径?对于长期使用Chrome浏览器的中高级用户来说,系统盘空间告急是个常见痛点。Chrome默认将所有缓存文件存储在C:\Users\[用户名]\AppData\Local\Goo…

2026/7/7 23:48:44 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻