Docker容器资源限制实战:CPU、内存与磁盘I/O的精细化管控
1. 项目概述为什么容器资源管理是运维的必修课在容器化部署成为主流的今天Docker 几乎成了每个开发者和运维工程师的标配工具。它带来的环境一致性、快速部署和资源隔离等优势让我们爱不释手。然而随着业务规模的扩大一个常见且棘手的问题开始浮现容器“吃”光了宿主机的资源。你可能遇到过某个容器进程突然 CPU 飙到 100%导致整个宿主机响应迟缓或者某个 Java 应用容器内存泄漏最终触发 OOM Killer不仅杀掉了问题容器还可能误伤邻居。更隐蔽的可能是磁盘 I/O 被某个疯狂写日志的容器拖垮导致所有依赖磁盘的服务性能雪崩。这些都不是理论风险而是生产环境中实实在在的“坑”。不加限制的容器就像合租屋里不守规矩的室友会肆意占用公共资源影响他人。因此对 Docker 容器进行精细化的资源限制与优化不再是“锦上添花”而是保障系统稳定性、提升资源利用率和实现成本控制的“雪中送炭”。本文将从一个实践者的角度深入拆解 CPU、内存、磁盘 I/O 这三大核心资源的限制原理、配置方法以及优化策略目标是让你不仅能“配得上”更能“配得准”真正驾驭容器资源。2. 核心资源限制原理与配置实战理解资源限制首先要明白 Docker 是如何实现隔离的。它依赖于 Linux 内核的 cgroups控制组和 namespaces命名空间技术。cgroups 负责资源的计量、限制和隔离而 namespaces 负责进程视图的隔离。我们今天的重点就是 cgroups 在资源限制上的应用。2.1 CPU 资源从“份额”到“核”的精细控制CPU 限制最容易让人困惑因为它的模型相对抽象。Docker 主要提供了两种限制模式CPU 份额CPU shares和 CPU 周期CPU period/quota。很多人只知其然不知其所以然。CPU 份额--cpu-shares这是一个权重值默认是 1024。它只在容器竞争 CPU 时间片时生效。举个例子如果宿主机上有两个容器 A 和 BA 的--cpu-shares1024B 的--cpu-shares2048。当 CPU 完全繁忙时A 大约能获得 1/3 的 CPU 时间B 能获得 2/3。但如果宿主机 CPU 空闲B 完全可以使用超过 2/3 的 CPU。所以--cpu-shares是一个“软限制”用于定义容器间的相对优先级。CPU 周期与配额--cpu-period --cpu-quota这才是实现“硬上限”的关键。--cpu-period默认是 100000 微秒即 100 毫秒它定义了一个调度周期。--cpu-quota则定义了一个容器在一个周期内最多能使用的 CPU 时间。例如--cpu-quota50000意味着每 100 毫秒周期内该容器最多使用 50 毫秒的 CPU 时间即限制了它最多使用 0.5 个 CPU 核心。这是实现容器 CPU 使用率不超过 50% 的核心机制。更直观的方式是使用--cpus参数例如--cpus1.5这等价于设置了--cpu-period100000和--cpu-quota150000。在docker run时我们可以这样组合使用# 启动一个nginx容器限制它最多使用1.5个CPU核心并且权重较高 docker run -d --name web-app \ --cpus1.5 \ --cpu-shares1024 \ nginx:latest # 或者使用传统的period/quota方式实现同样的效果 docker run -d --name batch-job \ --cpu-period100000 \ --cpu-quota50000 \ --cpu-shares512 \ alpine:latest /bin/sh -c while true; do echo CPU intensive; done注意--cpus参数是在 Docker 1.13 版本后引入的语法糖底层依然映射为 period/quota。对于需要精确控制调度周期的场景比如某些实时性要求高的应用直接使用--cpu-period和--cpu-quota会更灵活。CPU集绑定--cpuset-cpus除了限制用量你还可以将容器绑定到特定的 CPU 核心上。这对于减少 CPU 缓存失效、提升计算密集型任务性能或者实现 NUMA 架构下的优化非常有帮助。# 将容器绑定到宿主机的第0和第2号CPU核心上运行 docker run -d --name sensitive-app \ --cpuset-cpus0,2 \ your-app-image实操心得对于 Web 服务等通常 CPU 不饱和的容器优先使用--cpus设置一个合理的上限防止其异常时拖垮主机。对于后台批处理任务可以设置较低的--cpu-shares保证即使它跑满也不会过度影响高优先级的在线服务。绑定 CPU 集要谨慎除非你非常清楚你的应用特性和宿主机的 CPU 拓扑否则可能反而导致资源利用不均衡。2.2 内存资源避免 OOM 的生死线内存限制是“硬”的一旦超过Linux 内核的 OOM Killer 就会出手。Docker 的内存限制主要包含几个层次内存上限-m 或 --memory这是容器能使用的最大内存量包括物理内存和交换分区Swap。这是最重要的一个限制。内存交换分区上限--memory-swap这个参数有点绕。它定义了“内存 交换分区”的总用量。--memory-swap值为-1表示不限制交换分区使用但受宿主机限制值为0或等于--memory时表示禁用交换分区。通常为了性能可预测性生产环境会禁用容器的 Swap设置--memory-swap等于--memory因为 Swap 的 I/O 会引入巨大且不确定的延迟。内存预留--memory-reservation这是一个“软限制”。系统在内存充足时容器可以使用超过预留值的内存但当内存紧张时系统会尝试将容器的内存压缩到预留值以下。它更像是一个内存使用的“指导值”或“最低保障”。内核内存上限--kernel-memory用于限制容器内核态内存如栈、套接字缓冲区等的使用。这个限制独立于用户内存。对于某些能消耗大量内核内存的应用如大量并发连接设置此限制可以防止容器耗光系统关键资源。一个完整的运行示例如下# 启动一个Java应用限制最大内存为512M禁用Swap内核内存限制为100M内存预留值为256M docker run -d --name java-app \ -m 512m \ --memory-swap 512m \ --kernel-memory 100m \ --memory-reservation 256m \ -e JAVA_OPTS-Xmx384m -Xms256m \ # JVM堆参数必须小于Docker内存限制 your-java-app-image关键陷阱这里最大的坑就是 JVM 这类托管运行时的内存感知。JVM 通过/sys/fs/cgroup/memory/memory.limit_in_bytes来读取 cgroup 的内存限制并据此设置堆大小。但 JVM 的堆Heap只是其总内存消耗的一部分还包括栈Stack、元空间Metaspace、直接内存Direct Buffer等。如果你设置-m 512m并且 JVM 的-Xmx也设为 512m那么几乎必然触发 OOM因为堆外内存没有空间了。最佳实践是Docker 内存限制-m必须大于 JVM 最大堆内存-Xmx至少 20%-30%为堆外内存留出空间。2.3 磁盘I/O吞吐量与IOPS的双重博弈磁盘 I/O 限制常常被忽视但它往往是性能瓶颈的元凶。Docker 主要通过 Blkio Cgroup 来控制块设备的 I/O。主要参数有两类带宽吞吐量和 IOPS每秒读写次数。带宽限制--blkio-weight 和 --device-write-bps/--device-read-bps--blkio-weight类似于 CPU shares是一个权重值10-1000默认 500。用于在容器间按比例分配 I/O 带宽。--device-write-bps/--device-read-bps可以对特定设备如/dev/sda设置绝对的读写速率上限单位可以是 kb, mb, gb。IOPS限制--device-write-iops/--device-read-iops直接限制容器对特定设备每秒的读写操作次数。这对于数据库等对 IOPS 敏感的应用至关重要。# 限制容器对 /dev/sda 设备的写入速度为 10 MB/s读取 IOPS 为 1000 docker run -d --name db-container \ --device-write-bps /dev/sda:10mb \ --device-read-iops /dev/sda:1000 \ mysql:8.0 # 使用权重让容器A的I/O优先级是容器B的两倍 docker run -d --name container-a --blkio-weight 600 ... docker run -d --name container-b --blkio-weight 300 ...实操难点与排查磁盘 I/O 限制依赖于宿主机的 CFQ完全公平队列或 BFQ预算公平队列等 I/O 调度器。在某些内核或使用 SSD通常调度器为none或mq-deadline时基于权重的--blkio-weight可能不生效。务必先检查宿主机的 I/O 调度器cat /sys/block/sda/queue/scheduler。对于绝对带宽和 IOPS 的限制--device-write-bps等则要求内核启用CONFIG_BLK_CGROUP配置现代内核通常默认开启。3. 高级优化策略与生产环境调优配置了基础限制只是第一步要让容器集群高效稳定运行还需要一系列优化策略。3.1 监控与洞察数据是指南针你无法优化你无法测量的东西。Docker 原生提供了docker stats命令可以实时查看容器的 CPU、内存、网络和磁盘 I/O 使用情况。docker stats --all --format table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.MemPerc}}\t{{.NetIO}}\t{{.BlockIO}}但对于生产环境这远远不够。你需要将容器的资源指标纳入到统一的监控系统中如 Prometheus。通过cAdvisor或docker exporterfor Prometheus可以采集到更详细的 cgroup 指标包括container_cpu_usage_seconds_totalcontainer_memory_working_set_bytes(这是 OOM Killer 触发前最需要关注的内存指标它包含了活跃的缓存)container_fs_reads_bytes_total和container_fs_writes_bytes_total结合 Grafana 绘制仪表盘你可以清晰地看到每个容器的资源历史趋势为容量规划和限值调整提供数据支撑。3.2 资源请求与限制Kubernetes的启示如果你使用 Kubernetes会对requests和limits的概念非常熟悉。这其实是一种最佳实践完全可以借鉴到 Docker 单机部署中。Requests请求相当于--memory-reservation和--cpu-shares是容器启动时向系统声明的“我至少需要这么多资源才能运行良好”。它影响了宿主机上的调度是否有足够资源放置这个容器。Limits限制就是-m和--cpus是容器资源使用的硬性天花板。在纯 Docker 环境中虽然没有直接的requests概念但你可以通过组合使用--memory-reservation和--cpu-shares来模拟并通过编排工具如 Docker Compose的deploy.resources字段进行声明式管理。这能让你的资源分配意图更清晰。3.3 应用层优化与容器限制协同工作容器限制是“外部紧箍咒”应用自身优化则是“内部提效”。JVM 应用如前所述精确设置-Xmx,-Xms,-XX:MaxMetaspaceSize等参数确保其总和低于 Docker 内存限制并留出缓冲区。考虑使用-XX:UseContainerSupportJDK 8u191 和 JDK 10 默认开启让 JVM 更好地识别容器限制。Golang/Python 应用注意管理内存中的缓存大小和对象生命周期。对于 Go可以调整GOGC环境变量来控制垃圾回收频率对于 Python注意避免循环引用导致无法被 GC 回收。数据库容器MySQL/PostgreSQL 等数据库的内存配置如innodb_buffer_pool_size,shared_buffers必须设置为小于容器内存限制的值。同时将数据卷volume挂载到高性能磁盘或 SSD 上并根据磁盘能力合理设置 I/O 限制。4. 常见问题排查与实战避坑指南理论终须付诸实践而实践中总会遇到各种问题。下面是一些典型场景的排查思路和解决方案。4.1 容器被 OOM Killer 终止这是最常见的问题。排查步骤如下检查日志首先运行docker logs container_id查看容器退出前的日志但通常 OOM Kill 是内核行为容器内应用来不及记录。查看宿主机内核日志这是最关键的一步。使用dmesg -T | grep -i oom\|kill或直接查看/var/log/kern.logUbuntu/Debian或/var/log/messagesCentOS/RHEL。日志会明确记录哪个进程因消耗过多内存被杀死。分析内存指标回忆或通过监控系统查看容器被杀前memory.working_set是否持续接近或超过限制。区分是真实内存泄漏还是合理的峰值使用。根本原因与解决JVM 堆外内存泄漏使用Native Memory Tracking (NMT)分析 JVM。在启动参数中加入-XX:NativeMemoryTrackingdetail运行时通过jcmd pid VM.native_memory detail查看。应用本身泄漏使用容器内的工具如top,htop,ps aux观察进程内存增长或使用valgrind对 C/C应用进行检测。限制设置过小如果应用本身正常只是业务量增长那么需要调高-m限制并确保 JVM 参数等随之调整。4.2 容器 CPU 使用率异常高但应用感觉慢现象是docker stats显示 CPU 使用率 100%但容器内应用响应缓慢。可能的原因I/O 等待Wa高使用docker stats看不到 CPU 细分状态。你需要进入容器内部docker exec -it container top或在宿主机用pidstat或htop查看该容器进程的 CPU 状态。如果%wa等待 I/O时间占比极高说明瓶颈在磁盘。此时需要按3.3节的方法排查磁盘 I/O。进程锁或死循环如果是%us用户态或%sy系统态高可能是应用逻辑问题。使用docker exec -it container bash进入容器用top -Hp pid查看具体哪个线程 CPU 高再结合jstackJava或pstack/gdb其他语言获取线程栈定位问题代码。CPU 限制Throttling容器因为达到--cpus或--cpu-quota限制而被内核限流。通过查看 cgroup 文件可以确认cat /sys/fs/cgroup/cpu,cpuacct/docker/container_id/cpu.stat。关注nr_throttled被限流次数和throttled_time被限流总时间。如果这两个值很高说明容器经常触达 CPU 上限需要考虑放宽限制或优化应用性能。4.3 磁盘 I/O 性能低下限制不生效确认调度器运行cat /sys/block/磁盘设备如sda/queue/scheduler。如果输出是[none]或[mq-deadline]那么--blkio-weight可能无效。对于 SSD这是正常情况。此时应使用基于绝对值的--device-write-bps和--device-read-iops进行限制。检查 Cgroup 支持确保内核编译时开启了CONFIG_BLK_CGROUPy。可以检查/proc/config.gz或/boot/config-$(uname -r)文件。区分设备使用--device-read-bps等参数时必须指定正确的设备号。使用lsblk命令确认容器实际使用的存储对应的物理设备。如果使用 overlay2 存储驱动所有容器的数据最终都落在同一个宿主机目录限制该目录对应的设备即可。使用性能更好的存储驱动对于写密集型容器考虑使用docker volume挂载高性能 SSD 分区而不是使用容器内的默认存储层。在docker run时使用--mount typevolume,sourcemy_ssd_volume,target/data。4.4 Docker Compose 中的资源限制配置在单机编排时Docker Compose 的deploy.resources.limits和reservations字段非常方便它实际上会在docker run时生成对应的参数。version: 3.8 services: web: image: nginx:alpine deploy: resources: limits: cpus: 0.5 memory: 256M reservations: cpus: 0.1 memory: 128M redis: image: redis:alpine command: redis-server --maxmemory 128mb --maxmemory-policy allkeys-lru deploy: resources: limits: memory: 200M # 总内存限制略大于Redis配置的maxmemory reservations: memory: 100M注意deploy下的配置仅在docker stack deploySwarm 模式下生效对于docker-compose up你需要使用compose文件版本2.x的resources顶级字段或使用版本3.x但放在deploy下并通过docker-compose up启动时这些限制不会被应用这是一个常见的混淆点。对于docker-compose up应使用非 Swarm 模式的配置version: 3.8 services: web: image: nginx:alpine mem_limit: 256M mem_reservation: 128M cpus: 0.55. 总结与持续优化之道容器资源管理不是一个“配置即忘”的静态动作而是一个需要持续观察、分析和调整的动态过程。它始于对应用特性的深刻理解是 CPU 密集型、内存密集型还是 I/O 密集型成于合理的初始限制设置基于测试和预估终于监控告警驱动下的精细调优。我的经验是在项目初期可以为容器设置一个相对宽松但仍有上限的限制例如预估内存的 1.5 倍并配置详细的监控。在线上运行一段时间后根据监控图表中呈现的“常态水位线”和“峰值”逐步收紧限制到一个既安全又经济的值。同时建立资源使用的基线Baseline当容器资源使用模式发生显著偏离时很可能预示着应用出现了问题或迎来了新的业务增长点这本身就是一种有效的监控手段。最后别忘了将资源限制的配置作为容器镜像定义的一部分如 Dockerfile 的注释或附带的文档并与应用代码一同进行版本管理。这样任何资源需求的变更都能被清晰追溯运维和开发团队也能就此达成一致共同保障容器化服务的稳定与高效。

