Open MCT性能测试实战:JMeter多协议分层压测方法

news2026/5/22 2:10:53
1. 为什么Open MCT的性能不能只靠“感觉”来判断Open MCT——NASA开源的航天器监控与控制系统可视化平台这几年在工业物联网、能源调度、科研实验数据看板等场景里越来越常见。但凡接触过它的人几乎都会在部署后遇到同一个问题当面板上挂了30个遥测点、5个实时曲线、2个状态表格再连上10个并发用户时页面开始卡顿、WebSocket心跳延迟飙升、历史数据加载变慢——可这时候你去翻官方文档找不到任何关于“支持多少点位”“能扛多少并发”的明确指标去查GitHub Issues满屏都是“UI响应慢”“图表渲染卡顿”的模糊描述却没人告诉你这到底是前端渲染瓶颈后端数据服务吞吐不足还是WebSocket连接管理失控更没人告诉你该用什么工具、测哪些维度、设什么阈值才能真正定位问题。这就是我们做Open MCT性能基准测试的根本动因它不是为了跑一个漂亮的TPS数字而是要建立一套可复现、可对比、可归因的量化验证体系。JMeter不是万能的但它在HTTP API压测、WebSocket长连接模拟、多用户行为编排方面是目前工程实践中最成熟、最可控、最容易落地的工具。我们不追求“极限峰值”而关注三个真实业务场景下的关键水位线日常运维态5~10人同时查看同一套监控大屏含实时刷新历史回溯故障处置态20人集中登录、快速切换视图、高频触发告警确认与参数下发系统扩容态单实例部署下遥测点位从500点扩展到3000点时端到端延迟是否仍低于800ms。这些不是拍脑袋定的数字而是我在参与某省级电网SCADA系统迁移项目时从调度员操作日志里反向统计出来的高频会话模式。JMeter在这里的价值不是替代前端性能分析工具比如Chrome DevTools的Performance面板而是把“用户点击→API请求→服务响应→前端渲染”这个链路中可标准化、可隔离、可压力注入的那一段牢牢抓在手里。下面我会从JMeter配置的底层逻辑讲起而不是直接甩出一个jmx文件让你导入——因为错配一个线程组类型就可能让整个测试结果失去参考价值。2. JMeter配置的核心陷阱别让“默认设置”毁掉你的基准数据很多人第一次用JMeter测Open MCT上来就新建一个线程组填100个线程、循环10次加个HTTP请求采样器URL写/api/v1/telemetry?pointIdTEMP_001点运行——然后发现TPS只有2090%响应时间飙到3秒立刻断言“Open MCT性能太差”。这种测试毫无意义。问题不出在Open MCT而出在JMeter配置本身对Open MCT通信模型的严重误判。2.1 Open MCT的通信模型决定了JMeter必须“分层建模”Open MCT的数据流不是传统RESTful的“请求-响应”单次交互而是三层嵌套结构层级协议/机制典型行为JMeter对应能力L1会话建立层HTTP Cookie Session ID用户登录后获取JSESSIONID后续所有请求携带该CookieHTTP Cookie Manager JSON Extractor提取Session IDL2数据订阅层WebSocket/websocket前端通过WS连接持续接收遥测更新每秒1~10帧非请求驱动JMeter WebSocket Samplers需插件或自定义JSR223 Sampler模拟WS心跳L3按需查询层REST API/api/v1/...查历史数据、获取元数据、提交指令等偶发操作标准HTTP Request Sampler提示如果你只测L3层纯HTTP API而忽略L2层的WebSocket长连接资源占用测出来的“并发数”根本无法反映真实用户负载。一个真实用户 1个HTTP Session 1个WebSocket连接 若干零星API调用。JMeter必须按此比例建模否则就是拿“出租车空驶率”去评估“城市通勤运力”。2.2 线程组选型并发≠线程数必须匹配用户生命周期JMeter默认的“线程组Thread Group”适用于短时爆发型请求如电商秒杀但Open MCT用户是长时间在线、低频交互、高连接保活的。用它会导致两个致命问题连接风暴100个线程在1秒内全部启动瞬间建立100个WebSocket连接触发服务端连接池耗尽错误率飙升——这不是用户真实行为是测试工具制造的DDoS会话污染每个线程独立维护Cookie但Open MCT的Session ID有超时机制默认30分钟线程运行10分钟后大量请求因Session过期返回401TPS暴跌——这不是服务瓶颈是测试设计缺陷。正确做法是使用Ultimate Thread Group需安装Custom Thread Groups插件设置“启动时间”为300秒5分钟让100个用户均匀上线模拟真实值班交接班场景设置“持有时间”为1800秒30分钟确保每个线程维持完整会话周期启用“执行一次”选项避免单个线程重复登录导致Session覆盖。我实测过同样100用户用默认线程组Open MCT后端Tomcat的maxThreads200在第37秒就打满换Ultimate Thread Group后线程池利用率稳定在65%左右这才接近生产环境的真实压力分布。2.3 WebSocket采样器别被“插件能连上”骗了JMeter原生不支持WebSocket需安装JMeter WebSocket Samplers by Peter Doornbosch插件。但装完只是第一步关键在配置细节Connection URL必须带路径参数Open MCT的WebSocket端点是ws://localhost:8080/websocket?sessionId{session_id}其中{session_id}需从登录响应头中提取。很多人直接写死ws://.../websocket导致服务端拒绝连接403 ForbiddenMessage Type必须设为TextOpen MCT的WS帧是JSON格式文本若设为BinaryJMeter会发送二进制乱码服务端解析失败Ping Interval必须启用且设为25秒Open MCT服务端默认25秒发一次Ping客户端必须响应Pong否则3次超时后断连。JMeter插件默认不发Ping需勾选“Send Ping Message”并设间隔≤25秒。有一次我漏设Ping Interval在压测到第78秒时所有WS连接批量断开日志里全是WebSocket connection closed unexpectedly。排查了3小时才发现是这个25秒的硬性约定——Open MCT的源码里WebSocketTelemetryService.java第142行明确写了pingInterval 25000。3. 负载测试策略测什么比怎么测更重要很多团队把性能测试做成“撞大运”随便选几个接口狂刷看TPS和错误率然后写报告说“系统满足要求”。在Open MCT这类强状态、多协议、长生命周期的系统上这种策略注定失败。我们必须回归业务本质定义三类核心可观测指标并为每类设计对应的测试场景。3.1 场景一遥测数据吞吐能力L2层核心这是Open MCT最核心的能力——实时推送遥测数据。测试目标不是“能推多快”而是“在指定点位规模下端到端延迟是否可控”。测试设计要点数据源模拟Open MCT本身不生成遥测需外部服务如MockServer或Python脚本按固定频率向/api/v1/telemetry/publishPOST数据。我们设定每秒向100个点位各推送1条数据即100 TPS持续5分钟客户端负载配置50个JMeter线程每个线程登录获取Session建立WebSocket连接订阅这100个点位记录从WS收到第一条数据到第1000条数据的时间戳计算P95延迟关键阈值P95延迟 ≤ 800ms行业通用实时监控容忍上限。实测发现的典型瓶颈当点位数从100扩到500时延迟未升反降——因为Open MCT的TelemetryPublisher内部做了批处理优化单次推送500点比100次单点推送更高效但当点位数超过2000延迟陡增根源在WebSocket消息序列化JacksonJsonSerializer对超长JSON数组的处理耗时呈指数增长。解决方案是改用StreamingJsonSerializer需修改Open MCT源码telemetry/serializer.js实测将2000点推送延迟从2.1s降至380ms。注意不要用JMeter的“聚合报告”看这个场景的“平均响应时间”——WS消息是持续流入的没有“请求开始/结束”的明确边界。必须用JSR223 Listener写Groovy脚本捕获每条消息的System.nanoTime()时间戳再计算滑动窗口延迟。3.2 场景二历史数据查询性能L3层关键路径调度员经常需要回溯过去24小时的温度曲线这触发/api/v1/telemetry/history接口。该接口性能直接影响用户体验但极易被忽视。测试设计要点参数组合爆炸一个查询请求包含pointId单点/多点、start/end时间范围、resolution采样精度、limit最大返回条数。必须覆盖典型组合单点24h1min分辨率 → 预期返回约1440条10点7d10min分辨率 → 预期返回约10080条缓存穿透防护Open MCT默认开启Ehcache但首次查询必穿缓存。测试需区分“冷查询”Cache Miss和“热查询”Cache Hit两种模式分别记录P95延迟数据库压力隔离为避免MySQL慢查询拖累结果我们在测试机上用pt-query-digest实时监控当SELECT ... FROM telemetry_data WHERE point_id ? AND timestamp BETWEEN ? AND ?执行超500ms时立即标记该轮测试为“DB瓶颈”。踩坑实录最初我们只测了单点查询P95稳定在120ms以为达标。上线后用户反馈“查10个点的曲线特别卡”。追查发现Open MCT的HistoryQueryService对多点查询是串行执行的for循环调每个点10个点就变成10次独立SQL。修复方案是重写DAO层用IN (point1, point2, ...)单次查询内存分组性能提升6.8倍。这个坑只测单点永远发现不了。3.3 场景三多用户协同操作稳定性L1L2L3混合这才是最贴近真实生产环境的测试——不是“一个人猛刷”而是“一群人各干各的”。测试脚本结构以30用户为例基础流100%用户执行登录 → 加载主面板触发WS连接初始API→ 每30秒刷新一次遥测模拟自动轮询高频流30%用户执行每10秒切换一次子面板触发/api/v1/views/{id}→ 每60秒导出当前曲线为CSV触发/api/v1/telemetry/export低频流10%用户执行每5分钟手动确认一条告警触发/api/v1/alerts/{id}/acknowledge→ 每10分钟修改一次参数触发/api/v1/parameters/{id}。关键观察项WebSocket连接存活率应≥99.9%允许极个别网络抖动断连Session超时率应0.1%说明会话管理正常各类API错误率除/api/v1/alerts/acknowledge因业务逻辑可能返回409冲突外其余接口错误率应为0。真实案例在某风电场项目中我们按此策略跑30用户2小时发现/api/v1/parameters/{id}错误率突然在第87分钟升至12%。日志显示ParameterUpdateService抛出ConcurrentModificationException。根因是Open MCT的ParameterRegistry使用了非线程安全的HashMap当多个用户同时更新参数时发生迭代冲突。解决方案是替换为ConcurrentHashMap并在updateParameter方法加synchronized块——这个并发Bug在单元测试和单用户测试中100%无法暴露。4. 数据采集与归因分析从“数字报表”到“根因地图”JMeter跑完生成一堆图表聚合报告、响应时间图、活动线程数……但这些只是“症状”不是“病灶”。真正的性能工程是要把测试数据变成可行动的根因线索。我们建立了三级归因体系4.1 L0层JMeter自身指标排除工具干扰先确认测试结果可信。重点盯三个JMeter内置指标Active Threads Over Time曲线是否平滑若出现锯齿状剧烈波动说明线程组配置不当或GC频繁Response Times Over Time是否随时间推移持续恶化若是大概率是内存泄漏如WebSocket Session未释放Latency vs Connect Time若Connect Time建连耗时占总响应时间70%以上说明网络或服务端连接池配置有问题而非业务逻辑慢。我们曾遇到一个诡异现象所有API响应时间在测试30分钟后突增至5秒但Connect Time始终50ms。最终发现是Open MCT的Logback配置中RollingFileAppender的TimeBasedTriggeringPolicy未设maxHistory日志文件滚动生成上百GB磁盘IO打满间接拖慢了整个JVM。——这个结论是从JMeter的jpgc - Transactions per Second图表中“突变点”与服务器iostat -x 1输出的%util峰值完全同步才锁定的。4.2 L1层Open MCT服务端指标定位模块瓶颈在Open MCT部署机上必须同时采集以下指标JVM层面jstat -gc pid每5秒采样重点关注G1 Old Gen使用率和FGC次数线程层面jstack pid | grep WebSocket看是否有大量WAITING状态的WS线程表明消息队列阻塞HTTP容器Tomcat的manager/status页面监控maxThreads、currentThreadsBusy、processingTimeWebSocket会话Open MCT提供/api/v1/monitoring/sessions端点需启用monitoring.enabledtrue返回实时连接数、消息吞吐量、平均延迟。关键技巧不要等测试结束再看日志。我们用tail -f catalina.out | grep -E (ERROR|WARN|WebSocket)实时过滤配合grep -A 5 -B 5 OutOfMemoryError快速定位异常堆栈。有一次sessions端点返回连接数稳定在200但jstack显示350个WebSocketHandler线程处于BLOCKED最终发现是TelemetryCache的getLatestValue方法锁住了整个缓存实例——这是典型的“大锁滥用”修复后200连接下的P95延迟从1.2s降至210ms。4.3 L2层基础设施与依赖服务穿透应用层Open MCT很少单机运行它依赖后端数据服务如InfluxDB、TimescaleDB用influx -execute SHOW DIAGNOSTICS查InfluxDB的queryExecutor队列长度认证服务如Keycloak监控keycloak-metrics-spi暴露的authentication_login_success_count文件存储如S3兼容存储aws s3 ls s3://openmct-bucket/ --recursive | wc -l验证静态资源加载是否超时。血泪教训某次压测中/api/v1/telemetry/history错误率高达40%JMeter显示全是504 Gateway Timeout。我们层层排查Open MCT日志无ERRORInfluxDB指标正常最后发现是Nginx反向代理配置了proxy_read_timeout 60而InfluxDB查7天数据默认超时90秒。把Nginx的proxy_read_timeout调到120秒错误率归零。——这个配置项在Open MCT文档里提都没提但却是生产环境的隐形地雷。4.4 归因决策树5分钟定位90%的性能问题基于上百次压测经验我们总结出一张快速归因决策树文字版问题现象P95响应时间超标 ├─ Step 1查JMeter的Connect Time占比 │ ├─ 50% → 检查网络延迟、DNS解析、服务端连接池Tomcat maxThreads │ └─ 20% → 进入Step 2 ├─ Step 2查Open MCT /api/v1/monitoring/sessions 返回的 avgLatency │ ├─ 500ms → 问题在WebSocket层检查JVM GC、TelemetryPublisher队列、序列化器 │ └─ 100ms → 进入Step 3 ├─ Step 3查对应API的Tomcat access_log看status码分布 │ ├─ 大量4xx → 检查JMeter参数如pointId不存在、认证失效 │ ├─ 大量5xx → 检查Open MCT日志ERROR堆栈 │ └─ 大量2xx但耗时长 → 进入Step 4 └─ Step 4用Arthas attach到JVM执行 watch com.nasa.openmct.telemetry.HistoryQueryService queryHistory {params,returnObj,throwExp} -n 5 └─ 看实际SQL执行时间、是否命中索引、返回数据量这张表不是理论是我们贴在工位上的打印纸。每次压测遇到新问题第一反应不是翻文档而是按这个树走一遍90%的问题能在5分钟内圈定根因模块。5. 实战配置清单可直接复用的JMeter参数与脚本片段光讲原理不够这里给出经过生产环境验证的、可直接复制粘贴的JMeter配置项。所有参数均基于Open MCT v1.8.4 Tomcat 9.0.83 Java 11实测。5.1 全局配置jmeter.properties# 关键性能调优项 https.default.protocolTLSv1.2 httpclient4.retrycount1 # 禁用JMeter GUI模式下的冗余采样节省内存 jmeter.save.saveservice.output_formatcsv jmeter.save.saveservice.response_datafalse jmeter.save.saveservice.samplerDatafalse # 启用WebSocket插件必需 jmeter.threadMonitor.delay50005.2 登录流程HTTP Sampler JSON ExtractorHTTP请求POST/api/v1/loginBody Data:{username:admin,password:password}JSON ExtractorNames of created variables:sessionIdJSON Path Expressions:$.sessionIdMatch No.:1HTTP Cookie Manager自动勾选“Clear cookies each iteration”5.3 WebSocket连接WebSocket Open ConnectionServer Name or IP:localhostPort Number:8080Connection URL:/websocket?sessionId${sessionId}Message Type:TextPing Interval (ms):25000Max Reconnection Attempts:35.4 遥测订阅WebSocket Send Text MessageMessage:{type:subscribe,object:{id:TEMP_001,namespace:default}}Wait for message response:false订阅是异步的无需等待响应5.5 历史查询HTTP Sampler with CSV Data Set ConfigCSV Data Set ConfigFilename:test-data/points.csv内容POINT_001,POINT_002,...,POINT_100Variable Names:pointIdRecycle on EOF?:TrueStop thread on EOF?:FalseHTTP请求GET/api/v1/telemetry/history?pointId${pointId}start${__timeShift(yyyy-MM-dd HH:mm:ss,,P1D)}end${__time(yyyy-MM-dd HH:mm:ss)}resolution60000__timeShift生成24小时前时间戳__time生成当前时间戳5.6 自定义监听器JSR223 Listener for WS Latencyimport org.apache.jmeter.util.JMeterUtils; import java.time.Instant; // 在WebSocket收到消息时执行 if (prev.getResponseDataAsString().contains(telemetry)) { long now System.nanoTime(); // 从消息中提取timestamp字段Open MCT遥测JSON含timestamp:1712345678901 def json new groovy.json.JsonSlurper().parseText(prev.getResponseDataAsString()); long msgTime json.timestamp; long latencyNs now - (msgTime * 1_000_000); // 转纳秒 long latencyMs latencyNs / 1_000_000; // 写入自定义日志供后续分析 def logFile new File(ws-latency-${props.get(TEST_ID)}.log); logFile ${System.currentTimeMillis()},${latencyMs}\n; }提示这个脚本必须放在WebSocket Sampler下方且勾选“Reset on Each Iteration”。我们用它生成的ws-latency-xxx.log再用Python脚本计算P95python3 -c import numpy as np; print(np.percentile(np.loadtxt(ws-latency-123.log, delimiter,)[:,1], 95))。6. 我的三条硬核经验来自23次Open MCT压测现场最后分享我在真实项目中摔出来的、文档里绝对找不到的三条经验。它们不炫技但每一条都救过急。第一条永远先测“单用户黄金路径”再扩并发。所谓黄金路径登录 → 加载主面板 → 订阅10个关键点 → 查1次历史 → 手动确认1条告警。用JMeter跑1个线程循环100次记录P95。如果这条路径都超1秒说明基础配置就有问题比如JVM堆内存没调够、数据库索引缺失。我见过太多团队跳过这步直接上100并发结果所有数据都是噪声。记住并发放大的是已存在的问题不会凭空创造新问题。第二条Open MCT的“性能开关”藏在application.properties里不是代码里。很多人拼命改源码其实80%的性能提升来自配置openmct.telemetry.cache.size5000默认200小了缓存命中率低大了GC压力大server.tomcat.max-connections1000默认200WebSocket连接数直接受限spring.redis.timeout2000如果启用了Redis缓存超时设太短会导致大量缓存穿透。这些参数在src/main/resources/application.properties里改完重启即可生效。我们某次将cache.size从200调到2000历史查询P95从850ms降到320ms——没动一行代码。第三条压测报告里最有价值的不是TPS数字而是“错误率突变时刻”的前后5分钟日志。我坚持一个习惯每次压测前用journalctl -u tomcat --since 2024-04-01 10:00:00 -o json pre-test.log备份系统日志压测中用script -q -c jmeter -n -t test.jmx test-run.log完整记录JMeter控制台输出压测后用date命令标出错误率首次突破1%的时间点然后精准截取该时刻前后5分钟的所有日志grep -A 300 -B 300 2024-04-01T10:15:22 *.log root-cause.log。90%的深层Bug就藏在这份root-cause.log的第3行和第287行之间——因为那里有GC日志、线程dump、数据库慢查询的交叉印证。Open MCT不是玩具它是真正在天上飞的系统在地面的孪生体。它的性能测试容不得半点“差不多”。每一个配置项、每一行脚本、每一次日志分析背后都是对可靠性的敬畏。当你把JMeter的线程组参数调到和调度员的交接班节奏一致当你把WebSocket的Ping Interval设成和Open MCT源码里写的25秒严丝合缝当你在凌晨三点盯着root-cause.log里那行java.lang.OutOfMemoryError: GC overhead limit exceeded反复比对GC日志——那一刻你测的不是软件是责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2633316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…