对docker container进行内核参数调优(tune)

原创 2015年04月06日 22:37:19

对于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

然后就可以在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), 有些参数是无法修改的

上面提到的Linux内核各调优参数可以参考此文

docker - 资源限制

rhel7 下运行 docker 时 limits 限制方法
  • signmem
  • signmem
  • 2016年05月10日 17:27
  • 3795

Docker学习笔记-Docker容器

启动容器docker run -ti ubuntu /bin/bash docker run = 先docker create 再 docker start -t 表示 让docker分配一...
  • qq_29994609
  • qq_29994609
  • 2016年06月17日 04:42
  • 1023

使用 docker 后出现的网络异常现象

使用 docker 后出现的网络异常, 需要进行内核参数优化后解决
  • signmem
  • signmem
  • 2016年01月20日 10:11
  • 2253

Docker网络详解

Docker网络详解 转载请注明来自:http://blog.csdn.net/wsscy2004 网络基础 Docker使用linux桥接,在主机虚拟一个docker0网络接口,在...
  • wsscy2004
  • wsscy2004
  • 2014年05月15日 14:06
  • 27449

Docker同时启动多个服务

前几篇Docker的文章介绍启动容器时都是只启动一个后台服务,今天来说说怎样通过supervisor来启动多个服务1. 首先创建一个目录并在目录下创建一个Dockerfile,文件内容如下FROM c...
  • kongxx
  • kongxx
  • 2015年01月08日 19:02
  • 16488

调整/etc/sysctl.conf网络参数提高系统负载

http://www.t086.com/article/4791 调整/etc/sysctl.conf net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies...
  • hshl1214
  • hshl1214
  • 2015年03月22日 10:46
  • 882

-bash: ulimit: max user processes: cannot modify limit: Operation not permitted

安装oracle时候在创建oracle用户后,切换oracle用户时,报如下错 [root@localhost ~]# su - oracle -bash: ulimit: max user pro...
  • Evils798
  • Evils798
  • 2012年09月18日 14:00
  • 11817

docker物理机进程数过多问题

无Docker不OpenStack,当前讨论OpenStack总是离不开Docker。这里我先嚼一下剩饭,下面是OpenStack上Docker技术分布的老图。 线程数量上限" fork: ...
  • S1234567_89
  • S1234567_89
  • 2016年03月15日 11:12
  • 1302

tcp_tw_recycle和tcp_tw_reuse

tcp_tw_recycle和tcp_tw_reuse tcp TIME_WAIT 进入主题前必须做铺垫啊,讲讲TIME_WAIT.因为TCP连接是双向的,所以在关闭连接的时候,两个方向各自都需要关闭...
  • secretx
  • secretx
  • 2017年04月07日 16:14
  • 1317

Docker之修改/etc/default/docker 里的DOCKER_OPTS参数不生效问题-yellowcong

默认情况下,/etc/default/docker配置了不会生效的,我们需要手动添加到docker的环境设定中,需要配置的文件是/usr/lib/systemd/system/docker.servi...
  • yelllowcong
  • yelllowcong
  • 2017年07月30日 20:25
  • 2310
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:对docker container进行内核参数调优(tune)
举报原因:
原因补充:

(最多只允许输入30个字)