本文目录导读:

在Shell脚本中配置容器的ulimit限制,主要有以下几种方法:
使用 ulimit 命令配置当前Shell
#!/bin/bash # 设置各种限制 ulimit -n 65535 # 最大文件打开数 ulimit -u 65535 # 最大用户进程数 ulimit -s 65536 # 最大栈大小(KB) ulimit -c 0 # 关闭core文件 ulimit -m unlimited # 内存限制不限制 # 查看当前限制 ulimit -a
Docker容器运行时配置
通过docker run命令
#!/bin/bash # 启动容器时设置ulimit docker run -d \ --name mycontainer \ --ulimit nofile=65535:65535 \ --ulimit nproc=65535:65535 \ --ulimit stack=67108864:67108864 \ --ulimit core=0:0 \ nginx:latest
通过docker-compose配置
version: '3.8'
services:
myapp:
image: nginx:latest
ulimits:
nofile:
soft: 65535
hard: 65535
nproc:
soft: 65535
hard: 65535
stack:
soft: 67108864
hard: 67108864
在Dockerfile中配置
FROM ubuntu:20.04
# 设置默认ulimit(需要容器运行时privileged或调整docker daemon配置)
RUN echo "root soft nofile 65535" >> /etc/security/limits.conf && \
echo "root hard nofile 65535" >> /etc/security/limits.conf && \
echo "* soft nofile 65535" >> /etc/security/limits.conf && \
echo "* hard nofile 65535" >> /etc/security/limits.conf
# 使用entrpoint脚本设置
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
entrypoint.sh:
#!/bin/bash
# 设置ulimit
ulimit -n 65535
ulimit -n ${MAX_OPEN_FILES:-65535}
# 执行主程序
exec "$@"
完整的配置脚本示例
#!/bin/bash
# 配置容器ulimit的完整脚本
# 适应不同容器运行时
set -e
# 检查是否是容器环境
is_container() {
[ -f /.dockerenv ] || [ -f /run/.containerenv ] || [ "$container" = "docker" ] || [ "$container" = "podman" ]
}
# 配置ulimit函数
configure_ulimit() {
local soft_limit=${1:-65535}
local hard_limit=${2:-65535}
echo "配置ulimit参数..."
# 尝试设置各种资源限制
ulimit -n "$soft_limit" 2>/dev/null || echo "警告: 无法设置文件打开数限制"
ulimit -u "$soft_limit" 2>/dev/null || echo "警告: 无法设置进程数限制"
ulimit -s 65536 2>/dev/null || echo "警告: 无法设置栈大小"
ulimit -c 0 2>/dev/null
# 显示当前限制
echo "当前ulimit设置:"
ulimit -a
}
# 配置系统级限制(需要root权限)
configure_system_limits() {
if [ "$(id -u)" = "0" ]; then
echo "配置系统级限制..."
# 修改limits.conf
cat >> /etc/security/limits.conf <<EOF
* soft nofile 65535
* hard nofile 65535
* soft nproc unlimited
* hard nproc unlimited
EOF
# 配置systemd服务限制
if command -v systemctl &> /dev/null; then
mkdir -p /etc/systemd/system/user@.service.d/
cat > /etc/systemd/system/user@.service.d/limits.conf <<EOF
[Service]
LimitNOFILE=65535
LimitNPROC=65535
LimitSTACK=67108864
EOF
systemctl daemon-reload 2>/dev/null || true
fi
echo "系统限制配置完成"
else
echo "非root用户,跳过系统级配置"
fi
}
# 主函数
main() {
echo "配置容器ulimit限制..."
# 识别运行环境
if is_container; then
echo "检测到容器环境"
configure_system_limits
fi
# 配置当前shell的ulimit
configure_ulimit
echo "ulimit配置完成!"
# 执行主程序(如果作为entrypoint使用)
if [ $# -gt 0 ]; then
exec "$@"
fi
}
# 执行主函数
main "$@"
Kubernetes环境配置
apiVersion: v1
kind: Pod
metadata:
name: myapp
spec:
containers:
- name: myapp
image: nginx:latest
resources:
limits:
memory: "512Mi"
cpu: "500m"
securityContext:
capabilities:
add: ["SYS_RESOURCE"] # 需要此权限
# 在容器中设置ulimit由OCI运行时处理
不同容器运行时的注意事项
#!/bin/bash # Docker配置 echo "Docker默认ulimit:" docker run --rm alpine ulimit -a # Podman配置(通常更宽松) echo "Podman默认ulimit:" podman run --rm alpine ulimit -a # Containerd配置(通过nerdctl) echo "Containerd配置:" nerdctl run --rm --ulimit nofile=65535:65535 alpine ulimit -n
常见ulimit参数说明
unlimited # 无限(需要root) - # 硬件限制 soft # 当前能使用的限制 hard # 最大限制 主要参数: -n # 最大打开文件描述符数 -u # 最大用户进程数 -s # 栈大小(KB) -c # core文件大小(KB) -m # 最大内存大小(KB) -v # 最大虚拟内存(KB) -l # 锁住内存的大小
验证配置
#!/bin/bash
# 验证ulimit设置
echo "验证ulimit配置..."
ulimit -n # 查看文件打开数
ulimit -u # 查看进程数
ulimit -a # 查看所有限制
# 测试文件打开限制
test_file_limit() {
local count=$(( $(ulimit -n) ))
echo "理论最大文件打开数: $count"
# 实际测试(谨慎执行)
# for i in $(seq 1 $count); do
# exec {fd}>/dev/null 2>/dev/null || break
# done
# echo "实际打开文件数: $((i-1))"
}
配置ulimit时要注意:
- 有些限制需要特权模式(--privileged)
- 不同的容器运行时默认值不同
- 建议在entrypoint脚本中统一配置
- 考虑安全性和资源限制的平衡
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播