相关新闻

Docker容器资源限制与优化:CPU、内存、磁盘I/O管控实战指南

Docker容器资源限制与优化:CPU、内存、磁盘I/O管控实战指南

1. 项目概述:为什么容器资源管理是门必修课在容器化部署成为主流的今天,Docker 几乎成了每个开发者和运维工程师的标配工具。它带来的环境一致性、快速部署和资源隔离等优势,让我们能轻松地将应用打包、分发和运行。然而,随着容器…

2026/8/26 11:11:28 阅读更多 →
基于IAR与STM32标准库的工程模板搭建与配置详解

基于IAR与STM32标准库的工程模板搭建与配置详解

1. 项目概述:为什么选择IAR与STM32标准库 如果你正准备踏入STM32开发的大门,或者刚从51、AVR这类8位单片机转过来,面对市面上五花八门的开发工具和固件库,是不是有点眼花缭乱?我当年也是这么过来的。今天,我…

2026/8/26 11:11:28 阅读更多 →
MySQL 8.0安装与配置Percona审计插件:实现数据库操作追溯与安全合规

MySQL 8.0安装与配置Percona审计插件:实现数据库操作追溯与安全合规

1. 项目概述:为什么MySQL需要审计插件?在数据库运维和开发工作中,数据安全与操作追溯的重要性不言而喻。想象一下,生产环境里一张核心表的数据被意外修改或删除,如果没有清晰的记录,排查问题就如同大海捞针…

