--cpu-shares 是什么
--cpu-shares 设置容器争抢 CPU 时的相对份额,默认 1024。它是软性优先级:只有在 CPU 饱和时按比例分配,机器空闲时低权重容器照样能用满 CPU。需要硬性上限应该用 --cpus。
基本信息
| 语法 | --cpu-shares=<整数>,默认 1024 |
|---|---|
| 生效条件 | 仅在 CPU 资源争抢时体现 |
| 性质 | 相对权重,不是上限 |
| 硬上限对应 | --cpus 或 --cpu-quota |
| 核对 | docker inspect 的 HostConfig.CpuShares |
典型使用场景
- 同一台机器上区分核心服务与批处理任务的优先级
- 避免批量任务与在线服务争抢时把在线服务拖慢
- 容量评估:设定权重后跑混合负载,观察实际分配比例
- 多租户实验环境里按租户重要度分配算力
- 临时给重要任务提高权重,快速完成而不动其他配置
权重设置与核对
权重设置与核对
docker run -d --cpu-shares=2048 --name important app/critical:1.4.2 # 高权重
docker run -d --cpu-shares=512 --name batch app/batch:1.4.2 # 低权重
docker inspect -f '{{.HostConfig.CpuShares}}' important # 核对权重值
docker run -d --cpus=1.5 --name capped app/api:1.4.2 # 需要上限时用这个相关参数的区别
| 参数 | 性质 | 适用判断 |
|---|---|---|
| --cpu-shares | 相对权重,默认 1024 | 争抢时谁优先 |
| --cpus | 绝对上限 | 最多能用多少核 |
| --cpu-quota | 上限的底层表达 | 需要精确控制周期时 |
| --cpuset-cpus | 绑定具体核心 | 隔离性要求高的场景 |
机器空闲时低权重容器一样能用满 CPU,把权重误当上限会导致容量评估偏差,压测时要制造真实竞争。
与 --cpus 混用时两者共同生效:权重决定争抢比例,上限决定天花板,排障时两个参数都要核对。
权重是相对值,改一个容器的权重会同时改变其他容器的实际占比,不要只看某个数值就下结论。
多核机器上单线程应用的表现主要受单核能力限制,提高权重并不等于线性提速。
权重只影响 CPU 时间的分配比例,不改变内存与 IO 的优先级;多类资源同时争抢时要把几组限制一起看,单点调参通常解决不了瓶颈。
权重可以用 docker update 在运行中调整,适合临时救急;正式生效的配置仍要写回编排文件,否则容器重建后又会回到旧值。