云原生内存管理利器:OpenClaw插件原理与Kubernetes实战

news2026/5/4 4:29:42
1. 项目概述一个为云原生环境设计的智能内存管理插件最近在折腾一个挺有意思的开源项目叫MemTensor/MemOS-Cloud-OpenClaw-Plugin。光看这个名字就能拆出不少信息量MemTensor和MemOS暗示了它跟内存管理和操作系统内核有关Cloud点明了它的主战场是云环境而OpenClaw这个有点酷的名字结合Plugin说明它是一个可插拔的、具备某种“抓取”或“控制”能力的插件。简单来说这是一个旨在为云原生环境比如 Kubernetes 集群提供精细化、智能化内存资源管理的开源插件。在云上跑应用尤其是微服务架构内存管理一直是个让人又爱又恨的痛点。传统的操作系统内存管理机制比如 Linux 的伙伴系统和 Slab 分配器在面对容器化、高密度部署的场景时常常显得力不从心。一个典型的场景是“内存争用”多个容器共享同一个物理节点某个容器因为内存泄漏或突发负载会疯狂吞噬内存导致同节点上的其他容器被 OOM Killer内存溢出杀手无情干掉服务中断。更头疼的是在 Kubernetes 里你给 Pod 设置的内存请求request和限制limit很多时候并不能完美地转化为实际的内存使用效率。设置得太保守资源浪费设置得太激进又容易触发 OOM。这个OpenClaw-Plugin要解决的正是这类问题。它试图在应用层和内核层之间建立一个更灵敏、更主动的内存调控机制像一只灵活的“爪子”Claw根据实时负载动态地“抓取”和“释放”内存资源提升整体集群的稳定性和资源利用率。这个项目适合谁呢如果你是运维工程师、SRE站点可靠性工程师或者云平台开发者正在为集群内存利用率低下、应用频繁 OOM 而头疼那么这个插件值得你深入研究。它涉及到 Linux 内核、eBPF扩展伯克利包过滤器、Kubernetes 调度器扩展等相对底层的技术所以也需要读者具备一定的 Linux 系统和容器基础知识。不过别担心我会尽量用通俗的方式带你拆解它的核心原理和实操要点。2. 核心设计思路与架构拆解2.1 为什么云原生环境需要专门的内存管理插件要理解OpenClaw-Plugin的设计首先得明白传统内存管理在云上的“水土不服”。在物理机或虚拟机上一个应用独占所有资源内存管理相对简单。但在 Kubernetes 这样的容器编排平台里情况复杂得多资源共享与隔离的冲突多个 Pod容器组共享节点物理内存但每个 Pod 又希望有独立的内存视图。Cgroups 提供了内存限制和隔离但其控制相对粗放主要基于使用量触发限制或回收缺乏预测和主动调节能力。内存压力的滞后性Linux 内核的 OOM Killer 是最后一道防线它只在系统内存严重不足时才会被触发采取“杀死进程”这种破坏性极大的手段来释放内存。对于需要高可用的服务来说这是不可接受的。应用内存行为的多样性不同应用对内存的使用模式千差万别。有的内存使用平稳如静态 Web 服务有的则存在周期性峰值如批处理作业还有的会有缓慢的内存泄漏。统一的、静态的内存限制策略很难适配所有场景。资源利用率的博弈为了提高节点资源利用率我们往往希望将 Pod 调度得更密集一些。但这增加了内存争用的风险。如何在提高利用率和保障稳定性之间找到平衡点是个动态的、需要持续调整的过程。OpenClaw-Plugin的设计目标就是成为这个动态平衡的“调节器”。它不取代内核的内存管理而是在其之上增加一个智能的观测和调控层。2.2 “OpenClaw” 的核心思想感知、决策、执行从项目名可以推断其核心思想是一个闭环控制系统感知Open开放地、全方位地收集内存使用指标。这不仅仅是看free -m命令输出的系统级内存更重要的是深入到每个 Pod、每个容器、甚至每个进程的内存使用细节包括 RSS常驻内存集、Cache、Swap如果启用、Page Faults缺页中断频率、内存回收压力等。此外还需要感知应用的业务指标如 QPS、请求延迟将资源使用与业务状态关联起来。决策Claw - Brain基于收集到的指标通过一套策略引擎进行分析和决策。例如预测根据历史趋势预测某个 Pod 在未来一段时间内的内存需求。诊断判断当前的内存压力是暂时的突发流量导致还是持续的内存泄漏。策略决定采取何种动作是动态调整 Pod 的 Cgroup 内存限制memory.limit_in_bytes还是向 Kubernetes 调度器建议迁移 Pod或是向应用本身发送信号如通过 Sidecar 通知 Java 应用触发 Full GC执行Claw - Hand将决策转化为具体的操作。这可能包括动态调整 Cgroup 参数安全地修改容器的内存限制。与 Kubernetes 交互通过 Admission Webhook 修改 Pod 规格或通过调度器扩展影响调度决策。应用层协作通过预定义的接口如 HTTP endpoint、信号通知应用进行内存优化。这个“感知-决策-执行”的闭环就是OpenClaw这只智能爪子的工作流程。Plugin的形式意味着它可以作为 DaemonSet 部署在每个节点上以插件方式无缝集成到现有的 Kubernetes 集群中无需修改内核或容器运行时。2.3 技术栈选型分析要实现上述设计项目很可能会采用以下技术栈组合这也是目前云原生可观测性和控制领域的常见选择eBPF核心观测层这是实现深度、低开销“感知”能力的关键。eBPF 允许用户态程序将沙盒代码加载到内核中运行可以安全、高效地跟踪内核事件。OpenClaw-Plugin很可能利用 eBPF 来挂钩mmap,brk,malloc(通过 uprobe) 等内存分配相关系统调用追踪进程级内存分配。监控memory cgroup的压力事件memory.pressure_level。收集详细的页错误和交换统计信息。相比传统的从/proc文件系统频繁读取eBPF 的效率要高得多开销也小。Prometheus Metrics Server指标收集与暴露插件需要将 eBPF 收集的原始数据聚合成有意义的指标如container_memory_working_set_bytes、container_memory_cache、自定义的内存压力指标并通过标准的 Prometheus 格式暴露出来。这样集群的监控系统如 Prometheus可以轻松抓取这些数据用于展示、告警并反馈给决策引擎。策略引擎决策大脑这可能是一个内置的、基于规则的状态机也可能集成轻量级的机器学习库如 ONNX Runtime 用于运行预训练模型进行时间序列预测。规则引擎可以处理诸如“如果 Pod A 的内存使用率在 5 分钟内持续超过其请求的 90%且同节点其他 Pod 内存充裕则将其内存限制上调 10%”这样的策略。Kubernetes Client-go执行臂用于与 Kubernetes API Server 交互执行 Pod 的更新、读取节点信息等操作。这是实现与 Kubernetes 生态集成的标准方式。Go 语言主要实现语言鉴于其优秀的并发性能、丰富的 Kubernetes 生态库client-go以及 eBPF 开发库如 cilium/ebpfGo 是实现此类云原生插件的理想选择。3. 核心功能模块深度解析3.1 细粒度内存指标采集模块这是插件的数据基石。传统的容器监控通常只关注memory.usage_in_bytes这样的总量指标。OpenClaw-Plugin需要更细致的视角工作集大小Working Set Size, WSS这是评估一个容器“活跃”内存量的关键。它大致等于 RSS常驻内存减去一部分未被主动访问的缓存文件页。准确估算 WSS 比单纯看 RSS 更能反映真实的内存压力。实现上可能需要结合 eBPF 跟踪页访问位图通过pagetypeinfo或更底层的内核数据。内存回收压力指标直接读取memory cgroup下的memory.pressure文件需内核支持 PSI - Pressure Stall Information。PSI 提供了等待内存回收所花费的时间比例能提前预警内存紧张比单纯的使用率百分比更灵敏。逐进程内存剖析通过 eBPF 绑定到特定容器的 PID namespace追踪容器内所有进程的内存分配来源例如区分是来自业务代码的malloc还是第三方库的分配。这对于诊断“谁吃了内存”至关重要。跨容器关联指标采集节点总内存、其他 Pod 的内存使用情况用于判断内存压力是全局性的还是局部性的。实操心得eBPF 程序的编写和调试是这一模块最大的挑战。一个常见的坑是 eBPF 验证器Verifier对循环和内存访问的限制。在编写用于遍历进程页表或复杂数据结构的 eBPF 代码时往往需要用展开循环、使用bpf_probe_read_kernel等安全函数来绕过限制。建议使用像libbpf或cilium/ebpf这样的现代库它们提供了更好的开发体验和可移植性。3.2 智能策略与决策引擎采集到数据后如何做出明智的决策这个模块是插件的“大脑”。规则引擎这是最直接的方式。可以定义一系列IF-THEN规则。例如rules: - name: ScaleUpMemoryOnHighWorkingSet condition: container_memory_working_set_bytes / container_memory_limit_bytes 0.85 for 2m action: type: AdjustCgroupLimit target: container adjustment: increase_by_percentage value: 10 cooldown: 5m # 防止频繁震荡 - name: RecommendRescheduleOnNodePressure condition: node_memory_pressure_some 0.3 for 5m action: type: MarkPodForMigration target: pod priority: low # 优先迁移优先级低的Pod规则引擎的优势是直观、可解释性强。但缺点是需要运维人员预先定义大量规则且难以处理复杂的、非线性的情况。预测模型更高级的做法是引入预测。使用时间序列预测算法如 Facebook 的 Prophet、LSTM 神经网络对每个 Pod 的内存工作集进行短期预测例如未来5-10分钟。如果预测值将超过当前限制则提前采取扩容动作实现“防患于未然”。OpenClaw-Plugin如果集成了轻量级 ML 推理其模型训练可能是在离线环境完成的在线部分只负责加载模型和进行推理。决策优先级与冲突解决当多个规则被触发时需要仲裁机制。例如一个 Pod 需要更多内存但同时节点整体压力很大。这时决策引擎需要根据 Pod 的 QoS 等级Guaranteed, Burstable, BestEffort、业务优先级等因素决定是满足该 Pod 的请求还是限制它甚至驱逐它。3.3 无侵入式内存调控执行器决策之后需要安全、无侵入地执行。这是最需要谨慎处理的部分因为错误的内存调整可能导致应用崩溃。动态调整 Cgroup Limit这是最直接的执行动作。通过写入容器对应的memory.limit_in_bytes文件即可。但这里有巨大风险瞬间缩容如果当前内存使用已经超过新的、更小的限制内核会立即尝试回收内存如果回收不掉会触发 OOM Killer。因此缩容操作必须极其谨慎通常需要结合内存压力预测确保在内存使用低谷期进行并且每次缩小的幅度要非常小如1%-2%。扩容的虚假安全感仅仅调高 limit 并不能增加节点的物理内存。如果多个容器同时扩容可能导致节点超卖Overcommit加剧最终引发系统级 OOM。因此插件必须维护一个节点级别的“可分配内存预算”并与其他调度组件协同。与 Kubernetes 调度器协同更优雅的方式是影响调度决策。插件可以通过实现 Kubernetes 调度器扩展Scheduler Extender或使用动态资源分配Dynamic Resource Allocation特性向调度器提供实时、精细化的节点内存可用性视图。例如告诉调度器“节点A虽然总内存有空余但碎片化严重不适合调度需要大块连续内存的Pod。” 或者“Pod P 预计未来内存需求增长建议将其调度到内存更充裕的节点。”应用层通知合作式回收对于一些有状态的应用如 Java有 GC、Redis可配置最大内存策略插件可以通过 Sidecar 容器或向 Pod 内发送特定信号如 UNIX signal通知应用进行内存自检和回收。这需要应用侧提供相应的接口或遵循某种约定属于“合作式”内存管理效果最好但通用性稍差。注意事项绝对不要在生产环境中盲目启用动态缩容功能必须先在小规模测试环境中用真实的业务负载进行长时间验证。监控调整前后应用的延迟、错误率和 GC 行为。建议为关键业务 Pod 设置一个“最小安全限制”插件无论如何调整都不能低于这个值。4. 部署与实操配置指南假设我们已经拿到了MemTensor/MemOS-Cloud-OpenClaw-Plugin的源码或 Helm Chart以下是如何在一个测试 Kubernetes 集群中部署和配置它的详细步骤。4.1 环境准备与前提条件Kubernetes 集群版本建议在 1.20 以上。可以使用 Minikube、Kind 或任何云托管的 K8s 服务搭建测试环境。内核要求这是关键。节点内核需要支持 eBPF并且最好启用 PSIPressure Stall Information功能。检查命令# 检查 eBPF 支持 grep -i bpf /proc/kallsyms | head -5 # 检查 PSI 支持 cat /proc/pressure/memory如果/proc/pressure/memory文件存在并输出内容则支持 PSI。对于云服务器可能需要选择特定镜像或调整内核参数。Helm可选如果项目提供 Helm Chart这是最简单的部署方式。权限插件需要较高的权限来部署 eBPF 程序和修改 Cgroup 文件。通常需要创建专门的ServiceAccount并绑定ClusterRole。4.2 使用 Helm 部署假设方式如果项目提供了 Helm Chart部署流程会非常简洁。# 1. 添加仓库假设 helm repo add memtensor https://memtensor.github.io/helm-charts helm repo update # 2. 查看可配置参数 helm show values memtensor/openclaw-plugin values.yaml # 3. 编辑 values.yaml关键配置示例 # openclaw-plugin/values.yaml controller: image: repository: ghcr.io/memtensor/openclaw-plugin tag: v0.1.0 # 资源限制eBPF程序本身开销小但策略引擎可能需要CPU resources: requests: memory: 128Mi cpu: 100m limits: memory: 256Mi cpu: 500m # 策略配置 policy: # 启用动态调整Cgroup limit测试阶段建议关闭缩容 enableCgroupAdjust: true # 缩容功能开关生产环境谨慎开启 enableShrink: false # 默认调整冷却时间防止震荡 adjustmentCooldown: 3m # 最大调整幅度百分比 maxAdjustmentPercentage: 20 # 指标采集配置 metrics: # eBPF采集频率 collectionInterval: 15s # 暴露的Prometheus端口 port: 9091 # 4. 部署到 openclaw-system 命名空间 helm install openclaw-plugin memtensor/openclaw-plugin -n openclaw-system --create-namespace -f values.yaml部署后使用kubectl get pods -n openclaw-system检查 DaemonSet 的 Pod 是否在每个节点上都运行成功。4.3 核心配置详解与策略制定部署成功后核心工作在于配置策略。插件可能会通过 ConfigMap 来提供策略配置。目标命名空间选择通常不会对所有命名空间的 Pod 都进行管理。可以通过配置选择器selector来指定作用范围例如只管理带有标签openclaw-managed: true的 Pod。# configmap-policy.yaml apiVersion: v1 kind: ConfigMap metadata: name: openclaw-policy namespace: openclaw-system data: policy.yaml: | targetSelector: matchLabels: openclaw-managed: true rules: - name: burstable-pod-memory-scale description: 为Burstable Pod提供弹性内存 targetQoS: [Burstable] # 仅针对Burstable类型 metrics: - name: memory_working_set_ratio source: container operator: GreaterThan threshold: 0.80 duration: 1m action: type: cgroup_adjust direction: increase # 仅扩容 step: 5% # 每次增加5% maxLimit: 2Gi # 上限为2Gi防止无限增长 cooldown: 2m分级策略为不同重要性的 Pod 设置不同策略。例如Guaranteed Pod通常不进行动态调整或只允许极小幅度、非常谨慎的调整因为它们的资源是保证的。Burstable Pod是弹性管理的主要对象可以设置相对积极的扩容策略和保守的缩容策略。BestEffort Pod可以设置更激进的缩容策略在节点内存紧张时优先压缩它们的资源。与 HPA水平Pod自动扩缩容协同如果应用同时配置了 HPA基于CPU或自定义内存指标需要小心协调。OpenClaw-Plugin调整的是单个 Pod 的资源上限垂直方向而 HPA 调整的是 Pod 数量水平方向。两者可能产生冲突。一种思路是让OpenClaw优先处理短期、频繁的波动而 HPA 处理长期的、趋势性的负载变化。可以在策略中设置当 Pod 内存持续高于某个阈值且垂直扩容已到顶时触发一个事件来建议 HPA 扩容。4.4 监控与验证部署效果部署后必须建立完善的监控来观察插件的行为和效果。监控插件自身指标抓取插件暴露的 Prometheus 指标如openclaw_adjustment_operations_total调整操作次数、openclaw_decision_latency_seconds决策延迟。日志查看插件容器的日志关注有无错误或警告信息。日志级别通常可以配置。kubectl logs -f daemonset/openclaw-plugin -n openclaw-system --tail50监控被管理Pod对比调整前后 Pod 的container_memory_working_set_bytes、container_memory_limit_bytes以及应用业务指标如请求延迟、错误率。在 Grafana 中制作面板将内存限制线、实际使用线、以及插件的调整事件标记在同一张图上直观观察调整时机是否合理。验证稳定性人为制造内存压力在测试 Pod 中运行一个缓慢吞噬内存的程序观察插件如何反应是否会触发预期中的扩容以及扩容后应用是否恢复稳定。观察“震荡”检查是否有 Pod 的内存限制在短时间内被频繁调高和调低这是策略参数如阈值、冷却时间设置不合理的表现。5. 常见问题排查与实战技巧在实际使用中你肯定会遇到各种问题。下面是我根据类似系统经验总结的一些常见坑点和排查思路。5.1 插件 DaemonSet Pod 启动失败现象kubectl get pods显示 DaemonSet 的 Pod 处于CrashLoopBackOff或Init:Error状态。排查思路检查内核兼容性这是最常见的原因。查看 Pod 日志如果出现“BPF program load failed: invalid argument”或“kernel doesn‘t support PSI”等错误说明节点内核不符合要求。kubectl logs openclaw-pod-name -n openclaw-system --previous解决方案升级节点内核或为插件 DaemonSet 添加节点选择器nodeSelector只调度到符合条件的内核版本的节点上。权限不足eBPF 程序加载和 Cgroup 文件写入需要特权。确保插件使用的 ServiceAccount 拥有足够的 RBAC 权限并且 Pod 的 SecurityContext 中可能设置了privileged: true或相应的CAP_BPF,CAP_SYS_ADMIN等 Linux Capabilities。检查部署的 YAML 文件。资源文件缺失某些 eBPF 程序可能需要内核头文件/usr/src/linux-headers-*。如果采用容器部署需要确保基础镜像中包含这些头文件或者使用像cilium/ebpf这样支持 CO-RECompile Once - Run Everywhere的库避免内核依赖。5.2 策略不生效Pod 内存未被调整现象Pod 内存使用率已超过策略阈值但查看其 Cgroup limit 并未改变。排查思路检查目标选择器确认你的 Pod 是否带有策略中配置的标签如openclaw-managed: true。kubectl get pod your-pod-name --show-labels检查策略规则条件确认策略中的指标名称、阈值、持续时间是否配置正确。插件采集的指标名可能和你从 Prometheus 看到的标准名不同。需要查阅插件的指标文档。查看决策日志将插件的日志级别调整为debug查看它是否采集到了目标 Pod 的指标以及规则引擎的计算过程看是否满足触发条件。检查冷却时间Cooldown如果该 Pod 最近刚被调整过可能处于冷却期内新的调整请求会被忽略。检查资源上限可能 Pod 的内存限制已经达到了策略中设置的maxLimit或者节点已无足够可分配内存导致扩容请求被拒绝。5.3 调整引发应用不稳定或 OOM现象插件调整了 Pod 的内存限制后应用出现性能下降、频繁 Full GC对于 Java或直接被 OOM Kill。排查思路与解决缩容过于激进这是最危险的情况。立即关闭缩容策略然后分析工作集估算不准插件依赖的 WSS 估算模型可能不准确将活跃内存估小了。可以尝试调整算法参数或暂时使用更保守的指标如 RSS。应用内存使用模式有些应用的内存使用存在“锯齿波”在缩容的瞬间可能正好遇到一个周期性的峰值。解决方法是大幅延长缩容判断的持续时间duration例如从 “1分钟” 改为 “10分钟”并增加冷却时间。扩容未能缓解压力如果扩容后应用依然 OOM可能是内存泄漏应用本身存在内存泄漏再多的内存也会被吃光。此时插件治标不治本需要从应用层面排查。调整速度跟不上增长内存泄漏或请求暴涨的速度超过了插件扩容的速度受step和cooldown限制。可以适当调大单步调整的百分比但这会增加风险。Java 应用特殊问题Java 应用的内存由 JVM 堆和非堆内存组成。单纯调整容器 Cgroup LimitJVM 并不会自动感知并调整堆大小除非使用-XX:UseCGroupMemoryLimitForHeap等参数但其行为复杂。更佳实践是让插件通过 Sidecar 通知 JVM 进行 GC 或动态调整堆参数如果应用支持。5.4 与集群其他组件的冲突现象OpenClaw-Plugin与 VPAVertical Pod Autoscaler、HPA 或集群自动伸缩器Cluster Autoscaler行为冲突。解决思路明确职责边界在架构设计上就划定界限。例如让OpenClaw负责秒到分钟级的快速弹性响应而 VPA 负责小时到天级别的资源推荐和重建 Pod。可以通过配置让它们管理不同的 Pod 或不同的资源维度。信息同步如果插件具备标记能力可以在它调整了某个 Pod 的资源后给 Pod 打上一个标签如openclaw-adjusted: “true”。然后配置 VPA 的更新策略忽略带有此标签的 Pod避免覆盖OpenClaw的调整。使用上层协调器在更复杂的系统中可以引入一个简单的协调器服务接收来自OpenClaw、VPA 的建议根据全局策略做出最终决策避免多头管理。5.5 性能开销评估任何监控和控制组件都会引入开销OpenClaw-Plugin也不例外。CPU 开销主要来自 eBPF 程序的执行和用户态策略引擎的计算。eBPF 部分开销通常很低1% 单核。策略引擎如果规则复杂或集成了轻量级 ML 模型开销会稍高。需要在测试环境压测观察插件容器本身的 CPU 使用率。内存开销eBPF maps 和用户态数据结构会占用一些内存通常为几十 MB 量级相对可控。对应用的影响eBPF 挂钩内存分配路径如malloc可能会引入微小的延迟。对于性能极度敏感的应用需要详细评估。可以通过采样只挂钩一部分事件而不是全量挂钩来降低影响。部署这类插件我的个人体会是“慢就是快”。不要一开始就上全自动、激进的策略。先从只监控、不操作开始观察一周了解你的应用正常的内存行为模式。然后在非核心的、Burstable 的测试应用上开启仅扩容策略并设置非常保守的参数高阈值、小步长、长冷却。持续观察收集数据反复调整策略。最后再考虑是否以及如何对关键应用进行管理。内存是应用稳定性的基石与其追求极致的利用率不如优先保障确定性。MemTensor/MemOS-Cloud-OpenClaw-Plugin这类工具提供了强大的可能性但如何驾驭它使其成为稳定性的助力而非风险源完全取决于使用者的细致配置和深入理解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2580512.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…