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

參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM