ulimit參數使用詳細總結

目錄

1. 基本介紹

1.1 核心功能

1.2 作用范圍

1.3 限制類型

2. 基本語法

3. 常用選項?

3.1 常見options

3.2 查看當前限制

4. 核心概念

4.1 軟限制(Soft Limit)

4.2 硬限制(Hard Limit)

5. 修改限制?

5.1 臨時修改

5.2 永久修改

方法1:修改?/etc/security/limits.conf

方法2:針對Systemd服務的限制

6. 正確配置優先級

7. 驗證限制

7.1 查看進程實際限制

?7.2 查看 Systemd 服務的當前限制

?7.3 查看某進程的文件描述符限制

?7.4?查看系統當前打開文件描述符總數

?7.5?查看系統最大文件描述符數

7.6?實時監控文件描述符使用情況?

?7.7?查看特定進程的當前限制?

8. 常見問題

8.1 修改后不生效?

8.2 權限不足?

9. 應用場景

9.1 Web 服務器 (Nginx/Apache)

9.2 數據庫 (MySQL/PostgreSQL):

9.3 調試程序崩潰:

9.4 防止資源耗盡攻擊:

9.5 嵌入式/資源受限系統:

9.6?容器化環境

10. 注意事項

10.1 謹慎修改硬限制??

10.2 不同shell的行為差異??

??10.3 故障排查??

10.4?nproc?限制與容器

10.5?限制繼承性

10.6?Limits.conf?的生效范圍

10.7?云環境限制

10.8 權限差異

10.9 Unlimited


1. 基本介紹

1.1 核心功能

? ? ????查看和設置?當前 Shell 進程及其啟動的子進程?可使用的?系統資源限制

1.2 作用范圍

????????限制由 Shell 啟動的單個進程或用戶會話的資源使用,防止資源耗盡(如打開文件過多、內存泄露、進程爆炸等)。

1.3 限制類型

????????包括文件描述符數量、進程數、內存大小、堆棧大小、CPU 時間、core 文件大小等。

2. 基本語法

1.1 基本語法

ulimit   [options]   [limit]

其中,options為控制限制類型的標志,limit則是指定資源限制的值。若省略limit,ulimit將顯示當前設置。

3. 常用選項?

3.1 常見options

  • -a:顯示所有當前限制。?
  • -c:設置或顯示 core 文件的最大大小(以塊為單位)。?
  • -d:設置或顯示進程數據段的最大大小(以 KB 為單位)。?
  • -f:設置或顯示由 shell 及其子進程創建的文件的最大大小(以塊為單位)。?
  • -l:設置或顯示可鎖定到內存中的最大大小(以 KB 為單位)。?
  • -m:設置或顯示最大常駐集大小(以 KB 為單位)。?
  • -n:設置或顯示最大打開文件描述符數。?
  • -q:設置或顯示 POSIX 消息隊列的最大字節數。?
  • -s:設置或顯示最大堆棧大小(以 KB 為單位)。?
  • -t:設置或顯示最大 CPU 時間(以秒為單位)。?
  • -u:設置或顯示單個用戶可用的最大進程數。?
  • -v:設置或顯示 shell 可用的最大虛擬內存(以 KB 為單位)。

3.2 查看當前限制

ulimit -a:列出所有當前資源限制

$ ulimit -a
core file size          (blocks, -c) 0          # core 文件大小 (塊)
data seg size           (kbytes, -d) unlimited  # 數據段大小 (KB)
scheduling priority             (-e) 0          # 調度優先級
file size               (blocks, -f) unlimited  # 文件大小 (塊)
pending signals                 (-i) 31111      # 掛起信號數量
max locked memory       (kbytes, -l) 64         # 鎖定內存 (KB)
max memory size         (kbytes, -m) unlimited  # 常駐內存集大小 (KB)
open files                      (-n) 1024       # 打開文件描述符數
pipe size            (512 bytes, -p) 8          # 管道緩沖區大小
POSIX message queues     (bytes, -q) 819200     # POSIX 消息隊列
real-time priority              (-r) 0          # 實時優先級
stack size              (kbytes, -s) 8192       # 棧大小 (KB)
cpu time               (seconds, -t) unlimited  # CPU 時間 (秒)
max user processes              (-u) 31111      # 用戶最大進程數
virtual memory          (kbytes, -v) unlimited  # 虛擬內存 (KB)
file locks                      (-x) unlimited  # 文件鎖

4. 核心概念

4.1 軟限制(Soft Limit)

當前生效的資源閾值,進程可自行調整(不超過硬限制);超出時可能觸發警告而非直接終止

4.2 硬限制(Hard Limit)

系統強制上限,僅 root 可修改,超限時進程會被強制終止。

在設置限制時,如果不指定是軟限制還是硬限制,默認是軟限制。

設置硬限制,使用-H選項,例如ulimit -Hn 2048設置文件描述符的硬限制為2048;

設置軟限制,使用-S選項,如ulimit -Sn 1024。

5. 修改限制?

5.1 臨時修改

# 修改當前Shell的限制(僅對當前會話有效)
ulimit -n 65535       # 文件描述符數
ulimit -u 10000       # 用戶進程數
ulimit -f unlimited   # 文件大小無限制

5.2 永久修改

方法1:修改?/etc/security/limits.conf
vim /etc/security/limits.conf
# 添加以下內容(示例)
*         soft    nofile      65535
*         hard    nofile      65535
username  hard    nproc       10000# 為用戶 'appuser' 設置打開文件描述符限制
appuser soft nofile 65536
appuser hard nofile 65536# 為用戶 'appuser' 設置進程數限制
appuser soft nproc 4096
appuser hard nproc 8192# 為所有用戶設置核心文件大小限制
* soft core 0* hard core 0# 為 'dba' 組成員設置更高的內存鎖定限制
@dba hard memlock 262144
@dba soft memlock 262144
  • /etc/security/limits.d/*.conf:系統允許在 /etc/security/limits.d/ 目錄下放置額外的 .conf 文件來管理特定服務或用戶的限制,便于模塊化管理。

  • /etc/default/ 下的服務配置文件:某些服務(如 sshd, systemd 服務)可能有自己的默認配置文件,其中可以設置 ulimit 或通過 systemdLimit* 指令。

  • systemd 服務單元文件:對于由 systemd 管理的服務,可以在服務的 .service 文件中使用 LimitNOFILE, LimitNPROC, LimitCORE 等指令來設置資源限制,這通常比 /etc/security/limits.conf 更直接有效,特別是對于非交互式服務。

  • *?表示所有用戶,也可替換為具體用戶名。
  • soft?為軟限制(可臨時突破),hard?為硬限制(需root權限修改)。
  • nproc 表示單個用戶能夠創建的最大進程數或線程數,在 Linux 中線程和進程的概念在資源限制上是一樣的)。這有助于防止某個用戶啟動過多的進程而導致系統資源耗盡,影響其他用戶的正常使用。
  • nofile 代表一個進程可以同時打開的最大文件描述符數量(包括網絡連接、文件等)。文件描述符是操作系統用于管理和跟蹤文件、網絡連接等輸入輸出資源的一個抽象。
方法2:針對Systemd服務的限制
vim /etc/systemd/system.conf
# 修改以下參數
DefaultLimitNOFILE=65535
DefaultLimitNPROC=10000
# 重啟生效
sudo systemctl daemon-reload

6. 正確配置優先級

場景正確配置方式優先級
Systemd 管理的服務修改服務的?.service?文件中的?Limit*?指令★★★★★
全局默認限制 (Systemd)/etc/systemd/system.conf★★★★☆
用戶登錄會話 (SSH/終端)/etc/security/limits.conf★★★☆☆
臨時調整當前 Shellulimit?命令★★☆☆☆
容器內進程容器啟動參數 (如?docker run --ulimit)★★★★★

7. 驗證限制

7.1 查看進程實際限制

# 查看進程實際限制
cat /proc/<PID>/limits# 示例:查看Nginx主進程限制
ps aux | grep nginx
cat /proc/$(pgrep nginx)/limits
cat /proc/$(pidof nginx)/limits

?7.2 查看 Systemd 服務的當前限制

# 查看 Systemd 服務的當前限制
systemctl show nginx | grep Limit

?7.3 查看某進程的文件描述符限制

grep -i "max open files" /proc/<pid>/limits?? ?

?7.4?查看系統當前打開文件描述符總數

lsof | wc -l
# 或者查看特定進程
lsof -p <PID> | wc -l

?7.5?查看系統最大文件描述符數

# 查看系統最大文件描述符數
cat /proc/sys/fs/file-max# 臨時修改(重啟失效)
echo 2000000 > /proc/sys/fs/file-max# 永久修改
echo "fs.file-max = 2000000" >> /etc/sysctl.conf
sysctl -p

7.6?實時監控文件描述符使用情況?

#實時監控文件描述符使用情況
watch -n 1 'ls -l /proc/$(pidof mysql)/fd | wc -l' 

?7.7?查看特定進程的當前限制?

使用prlimit命令可以查看指定進程的資源限制情況。

prlimit   -p    <進程ID>

8. 常見問題

8.1 修改后不生效?

  • 檢查是否重啟了相關服務或Shell會話。
  • 確認/etc/security/limits.conf/etc/systemd/system.conf語法正確。
  • 確保未通過ulimit -n等命令在會話中覆蓋配置。

8.2 權限不足?

  • 臨時修改需要當前用戶權限。
  • 永久修改可能需要root權限或sudo

9. 應用場景

9.1 Web 服務器 (Nginx/Apache)

提高 nofile (文件描述符) 以應對高并發連接。

配置 systemd unit 文件。Systemd 通過?cgroups?+ Unit 文件配置?實現更強大的資源隔離:

# /etc/systemd/system/nginx.service
[Service]
LimitNOFILE=65535    # 直接控制文件描述符
LimitNPROC=4096      # 直接控制進程數
MemoryMax=2G         # 內存限制 (cgroups)
CPUQuota=80%         # CPU 限制 (cgroups)

Nginx 報錯 “Too many open files”錯時的解決方案。

Systemd 的配置優先級更高且更精確,完全覆蓋?limits.conf?。

9.2 數據庫 (MySQL/PostgreSQL):

提高 nofile 和 nproc,確保高并發連接穩定性。

9.3 調試程序崩潰:

設置 ulimit -c unlimited 允許生成 core dump 文件用于分析。

9.4 防止資源耗盡攻擊:

設置合理的 nproc 限制防止 fork 炸彈。

設置 fsize/as/data 限制進程內存/文件大小。

9.5 嵌入式/資源受限系統:

嚴格限制內存 (-v, -m)、棧大小 (-s)、進程數 (-u)

9.6?容器化環境

容器(Docker/Kubernetes)通過?cgroups/namespaces?直接控制資源:

docker run --ulimit nofile=1024:1024 ...  # 容器內覆蓋所有限制

limits.conf?對容器內進程完全無效

10. 注意事項

10.1 謹慎修改硬限制??

因為硬限制是資源使用的上限,修改硬限制可能會影響系統的穩定性,尤其是對于系統級別的硬限制修改,需要謹慎操

10.2 不同shell的行為差異??

不同的shell可能會有不同的ulimit行為,所以在使用時要確保是在目標shell下進行設置。

??10.3 故障排查??

當遇到資源相關的錯誤,如“too many open files”時,可以先使用ulimit -n查看當前文件描述符的限制,如果懷疑是限制過低導致的,可以嘗試調整限制值來解決問題

10.4?nproc?限制與容器

在容器環境 (Docker/K8s) 中,容器的進程數限制通常由 cgroups 控制,而非?ulimit -u

10.5?限制繼承性

子進程繼承父進程的限制設置

10.6?Limits.conf?的生效范圍

  • 僅影響通過 PAM (Pluggable Authentication Modules) 登錄的會話(如 SSH、本地終端登錄)。

  • 不直接影響

    • 系統啟動的服務 (需用 systemd 配置)

    • 圖形界面 (GUI) 中非終端啟動的程序

    • cron 作業 (需在 cron 配置或腳本中顯式設置)

10.7?云環境限制

部分云服務商鎖定硬限制,需通過平臺控制臺調整。

10.8 權限差異

非 root 用戶只能降低自己的軟限制,且硬限制不可超過系統預設值

10.9 Unlimited

使用?unlimited?時要非常謹慎,因為它可能允許進程耗盡系統資源。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/94243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/94243.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/94243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于ASIC架構的AI芯片:人工智能時代的算力引擎

基于ASIC架構的AI芯片&#xff1a;人工智能時代的算力引擎在深度學習模型參數量呈指數級增長、訓練與推理需求爆炸式發展的今天&#xff0c;通用處理器&#xff08;CPU、GPU&#xff09;在能效比和計算密度上的局限日益凸顯。基于ASIC&#xff08;Application-Specific Integra…

Linux信號機制:從硬件中斷到用戶態處理

當你在終端按下 CtrlC 時&#xff0c;一個簡單的組合鍵觸發了操作系統最精妙的異步通信機制。這種跨越硬件與軟件的協作&#xff0c;正是Linux信號系統的精髓所在。本文將帶你深入探索信號處理的全過程&#xff0c;從CPU中斷到用戶態函數調用&#xff0c;揭示Linux最強大的進程…

C語言基礎:動態申請練習題

1. 動態申請一個具有10個float類型元素的內存空間&#xff0c;從一個已有的數組中拷貝數據&#xff0c;并找出第一次出現 12.35 的下標位置&#xff0c;并輸出。#include <stdio.h> #include <stdlib.h> #include <string.h>int main() {// 動態申請10個flo…

MATLAB 實現 SRCNN 圖像超分辨率重建

MATLAB 實現 SRCNN 圖像超分辨率重建 MATLAB代碼實現&#xff0c;用于基于三層卷積神經網絡的圖像超分辨率重建。代碼參考了多個來源&#xff0c;結合了SRCNN的典型實現步驟。 1. MATLAB代碼實現 % 超分辨率卷積神經網絡(SRCNN)的測試代碼 % 參考文獻&#xff1a;Chao Dong, Ch…

知識蒸餾 - 基于KL散度的知識蒸餾 HelloWorld 示例

知識蒸餾 - 基于KL散度的知識蒸餾 HelloWorld 示例 flyfish 知識蒸餾 - 蒸的什么 知識蒸餾 - 通過引入溫度參數T調整 Softmax 的輸出 知識蒸餾 - 對數函數的單調性 知識蒸餾 - 信息量的公式為什么是對數 知識蒸餾 - 根據真實事件的真實概率分布對其進行編碼 知識蒸餾 - …

從結構到交互:HTML5進階開發全解析——語義化標簽、Canvas繪圖與表單設計實戰

一、語義化標簽進階&#xff1a;重構頁面結構的「邏輯語言」 在 HTML5 的舞臺上&#xff0c;語義化標簽是熠熠生輝的主角&#xff0c;它們為網頁賦予了清晰的邏輯結構&#xff0c;使其更易被搜索引擎理解和被開發者維護。其中&#xff0c;<section>與<article>標簽…

標準七層網絡協議和TCP/IP四層協議的區別

分別是什么? OSI七層協議是國際標準組織制定的標準協議。其中七層分別是物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層。 TCP/IP協議是美國軍方在后期網絡技術的發展中提出來的符合目前現狀的協議。其中四層分別是網絡接口層對應七層中的物理層和數據鏈路層,…

前端面試手撕題目全解析

以下是前端面試中常遭遇的“手撕”基礎題目匯總&#xff0c;涵蓋 HTML→JS→Vue→React&#xff0c;每題附經典實現&#xff0f;原理解析&#xff0c;可現場答題或后端總結。 HTML 基礎題 &#x1f4dd; 語義化卡片&#xff08;Semantic Card ARIA&#xff09; <article cl…

道格拉斯-普克算法 - 把一堆復雜的線條變得簡單,同時盡量保持原來的樣子

道格拉斯-普克算法 - 把一堆復雜的線條變得簡單&#xff0c;同時盡量保持原來的樣子 flyfish 道格拉斯-普克算法&#xff08;Douglas-Peucker Algorithm解決的問題其實很日常&#xff1a;把一堆復雜的線條&#xff08;比如地圖上的道路、河流&#xff0c;或者GPS記錄的軌跡&…

團購商城 app 系統架構分析

一、引言 團購商城 APP 作為一種融合了電子商務與團購模式的應用程序&#xff0c;近年來在市場上取得了顯著的發展。它為用戶提供了便捷的購物體驗&#xff0c;同時也為商家創造了更多的銷售機會。一個完善且高效的系統架構是保障團購商城 APP 穩定運行、提供優質服務的基礎。本…

【AI平臺】n8n入門7:本地n8n更新

?0、前言 目標&#xff1a;本地n8n部署后&#xff0c;有新版本&#xff0c;然后進行更新。官方文檔&#xff1a;Docker | n8n Docs特別說明&#xff1a; n8n鏡像更新后&#xff0c;容器重建&#xff0c;所以之前在n8n配置的東西&#xff0c;就莫有了&#xff0c;工作流提前導…

還在使用Milvus向量庫?2025-AI智能體選型架構防坑指南

前言說明&#xff1a;數據來源&#xff1a;主要基于 Milvus&#xff08;v2.3&#xff09;和 Qdrant&#xff08;v1.8&#xff09;的最新穩定版&#xff0c;參考官方文檔、GitHub Issues、CNCF報告、以及第三方評測&#xff08;如DB-Engines、TechEmpower&#xff09;。評估原則…

3-verilog的使用-1

verilog的使用-1 1.判斷上升沿 reg s_d0; reg s_d1; wire signal_up ; //判斷信號的上升沿 assign signal_up (~touch_key_d1) & touch_key_d0; always (posedge clk or negedge rst_n) beginif(rst_n 1b0) begins_d0< 1b0;s_d1< 1b0;endelse begins_d0&…

ESXI虛擬交換機 + H3C S5120交換機 + GR5200路由器組網筆記

文章目錄一、組網拓撲與核心邏輯1. 拓撲結構2. 核心邏輯二、詳細規劃方案1. VLAN 與 IP 地址規劃2. 設備連接規劃三、配置步驟1. H3C S5120 交換機配置&#xff08;VLAN 與端口&#xff09;2. H3C GR5200 路由器配置&#xff08;路由、網關、NAT&#xff09;3. ESXi 虛擬交換機…

python的駕校培訓預約管理系統

前端開發框架:vue.js 數據庫 mysql 版本不限 后端語言框架支持&#xff1a; 1 java(SSM/springboot)-idea/eclipse 2.NodejsVue.js -vscode 3.python(flask/django)–pycharm/vscode 4.php(thinkphp/laravel)-hbuilderx 數據庫工具&#xff1a;Navicat/SQLyog等都可以 該系統通…

webrtc弱網-QualityScaler 源碼分析與算法原理

一. 核心功能QualityScaler 是 WebRTC 中用于動態調整視頻編碼質量的模塊&#xff0c;主要功能包括&#xff1a;QP 監控&#xff1a;持續監測編碼器輸出的量化參數&#xff08;QP&#xff09;丟幀率分析&#xff1a;跟蹤媒體優化和編碼器導致的丟幀情況自適應決策&#xff1a;根…

Maven 快照(SNAPSHOT)

Maven 快照(SNAPSHOT) 引言 Maven 快照(SNAPSHOT)是 Maven 中的一個重要概念,主要用于版本管理。它允許開發者在構建過程中使用尚未發布的版本。本文將詳細介紹 Maven 快照的原理、用途以及如何在項目中配置和使用快照。 Maven 快照原理 Maven 快照是版本號的一部分,…

2025-0803學習記錄20——畢業論文快速整理成小論文

本科畢業論文寫好啦&#xff0c;但是C導要我整理成一篇約8000字的小論文&#xff0c;準備投稿。畢業論文到投稿的小論文&#xff0c;這其實是從“全景展示”到“聚焦精煉”的過程。目前我已經有完整的大論文&#xff08;約6萬字&#xff09;&#xff0c;材料是充足的&#xff0…

VUE2 學習筆記16 插槽、Vuex

插槽在編寫組件時&#xff0c;可能存在這種情況&#xff0c;頁面需要顯示不同的內容&#xff0c;但是頁面結構是類似的&#xff0c;在這種情況下&#xff0c;雖然也可以使用傳參來進行&#xff0c;但傳參時&#xff0c;還需要編寫props等邏輯&#xff0c;略顯重復&#xff0c;而…

IntelliJ IDEA開發編輯器摸魚看股票數據

在IDEA的插件市場中心搜索stock&#xff0c;檢索結果里面的插件&#xff0c;點擊安裝即可安裝后的效果