2026/8/26 11:11:28 阅读更多 →

最新新闻

深入理解x86-64寄存器:从CPU工作原理到汇编实战应用

深入理解x86-64寄存器:从CPU工作原理到汇编实战应用

1. 从“黑盒”到“白盒”:为什么必须理解寄存器? 如果你写过C、Java或者Python,你可能觉得程序就是变量、函数和对象的集合。编译器或者解释器帮你处理了所有底层细节,你几乎不用关心你的代码最终是如何在物理的CPU上“跑”起来的…

2026/8/26 12:52:09 阅读更多 →
精度项目实战:准确度与精密度的误差控制指南

精度项目实战:准确度与精密度的误差控制指南

1. 项目概述:当"Precision"从形容词变成项目名 一直觉得,能用"Precision"这种词当项目代号的人,多半是被精度问题折磨过。我最初接触到这个名为Precision的项目时,第一反应是这名字很敢起——精确这个词语气太…

2026/8/26 12:52:09 阅读更多 →
Codex CLI免订阅接入DeepSeek:配置指南与Skill技能实战

Codex CLI免订阅接入DeepSeek:配置指南与Skill技能实战

最近有不少做 AI 编程工具研究的朋友问我:Codex 是不是必须要 ChatGPT 订阅?是不是必须依赖境外网络环境?本地那些 skill 技能又是怎么一回事? 先说结论: Codex 本身是可以脱离 ChatGPT 订阅使用的 。通过 Codex CL…

