Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Linux ulimit 指令完全指南:使用者資源限制查看與調整實戰

編輯:Linux 系統常見問題解答

ulimit 是 Shell 內建指令,用於查看與設定當前 Shell 及其子進程的資源限制。合理調整可防止單一程式耗盡系統資源(如檔案描述符、記憶體、進程數),是 Java 高併發、高連線服務上線前的必調項目。

語法與常用參數

ulimit [-aHS] [-c core] [-d data] [-f file] [-m memory] [-n nofile] [-s stack] [-t cpu] [-u nproc] [-v vmem]
參數資源單位說明
-a所有限制-顯示目前所有設定值
-cCore dump 檔案大小Blocks0 為禁用 core dump
-d資料段大小KB進程資料區上限
-f建立檔案大小BlocksShell 建立檔案上限
-m實體記憶體KBRSS 上限(Linux 多不強制)
-n開啟檔案描述符數個關鍵參數,預設 1024
-s堆疊大小KB執行緒堆疊上限
-tCPU 時間秒單一進程 CPU 佔用上限
-u使用者進程數個單一用戶最大進程數
-v虛擬記憶體KB位址空間上限
-HHard limit-管理員設定的硬上限,不可超越
-SSoft limit-使用者可自行調整的軟上限(≤ Hard)

實戰調整場景

1. 查看目前限制

ulimit -a
# 輸出範例:
# open files (-n) 1024
# max user processes (-u) 4096

2. 提高檔案描述符上限(高併發服務必調)

Java Netty、Nginx、Redis 等大量長連線服務,預設 1024 遠不夠。

# 臨時生效(當前 Shell 及子進程)
ulimit -n 65535
# 或
ulimit -Sn 65535; ulimit -Hn 65535

3. 設定為無限制(開發/測試環境)

ulimit -d unlimited   # 資料段
ulimit -m unlimited   # 實體記憶體
ulimit -s unlimited   # 堆疊
ulimit -t unlimited   # CPU 時間
ulimit -v unlimited   # 虛擬記憶體

永久生效:修改 /etc/security/limits.conf

# 格式:   
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
# 特定用戶
appuser soft nofile 100000
appuser hard nofile 100000

需確保 /etc/pam.d/login、sshd、su 等 PAM 設定檔包含:

session required pam_limits.so

重新登入後生效(ulimit -a 驗證)。

systemd 服務單獨設定

若服務透過 systemd 啟動,limits.conf 不生效,需在 [Service] 區塊加入:

LimitNOFILE=65535
LimitNPROC=65535

執行 systemctl daemon-reload 並重啟服務。

常見誤區

  • 以為修改 limits.conf 即時生效:需重新登入或重啟服務
  • 混淆 Hard/Soft:Soft 可由用戶調高至 Hard,Hard 需 root 修改 limits.conf
  • 忽略 systemd 服務:systemd 不讀取 limits.conf,必須在 unit 檔設定 Limit*

掌握 ulimit 與 limits.conf,讓資源限制成為保護系統穩定的護欄,而非阻礙效能的絆腳石。

Copyright © Windows教程網 All Rights Reserved