Fix and update

This commit is contained in:
baohua
2026-02-09 11:34:35 -08:00
parent e669ee0fe8
commit 63377d0431
136 changed files with 2146 additions and 262 deletions

View File

@@ -1,5 +1,7 @@
## 控制组
控制组Cgroups Linux 内核提供的另一种关键机制主要用于资源的限制和审计
### 什么是控制组
控制组Control Groups简称 cgroups Linux 内核的一个特性用于**限制记录和隔离**进程组的资源使用CPU内存磁盘 I/O网络等
@@ -46,16 +48,23 @@
### Docker 中的资源限制
Docker 提供了丰富的参数来配置容器的资源限制主要包括内存CPU磁盘 I/O
#### 内存限制
运行以下命令
```bash
## 限制容器最多使用 512MB 内存
$ docker run -m 512m myapp
## 限制内存 + swap
$ docker run -m 512m --memory-swap 1g myapp
## 软限制(超过时警告,不会 OOM Kill
$ docker run --memory-reservation 256m myapp
```
@@ -68,14 +77,19 @@ $ docker run --memory-reservation 256m myapp
#### CPU 限制
运行以下命令
```bash
## 限制使用 1.5 个 CPU 核心
$ docker run --cpus=1.5 myapp
## 限制使用 CPU 0 和 1
$ docker run --cpuset-cpus="0,1" myapp
## 设置 CPU 使用权重(相对值,默认 1024
$ docker run --cpu-shares=512 myapp
```
@@ -88,21 +102,29 @@ $ docker run --cpu-shares=512 myapp
#### 磁盘 I/O 限制
运行以下命令
```bash
## 限制设备写入速度为 10MB/s
$ docker run --device-write-bps /dev/sda:10mb myapp
## 限制设备读取速度
$ docker run --device-read-bps /dev/sda:10mb myapp
## 限制 IOPS
$ docker run --device-write-iops /dev/sda:100 myapp
```
#### 进程数限制
运行以下命令
```bash
## 限制最多 100 个进程
$ docker run --pids-limit=100 myapp
```
@@ -110,17 +132,22 @@ $ docker run --pids-limit=100 myapp
### 查看容器资源使用
运行以下命令
```bash
## 实时监控所有容器的资源使用
$ docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
abc123 web 0.50% 45.5MiB / 512MiB 8.89% 1.2kB / 0B 0B / 0B
def456 db 2.30% 256MiB / 1GiB 25.00% 5.6kB / 3.2kB 4.1MB / 2.3MB
## 查看特定容器
$ docker stats mycontainer
## 查看容器的 cgroup 配置
$ docker inspect mycontainer --format '{{json .HostConfig}}' | jq
```
@@ -130,28 +157,42 @@ $ docker inspect mycontainer --format '{{json .HostConfig}}' | jq
#### 内存超限
运行以下命令
```bash
## 启动限制 100MB 内存的容器
$ docker run -m 100m stress --vm 1 --vm-bytes 200M
## 容器会被 OOM Killer 杀死
$ docker ps -a
CONTAINER ID STATUS NAMES
abc123 Exited (137) 5 seconds ago hopeful_darwin
## 137 = 128 + 9表示被 SIGKILL (9) 杀死
## 137 = 128 + 9表示被 SIGKILL9 杀死
具体内容如下:
```
#### CPU 限制验证
运行以下命令
```bash
## 不限制 CPU
$ docker run --rm stress --cpu 4
## 占满所有 CPU
## 限制为 1 个核心
$ docker run --rm --cpus=1 stress --cpu 4
## 只能使用约 100% CPU1 个核心)
具体内容如下:
```
---
@@ -168,13 +209,17 @@ $ docker run --rm --cpus=1 stress --cpu 4
#### 检查系统使用的版本
运行以下命令
```bash
## 查看 cgroup 版本
$ mount | grep cgroup
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
## 如果显示 cgroup2 表示 v2
## 或者
$ cat /proc/filesystems | grep cgroup
nodev cgroup
nodev cgroup2
@@ -184,6 +229,8 @@ nodev cgroup2
### Compose 中设置限制
Compose 中设置限制 配置如下
```yaml
services:
web:
@@ -202,23 +249,33 @@ services:
### 最佳实践
在使用 Cgroups 限制资源时遵循一些最佳实践可以避免潜在的问题
#### 1. 始终设置内存限制
运行以下命令
```bash
## 防止 OOM 影响宿主机
$ docker run -m 1g myapp
```
#### 2. 为关键应用设置 CPU 保证
运行以下命令
```bash
$ docker run --cpus=2 --cpu-shares=2048 critical-app
```
#### 3. 监控资源使用
运行以下命令
```bash
## 配合 Prometheus + cAdvisor 监控
$ docker run -d --name cadvisor \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \