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,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
运维 云计算 Docker
深入理解与实践:基于Docker的微服务架构优化策略
本文旨在为软件开发和运维人员提供一个全面的指南,探讨如何通过Docker容器技术优化微服务架构。我们不仅深入分析了Docker在微服务环境中的关键作用,还提出了一系列实践策略,以提高部署效率、增强系统稳定性,并确保服务的可伸缩性和安全性。通过具体案例分析和比较传统部署方式的局限性,本文展示了Docker如何成为微服务架构优化不可或缺的工具,旨在帮助读者构建一个更加灵活、高效和可靠的服务环境。
149 1
|
6月前
|
Cloud Native 虚拟化 云计算
《Docker基础知识解析:容器与虚拟化的区别与优势,选择最佳方案优化云计算应用》
《Docker基础知识解析:容器与虚拟化的区别与优势,选择最佳方案优化云计算应用》
117 0
|
6月前
|
关系型数据库 MySQL 应用服务中间件
Docker容器常用命令大全:熟练掌握使容器优化更加高效
Docker容器常用命令大全:熟练掌握使容器优化更加高效
137 0
|
6月前
|
存储 边缘计算 数据管理
Docker 存储驱动解析:选择最适合你的存储方案,优化容器化部署性能和数据管理
Docker 存储驱动解析:选择最适合你的存储方案,优化容器化部署性能和数据管理
135 0
|
4月前
|
存储 监控 持续交付
Docker容器的优化和性能调优技巧
Docker已经成为了现代应用程序开发和部署的核心工具之一。然而,要确保Docker容器在生产环境中运行稳定、高效,需要一些优化和性能调优的技巧。本文将介绍一些关键的Docker容器优化和性能调优策略,并提供丰富的示例代码,以帮助大家充分利用Docker的潜力。
|
4月前
|
Kubernetes 监控 应用服务中间件
深入Docker实战(第2版):构建、部署和优化容器化应用
深入Docker实战(第2版):构建、部署和优化容器化应用
349 1
|
2月前
|
JavaScript 安全 开发者
深入浅出:使用Docker优化你的开发环境
在软件开发的世界里,"它在我的机器上运行得好好的"这句话几乎成了一个笑话。这主要是因为环境配置差异所带来的挑战。本文将介绍如何使用Docker来创建一致的开发环境,解决环境差异带来的问题。我们将从Docker的基本概念入手,探讨其在开发流程中的应用,并通过实际案例演示如何构建、部署和管理容器化的应用。本文旨在为开发者提供一个清晰的指南,帮助他们利用Docker优化开发流程,提高生产效率。
20 2
|
3月前
|
Kubernetes 监控 应用服务中间件
深入Docker实战(第2版):构建、部署和优化容器化应用
深入Docker实战(第2版):构建、部署和优化容器化应用
44 0
|
7月前
|
Linux 数据安全/隐私保护 Docker
优化Docker权限管理:配置Docker用户组
Docker 利用 Linux 的用户和组权限来管理对 Docker 守护进程的访问权限。一般情况下,只有 root 用户和属于 docker 用户组的用户才被允许访问 Docker 守护进程。在 Linux 系统上使用 Docker 时,如果您尚未配置 docker 用户组,那么作为非 root 用户执行 Docker 相关命令将要求使用 sudo 来提升权限。
532 2
优化Docker权限管理:配置Docker用户组
|
4月前
|
Kubernetes Java Docker
多阶段构建:精妙优化Docker镜像大小和性能
在容器化应用的世界中,Docker镜像大小和性能优化是至关重要的。多阶段构建是一项强大的技术,通过精心设计Dockerfile,可以在构建镜像时去除不必要的组件,从而显著减小镜像大小,提高性能。本文章将深入讨论多阶段构建的各个方面,并通过更为丰富和实际的示例代码,帮助大家全面了解和掌握这一重要技术。