2026/8/26 12:52:09 阅读更多 →
MFC入门指南:从核心原理到实战应用,掌握Windows桌面开发基石

MFC入门指南:从核心原理到实战应用,掌握Windows桌面开发基石

1. 项目概述:为什么今天还要聊MFC? 如果你刚接触Windows桌面开发,打开Visual Studio,可能会被一堆项目模板搞得眼花缭乱。WPF、WinUI、Windows Forms... 然后,你可能会看到一个有点“复古”的名字: MFC 。…

2026/8/26 12:52:09 阅读更多 →
制造测试系统设计全攻略:从节拍计算到误判率控制

制造测试系统设计全攻略:从节拍计算到误判率控制

制造测试系统听起来是个挺“硬核”的领域,但说白了,就是你在生产线上看到的那些用来判断“这玩意儿能不能出货”的设备和方法。如果一个电子产品从贴片、组装到包装,没有任何一道测试来把关,那不良品流到用户手里就是灾难。所以测…

2026/8/26 12:52:09 阅读更多 →
Beyond Compare 实操指南:文件对比、同步与授权问题排查

Beyond Compare 实操指南:文件对比、同步与授权问题排查

每次在项目里改完代码要对比文件差异,我都会直接打开 Beyond Compare。后来带新同事,发现不少人还在用文本编辑器肉眼比对两份配置文件,或者遇到“30 天评估期已结束”就直接去搜破解版,结果不是密钥被吊销,就是下载到…

2026/8/26 12:51:08 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →