Docker容器资源限制:详解CPU、内存、IO等

在使用Docker部署应用程序时,了解如何限制容器对系统资源的使用至关重要。Docker提供了多种资源限制选项,可以控制容器对CPU、内存、IO等资源的使用。

Resources 结构体

Docker使用 Resources 结构体定义容器的资源限制。以下是一些常用的字段:

 type Resources struct {
	// 适用于所有平台
	CPUShares int64 `json:'CpuShares'` // CPU份额(相对于其他容器的权重)
	Memory    int64 // 内存限制(字节)
	NanoCPUs  int64 `json:'NanoCpus'`  // CPU配额,单位为10^-9 CPU

	// 适用于UNIX平台
	CgroupParent         string // 父cgroup
	BlkioWeight          uint16 // 块IO权重(相对于其他容器的权重)
	BlkioWeightDevice    []*blkiodev.WeightDevice
	BlkioDeviceReadBps   []*blkiodev.ThrottleDevice
	BlkioDeviceWriteBps  []*blkiodev.ThrottleDevice
	BlkioDeviceReadIOps  []*blkiodev.ThrottleDevice
	BlkioDeviceWriteIOps []*blkiodev.ThrottleDevice
	CPUPeriod            int64           `json:'CpuPeriod'`          // CPU CFS(完全公平调度器)周期
	CPUQuota             int64           `json:'CpuQuota'`           // CPU CFS(完全公平调度器)配额
	CPURealtimePeriod    int64           `json:'CpuRealtimePeriod'`  // CPU实时周期
	CPURealtimeRuntime   int64           `json:'CpuRealtimeRuntime'` // CPU实时运行时间
	CpusetCpus           string          // CpusetCpus 0-2, 0,1
	CpusetMems           string          // CpusetMems 0-2, 0,1
	Devices              []DeviceMapping // 要映射到容器内的设备列表
	DeviceCgroupRules    []string        // 要添加到设备cgroup的规则列表
	DeviceRequests       []DeviceRequest // 设备驱动程序的设备请求列表

	// KernelMemory指定容器的内核内存限制(以字节为单位)。
	// 已弃用:内核5.4弃用了kmem.limit_in_bytes。
	KernelMemory      int64           `json:',omitempty'`
	KernelMemoryTCP   int64           `json:',omitempty'` // 内核TCP缓冲区内存的硬限制(以字节为单位)
	MemoryReservation int64           // 内存软限制(字节)
	MemorySwap        int64           // 总内存使用量(内存+交换); 设置`-1`以启用无限交换
	MemorySwappiness  *int64          // 调整容器内存交换行为
	OomKillDisable    *bool           // 是否禁用OOM Killer
	PidsLimit         *int64          // 设置容器的PID限制; 设置`0`或`-1`表示无限制,或设置`null`表示不更改。
	Ulimits           []*units.Ulimit // 要在容器中设置的ulimits列表

	// 适用于Windows
	CPUCount           int64  `json:'CpuCount'`   // CPU数量
	CPUPercent         int64  `json:'CpuPercent'` // CPU百分比
	IOMaximumIOps      uint64 // 容器系统驱动器的最大IOps
	IOMaximumBandwidth uint64 // 容器系统驱动器的最大IO(字节/秒)
} 

CPUPercent 字段

CPUPercent 字段用于指定容器可以使用的CPU资源的百分比。

作用

通过设置 CPUPercent 字段,可以限制容器在CPU资源上的使用,以确保其他容器或系统进程能够获得足够的CPU资源。

示例

例如,如果将 CPUPercent 设置为 50,则容器最多可以使用系统CPU资源的 50%。

总结

了解Docker提供的资源限制选项对于优化容器性能和确保系统稳定性至关重要。通过合理配置资源限制,可以有效防止单个容器过度消耗系统资源,从而保障整个系统的稳定运行。

Docker容器资源限制:CPU、内存、IO等

原文地址: https://www.cveoy.top/t/topic/fxcB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录