zoukankan      html  css  js  c++  java
  • Linux 系统参数调整:ulimit 与 sysctl

    ulimit 和 sysctl

    Linux 系统参数的修改主要包含两个部分:

    1. ulimit:linux shell 的内建命令,它具有一套参数集,用于对 shell 进程及其子进程进行资源限制。(退出 shell 后失效)
      例如用户同时运行了两个shell终端进程,只在其中一个环境中执行了ulimit – s 100,则该 shell 进程里创建文件的大小会有相应的限制,而另一个 shell 终端包括其上运行的子程序都不会受其影响。
      因此 docker-compose.yml 中可以直接设定 ulimit 参数。因为这个参数是 per-process 的。
    2. sysctl:临时修改整个系统的内核参数(重启后失效)
      另外 linux 还有一个 /proc 文件系统,也是 Linux 内核提供的,用于临时查看/修改内核参数的机制,可通过修改文件内容临时修改内核参数。它和 sysctl 功能基本一致。
      docker 和宿主机共用内核,因此直接修改宿主机的 sysctl 参数,在容器内也会生效。
      docker-compose 只支持设置一部分 sysctl 参数, 这是下层 docker 的限制,所有支持的参数见 Docker - Configure namespaced kernel parameters (sysctls) at runtime,格式见 docker-compose - sysctls

    上述两个命令都是临时修改,系统重启后又需要重新设置。要想做到永久修改,需要修改它们对应的默认配置文件:

    1. /etc/security/limits.conf: ulimit 的默认配置
    2. /etc/sysctl.conf: sysctl 的默认配置

    关于这两个配置的详细说明,见参考文档。。

    不同的服务器对系统参数的要求也不尽相同,对参数最敏感的,应该是 数据库/缓存/搜索引擎 这些应用。

    下面介绍几个通用的参数调整。

    一、系统的最大连接数限制

    大部分数据类应用都需要保持很多 TCP 长连接,Linux 默认的 1024 很可能不够用,需要做调整。

    首先调整用户级的 max open files,因为 linux 中一切皆文件,连接也是一个被打开的文件。因此 TCP 连接数上限必须小于用户打开文件描述符的最大数目

    修改 /etc/security/limits.conf 文件末尾的这几个参数来提升上述上限:

    # max open files,针对每个用户的限制,* 表示所有用户
    # 对应 ulimit -n 65535,默认值是 1024
    *  soft  nofile  65535
    *  hard  nofile  65535
    

    然后再修改 /etc/sysctl.conf 中的如下参数(或者直接在末尾添加也行):

    # max open files,系统级限制,不能小于 ulimit 中设置的上限
    fs.file-max = 65535
    # 增大最大连接数
    net.core.somaxconn = 10000
    # 只要还有内存的情况下,就不使用 swap 交换空间
    vm.swappiness = 0
    

    参考

  • 相关阅读:
    NOIP2014D2T2寻找道路(Spfa)
    【割点】【割边】tarjan
    NOIP2013D1T3货车运输(最大生成树+倍增lca)
    lca最近公共祖先(模板)
    人生第一次hash
    【模板】Tarjan求强连通分量
    【模板】链式前向星+spfa
    二叉树的三种遍历
    hdu 3549 最大流
    hdu 1532&&poj1273 基础最大流
  • 原文地址:https://www.cnblogs.com/kirito-c/p/12254664.html
Copyright © 2011-2022 走看看