zoukankan      html  css  js  c++  java
  • docker 中ulimit设置理解

    背景:

    在k8s上跑es集群碰到的问题

    • OS版本 红旗4.5(基于centos6.8 内核)
    • Docker:1.17.02
    现象:

    本次出现的问题现象:es pod启动失败,一直报max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
    我们知道这个问题就是容器中的ulimit不对,只获得默认的值:4096
     现象搞清楚后,解决问题就很简单了,方法很多。后面细说。

    总结:

    一句话总结:当服务器重启后,Docker daemon随之系统启动而启动,当启动Container时,因未获取到主机设置的ulimit值而导致启动后一会儿就失败了,重启Docker Deamon后解决(ps:这不是解决问题的方法,这只是瞎猫撞到死耗子)。

    解决方法
    探讨centos7下的ulimit

    1), centos7 采用systemd进行系统初始化,自动会调用systemd下的启动脚本docker.service,其申明默认值如下:
    [Service]
    ExecStart=/usr/bin/docker -d -H fd://
    MountFlags=slave
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    2)centos6的话,docker daemon启动,并未设置默认值。参考:sysvinit-redhat

    优雅解决

    经过上面的讨论,相应把问题应该说清楚了,也解释清楚了。那么centos6下,除了上述的手动重启docker daemon方法解决外,还有其他方法吗?答案是肯定的,有很多方法,这里简要说一种吧,思路类似。
    即:若使用sysV服务,则在/etc/init.d/functions最开头添加一行:ulimit -u 204800 -HSn 204800

    原理为:docker服务启动脚本第一行会去执行它。

    [guansheng@xx-xx-xx-yf-core ~]# ll /etc/rc.d/rc3.d/ |grep docker

     lrwxrwxrwx 1 guansheng root  16 Jul 3 19:25 S95docker -> ../init.d/docker

  • 相关阅读:
    值币转换编程总结
    打印沙漏编程总结
    Leetcode每日一题 面试题 17.21. 直方图的水量
    VS2017-OPENGL配置glfw+glad
    OpenGL(二) 绘制一个三角形
    OpenGL(一) 渲染循环创建窗口
    Leetcode每日一题 1006.笨阶乘
    Leetcode每日一题 90.子集 II
    Leetcode每日一题 190.颠倒二进制位
    Leetcode 第243场周赛 创新奇智&力扣
  • 原文地址:https://www.cnblogs.com/guigujun/p/10142542.html
Copyright © 2011-2022 走看看