本文目录导读:

在Shell脚本中配置容器共享内存(Shared Memory)大小,主要取决于你使用的容器运行时,以下是几种常见场景的配置方法:
Docker 容器
使用 --shm-size 参数
#!/bin/bash # 设置共享内存为 256MB docker run --shm-size=256m your-image # 设置共享内存为 2GB docker run --shm-size=2g your-image # 使用变量 SHM_SIZE="512m" docker run --shm-size=$SHM_SIZE your-image
临时挂载 tmpfs(替代方案)
#!/bin/bash # 挂载 tmpfs 作为共享内存 docker run --mount type=tmpfs,destination=/dev/shm,tmpfs-size=1g your-image # 或者使用老式语法 docker run --tmpfs /dev/shm:rw,size=1g your-image
Docker Compose
# docker-compose.yml
version: '3.8'
services:
myapp:
image: your-image
shm_size: '256m' # 或 '1g', '512m'
# 或者使用 tmpfs 挂载
tmpfs:
- /dev/shm:rw,size=1g
Podman 容器
#!/bin/bash # 与 Docker 语法类似 podman run --shm-size=256m your-image # 或使用 tmpfs podman run --tmpfs /dev/shm:rw,size=256m your-image
Kubernetes Pod
# pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: myapp
image: your-image
volumeMounts:
- mountPath: /dev/shm
name: shm
volumes:
- name: shm
emptyDir:
medium: Memory
sizeLimit: "256Mi" # 设置共享内存大小限制
在脚本中自动检测和设置
#!/bin/bash
# 函数:设置 Docker 容器共享内存
setup_docker_shm() {
local image_name=$1
local shm_size=${2:-256m} # 默认 256MB
echo "启动容器 $image_name,共享内存大小: $shm_size"
docker run --shm-size=$shm_size -d $image_name
}
# 函数:根据系统内存动态计算共享内存
calculate_shm_size() {
local total_mem_kb=$(grep MemTotal /proc/meminfo | awk '{print $2}')
local total_mem_mb=$((total_mem_kb / 1024))
# 设置为总内存的 20%
local shm_mb=$((total_mem_mb * 20 / 100))
echo "${shm_mb}m"
}
# 使用示例
SHM_SIZE=$(calculate_shm_size)
echo "自动计算的共享内存大小: $SHM_SIZE"
setup_docker_shm "my-app" $SHM_SIZE
验证共享内存配置
#!/bin/bash
# 检查容器内的共享内存大小
check_container_shm() {
local container_name=$1
echo "检查容器 $container_name 的共享内存..."
docker exec $container_name df -h /dev/shm
docker exec $container_name cat /proc/meminfo | grep Shmem
}
# 使用示例
check_container_shm "my-running-container"
完整示例脚本
#!/bin/bash
# 配置容器共享内存脚本
# 用法: ./setup_container.sh [image_name] [shm_size]
IMAGE_NAME=${1:-"ubuntu:latest"}
SHM_SIZE=${2:-"256m"}
CONTAINER_NAME="shared-memory-test"
echo "=== 配置容器共享内存 ==="
echo "镜像: $IMAGE_NAME"
echo "共享内存大小: $SHM_SIZE"
# 清理旧容器
docker rm -f $CONTAINER_NAME 2>/dev/null
# 启动容器
echo "启动容器..."
docker run -d \
--name $CONTAINER_NAME \
--shm-size=$SHM_SIZE \
$IMAGE_NAME \
sleep 3600
# 验证配置
echo "验证共享内存配置..."
docker exec $CONTAINER_NAME df -h /dev/shm
echo "完成!"
注意事项
-
分配大小:共享内存大小取决于应用需求,对于使用 IPC(进程间通信)或 shared memory 的应用(如 Oracle、PostgreSQL、PyTorch 等)需要足够大的 /dev/shm
-
单位说明:
b(字节)k(千字节)m(兆字节)g(吉字节)
-
系统限制:确保 Docker 守护进程配置允许分配所需大小的共享内存,检查
/etc/docker/daemon.json中的相关设置。 -
性能考虑:不要设置过大,以免浪费主机内存,通常设置为总内存的 20-30% 即可。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播