Docker内核参数优化

简介:

对于docker container的调优还是和普通的Linux调优有很大的区别


修改最大文件数(open files)


直接修改 container的 /etc/security/limits.conf无效 

正确的做法是(以CentOS host为例)


在host上执行


sudo sh -c 'printf "\nulimit -HSn 999999\n" >> /etc/sysconfig/docker'

sudo service docker restart


这样再进入docker container, ulimit -a就可以看到更改了


[root@f258c7598394 /]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 7810

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 999999

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 10240

cpu time               (seconds, -t) unlimited

max user processes              (-u) 7810

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited


对于Ubuntu请参考此文


修改tcp/ip变量(sysctl)


如果docker container是以 –net=”host” 方式启动的,那么container和host共用同一个网络堆栈,只需要修改host的配置

sudo sh -c 'printf "\nnet.ipv4.ip_local_port_range = 1024 65535\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_tw_recycle = 1\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_tw_reuse = 1\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.core.rmem_max = 16777216\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.core.wmem_max = 16777216\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_max_syn_backlog = 4096\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_syncookies = 1\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.core.somaxconn = 1024\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_window_scaling = 1\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_rmem = 4096 87380 16777216\n" >> /etc/sysctl.conf';

sudo sh -c 'printf "net.ipv4.tcp_wmem = 4096 16384 16777216\n" >> /etc/sysctl.conf';

sudo sysctl -p;


然后重启docker container生效。


如果docker container不是以 –net=”host” 方式启动的,那么它将有自己独立的网络堆栈。修改host的配置将会无效。在container中又无法直接修改/proc,因为docker会以只读的方式重新挂载/proc/sys。 对于这个问题,可以在container启动的时候将/proc挂载到另一可读写位置,譬如

docker run -ti -v /proc:/writable-proc ubuntu:14.04 /bin/bash

1

然后就可以在container内部进行修改了


echo 1024 65535 > /writable-proc/sys/net/ipv4/ip_local_port_range

echo 1 > /writable-proc/sys/net/ipv4/tcp_tw_recycle

echo 1 > /writable-proc/sys/net/ipv4/tcp_tw_reuse

echo 4096 > /writable-proc/sys/net/ipv4/tcp_max_syn_backlog

echo 1 > /writable-proc/sys/net/ipv4/tcp_syncookies

echo 1 > /writable-proc/sys/net/ipv4/tcp_window_scaling

echo 4096 16384 16777216 > /writable-proc/sys/net/ipv4/tcp_wmem

echo 4096 87380 16777216 > /writable-proc/sys/net/ipv4/tcp_rmem

echo 16777216 > /writable-proc/sys/net/core/rmem_max

echo 16777216 > /writable-proc/sys/net/core/wmem_max

echo 1024 > /writable-proc/sys/net/core/somaxconn

echo 999999 > /writable-proc/sys/fs/file-max


然后在container中可以查看到修改生效


cat /proc/sys/net/ipv4/ip_local_port_range

cat /proc/sys/net/ipv4/tcp_tw_recycle

cat /proc/sys/net/ipv4/tcp_tw_reuse

cat /proc/sys/net/ipv4/tcp_max_syn_backlog

cat /proc/sys/net/ipv4/tcp_syncookies

cat /proc/sys/net/ipv4/tcp_window_scaling

cat /proc/sys/net/ipv4/tcp_wmem

cat /proc/sys/net/ipv4/tcp_rmem

cat /proc/sys/net/core/rmem_max

cat /proc/sys/net/core/wmem_max

cat /proc/sys/net/core/somaxconn

cat /proc/sys/fs/file-max


需要注意的是,如果内核版本过低(<3.12), 有些参数是无法修改的










本文转自 南非波波 51CTO博客,原文链接:http://blog.51cto.com/nanfeibobo/1716792,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
Docker 容器
Docker run命令-p参数详解
本文介绍Docker端口映射的基础用法。通过`docker run -p &lt;宿主机端口&gt;:&lt;容器端口&gt;`实现端口映射,例如`-p 5000:80`将宿主机5000端口映射到容器80端口,外部访问宿主机5000端口时流量会转发至容器内部的80端口。示例命令中,`-d`用于后台运行,`--restart=always`确保容器自动重启,`--name`指定容器名称。部署完成后可通过`http://服务器IP地址:5000`验证服务是否正常运行。
|
2月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
185 1
|
3月前
|
前端开发 数据安全/隐私保护 计算机视觉
MAZANOKE:一款隐私优先的浏览器图像优化工具及Docker部署指南
MAZANOKE 是一款简易的图片优化工具,它直接在浏览器中运行,支持离线使用,并确保您的图片始终保留在设备上,绝不外泄。 这款专为普通人设计的工具,适合与亲友分享使用,是那些来路不明的"免费"在线工具的可靠替代品。
72 1
MAZANOKE:一款隐私优先的浏览器图像优化工具及Docker部署指南
|
6月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
189 25
|
10月前
|
缓存 5G 开发者
【提效】docker镜像构建优化-提速10倍
本文主要记录了自己通过查阅相关资料,一步步排查问题,最后通过优化Docerfile文件将docker镜像构建从十几分钟降低到1分钟左右,效率提高了10倍左右。
928 122
|
8月前
|
存储 Ubuntu 关系型数据库
《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更干嘛、数据卷案例
《docker基础篇:7.Docker容器数据卷》包括坑、回顾下上一讲的知识点,参数V、是什么、更干嘛、数据卷案例
143 13
|
9月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
872 7
|
10月前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
10月前
|
存储 缓存 Java
Java应用瘦身记:Docker镜像从674MB优化至58MB的实践指南
【10月更文挑战第22天】 在容器化时代,Docker镜像的大小直接影响到应用的部署速度和运行效率。一个轻量级的Docker镜像可以减少存储成本、加快启动时间,并提高资源利用率。本文将分享如何将一个Java基础Docker镜像从674MB缩减到58MB的实践经验。
462 1
|
10月前
|
存储 安全 Docker
Docker 的实战应用与优化策略
Docker 的实战应用与优化策略
131 0