Linux 資源限制並非單一機制,而是形成「系統級 → 應用級 → 核心級」三層防護體系。理解各層職責邊界,才能精準定位效能瓶頸與安全風險。
/etc/security/limits.conf<domain> <type> <item> <value>
| 欄位 | 說明 |
|---|---|
domain | 用戶名、@group 或 *(全域) |
type | soft(當前生效)、hard(上限)、-(同時設定兩者) |
item | 資源類型(見下表) |
value | 具體數值 |
| 關鍵字 | 限制對象 | 典型場景 |
|---|---|---|
nofile | 單進程最大開啟檔案數 | 高併發伺服器(Nginx、MySQL)必調 |
nproc | 用戶最大進程/執行緒數 | 防止 Fork 炸彈、Java 執行緒池溢位 |
memlock | 可鎖定記憶體位址空間 | 資料庫大頁記憶體、實時運算 |
stack | 執行緒堆疊大小 | 深度遞迴、大量區域變數程式 |
core | 核心轉儲檔案大小 | 除錯環境設為 unlimited |
as | 虛擬位址空間上限 | 容器化環境記憶體硬性隔離 |
修改 limits.conf 後,必須確認 /etc/pam.d/login、/etc/pam.d/sshd、/etc/pam.d/su 等檔案包含:
session required pam_limits.so
架構差異提醒:
/lib/security/pam_limits.so/lib64/security/pam_limits.so路徑錯誤是「配置不生效」的首要原因。
由應用程式自身實作,典型代表:
worker_rlimit_nofile、worker_connections、limit_conn_zone、limit_req_zonemax_connections、open_files_limit、thread_stack-Xmx、-Xss、-XX:MaxDirectMemorySizepm.max_children、rlimit_files、rlimit_core優勢:感知業務語義,可實施更精細的配額與熔斷策略。
透過 sysctl 調整 /proc/sys/ 參數,影響全系統行為:
| 參數 | 作用 |
|---|---|
fs.file-max | 系統全域最大檔案控制代碼數 |
kernel.pid_max | PID 最大值,間接限制進程總數 |
vm.max_map_count | 單進程記憶體映射區域數(Elasticsearch 必調) |
net.core.somaxconn | TCP 連線佇列長度 |
kernel.threads-max | 系統最大執行緒數 |
修改方式:sysctl -w kernel.pid_max=4194303 或寫入 /etc/sysctl.d/99-custom.conf 持久化。
ulimit -a 檢視當前 Shell 繼承的軟限制cat /proc/<PID>/limits 確認具體進程實際生效值systemctl show --property=LimitNOFILE --property=LimitNPROC <service> 查看 systemd 服務單元限制Too many open files、unable to create new native thread 等關鍵字open file descriptors / max 比率,超 80% 告警/proc/PID/limits 復核Linux lftp 連線 FTP 伺服器上傳下載實戰:mirror 目錄同步、mget/mput、書籤、檔案檢視
Linux 用戶管理避坑指南:創建、切換、刪除用戶常見錯誤與解決方案
雙系統修改 GRUB 預設啟動項:讓 Windows 成為預設開機選項
Linux 系統啟動流程深度解析:MBR→GRUB→initramfs→Kernel→init、模組管理實戰
Linux 目錄與檔案建立、刪除指令詳解(mkdir、touch、rm、rmdir)
Linux 搭建 SVN 伺服器完整教學:從安裝、權限控制到自動部署
Ubuntu 13.10 手動編譯安裝 PHP 5.5 + Memcache 完整實錄:依賴鏈、GD2 坑、phpize 報錯全解決