ulimit 控制 Shell 及其子進程資源使用上限,合理調優可顯著提升高併發應用(Java、Nginx、數據庫)穩定性。本文涵蓋臨時/永久設置方法、關鍵參數推薦值、配置文件修改位置及 Solaris 平台差異。
| 參數 | 命令 | 推薦值 | 說明 |
| 最大進程數 | ulimit -u | 10000+ | 防止 fork 炸彈、支持高併發 |
| 最大文件描述符 | ulimit -n | 4096~65535 | 關鍵:默認 1024 嚴重不足 |
| 數據段大小 | ulimit -d | unlimited | |
| 最大內存 | ulimit -m | unlimited | |
| 棧大小 | ulimit -s | unlimited | 防止棧溢出 |
| CPU 時間 | ulimit -t | unlimited | |
| 虛擬內存 | ulimit -v | unlimited | |
三種生效方式
1. 臨時生效(當前 Shell 會話)
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
...
2. 用戶級永久生效(登錄腳本)
# /etc/profile 或 ~/.bash_profile
ulimit -u 10000
ulimit -n 4096
ulimit -d unlimited
ulimit -m unlimited
ulimit -s unlimited
ulimit -t unlimited
ulimit -v unlimited
3. 系統級永久生效(PAM limits.conf)
# /etc/security/limits.conf
* soft nofile 4100
* hard nofile 4100
* soft nproc 11000
* hard nproc 11000
需確保 /etc/pam.d/login 和 /etc/pam.d/system-auth 包含:
session required /lib/security/pam_limits.so
SSH 遠程會話生效配置
# /etc/ssh/sshd_config
UseLogin yes
# 重啟 sshd
systemctl restart sshd
Solaris 平台差異
驗證命令
ulimit -a # 顯示所有限制
ulimit -n # 顯示文件描述符限制
cat /proc/PID/limits # 查看進程實際限制