当前位置: 首页 > ops >正文

Linux 资源限制(进程级,用户级,系统级)

在 Linux 系统中,资源限制按生效范围和持久性可分为 进程级、用户级、系统级 三类,每类对应不同的配置方式和应用场景。以下是详细分类及对比:

1. 进程级别限制(临时生效,优先级最高)

1.1. 修改方式

    • 通过 ulimit 命令在终端中动态调整(需在 shell 会话中执行)
ulimit -n 4096   # 修改当前 shell 进程的文件描述符限制为 4096
ulimit -u 655360 # 修改当前 shell 进程的最大进程数为655360
    • 或在程序中通过 setrlimit() 系统调用(需编程实现)

1.2. 特点

    • 作用范围:仅对当前进程或子进程有效,不影响其他进程。
    • 临时生效:进程结束或 shell 会话退出后失效,无法持久化。
    • 优先级最高:若与用户 / 系统级限制冲突,以进程级设置为准(仅对当前进程有效)。

1.3. 适用场景

    • 临时测试:调试程序时临时提高资源上限。
    • 不建议用于长期配置,因为无法跨会话或重启保持。

2. 用户级别限制(永久生效,但需要重新登录)

2.1. 修改方式

配置文件(永久生效):
# /etc/security/limits.conf 或 /etc/security/limits.d/*.conf
#系统会先读取 /etc/security/limits.conf,再读取 /etc/security/limits.d/目录下的
#所有配置文件(按文件名的 ASCII 码顺序加载),若存在相同的参数修改,后加载的配置会
#覆盖先加载的配置,修改建议:/etc/security/limits.d/下为避免加载顺序与数值顺序不一致,
#数字前缀建议使用两位数(如 10、20、30,先加载 10,再加载 20,最后加载 30)格式:<domain> <type> <item> <value>
# 示例:
*       soft    nofile  1024   # 所有用户的文件描述符软限制,软限制不能大于硬限制
*       hard    nofile  4096   # 硬限制(不可突破)
@dev    hard    nproc   2048   # dev 组的最大进程数硬限制
root    soft    memlock unlimited  # root 用户的内存锁定无限制#查看修改的配置(需重新登录后)
cat /proc/self/limits

2.2. 特点

  • 生效范围:特定用户或用户组(通过 domain 指定),修改后需要重新登录才会生效。
  • 持久性:系统重启后仍有效(依赖 PAM 模块加载)。
  • 优先级:低于进程级,但高于系统级内核参数(用户限制不能超过内核允许的最大值)。

2.3. 适用场景

  • 开发环境:为开发用户组提高文件描述符限制。
  • 数据库服务:为 mysql 用户配置更高的进程数限制。
  • 安全管控:限制普通用户创建过多进程(防止 DoS 攻击)。

3. 系统级资源限制(内核参数)

sysctl 是 Linux 系统中用于修改 系统级别内核参数,按以下顺序加载配置(后加载的覆盖先加载的):

  1. /usr/lib/sysctl.d/*.conf(系统默认配置,优先级最低)
  2. /run/sysctl.d/*.conf(动态生成的配置,通常为空)
  3. /etc/sysctl.d/*.conf(用户自定义配置,按文件名排序)
  4. /etc/sysctl.conf(用户自定义全局配置,优先级最高)

假设存在以下配置文件:

/etc/sysctl.d/50-base.conf:     fs.file-max = 500000
/etc/sysctl.d/99-sysctl.conf:   fs.file-max = 1000000
/etc/sysctl.conf:               fs.file-max = 2000000

最终生效值2000000(来自 /etc/sysctl.conf),如果你希望 /etc/sysctl.d/99-sysctl.conf 中的 fs.file-max = 1000000 生效,必须删除或注释 /etc/sysctl.conf 中的该行

3.1. 修改方式

  • 临时修改(无需重启)
sysctl -w fs.file-max=1000000     					 	# 系统全局最大文件描述符数
sysctl -w fs.nr_open‌=1000000  								#	单个进程最大文件描述符数(大于或等于fs.file-max)
sysctl -w net.ipv4.tcp_max_syn_backlog=8192  	# TCP 半连接队列长度
  • 永久修改
# /etc/sysctl.conf 或 /etc/sysctl.d/*.conf
/etc/sysctl.d/
├── 99-sysctl.conf       # 全局通用参数(避免频繁修改)
├── 100-mysql.conf       # MySQL 专用参数
└── 110-nginx.conf       # Nginx 专用参数
fs.file-max = 1000000  	
‌fs.nr_open‌ = 1000000
net.ipv4.tcp_max_syn_backlog = 8192#只是修改文件,配置需要在重启系统后才会生效,要想立即生效,需要执行下面的代码
sysctl -p                                # 加载 /etc/sysctl.conf
sysctl -p /etc/sysctl.d/99-network.conf  # 加载指定文件#查看系统资源限制
sysctl fs.file-nr
#输出示例:fs.file-nr = 1234 0 1000000 (已用 1234,未用 0,上限 1000000)

3.2. 特点

  • 生效范围全局生效,影响整个系统。
  • 持久性:需写入配置文件,才能在重启后继续生效。
  • 优先级:作为用户级和进程级限制的 最终上限(例如,fs.file-max 限制了系统可分配的最大文件描述符总数)。

3.3. 典型场景

  • 网络优化:调整 TCP 参数提高吞吐量。
  • 内存管理:修改 vm.swappiness 控制内存交换策略。
  • 文件系统:增加 fs.inotify.max_user_watches 允许更多文件监控。

4. 三类限制的对比表

维度

进程级

用户级

系统级(内核参数)

配置文件

ulimit 命令或编程

/etc/security/limits.conf

/etc/sysctl.conf

/etc/security/limits.d/*.conf

/etc/sysctl.d/*.conf

生效范围

当前进程及子进程

特定用户 / 组

整个系统

持久性

临时(会话结束失效)

永久(需重新登录)

永久(需 sysctl -p 或重启)

优先级

最高(但受内核限制约束)

中等

最低(作为全局基线)

典型用途

临时调试、脚本执行

用户资源配额管理

系统性能调优、安全基线

5. 注意事项

  1. 内核参数与 PAM 的协同
    • 用户级限制(如 nofile)不能超过系统级内核参数 fs.file-max 的值。
    • 例如:若 fs.file-max = 100000,则用户级 hard nofile 最大只能设置为 100000。
  1. 验证配置生效
# 查看进程级限制
ulimit -a# 查看用户级限制(需重新登录后)
cat /proc/self/limits# 查看系统级内核参数
sysctl -a | grep fs.file-max

6. 典型场景示例

  1. 提高某个服务的文件描述符限制
1.系统级别限制(每个进程最大能打开的文件数)
vim /etc/sysctl.d/100-file.conf
fs.file-max = 1000000  	
‌fs.nr_open‌ = 1000000
sysctl -p /etc/sysctl.d/100-file.conf2.用户级别限制(用户最大能打开的文件数)
#立即生效配置
ulimit -n 655360
#永久配置,重新登录生效
vim  /etc/security/limits.d/30-nofile.conf
*   soft nofile   655360 
*   hard nofile   655360

  1. 优化高并发 Web 服务器的网络参数
# /etc/sysctl.d/99-network.conf
net.core.somaxconn = 32768
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10000 65535

执行 sysctl -p 使配置立即生效。

  1. 临时调试程序
ulimit -s unlimited  # 临时取消栈大小限制
./memory-hungry-app  # 运行内存密集型应用

通过合理组合使用这三类资源限制,可实现从细粒度进程控制到全局系统优化的全方位资源管理

http://www.xdnf.cn/news/9223.html

相关文章:

  • Debian 11 之使用hostapd与dnsmasq进行AP设置
  • 欧拉定理:若 gcd(a,n)=1,则 a^φ(n)≡1(mod n)。
  • 2025 吉林CCPC
  • 【数据结构】 时间复杂度
  • 浙大版《Python 程序设计》题目集6-3,6-4,6-5,6-6列表或元组的数字元素求和及其变式(递归解法)
  • 前端生成UUID
  • 5.27 打卡
  • 哪些技术要素决定了多媒体数字沙盘的呈现效果与用户体验?
  • Cursor 与DeepSeek的完美契合
  • 树莓派超全系列教程文档--(49)远程访问树莓派
  • 5.27 day 30
  • SQL计算列
  • 数据要素配置如何驱动城市经济韧性的多元模式
  • 【leetcode】209. 长度最小的子数组
  • LeetCode 高频 SQL 50 题(基础版)之 【连接】部分 · 上
  • 车载网关策略 --- 车载网关通信故障处理机制深度解析
  • ElasticSearch整合SpringBoot
  • 《深入解析UART协议及其硬件实现》-- 第一篇:UART基础与协议层详解
  • 一张Billing项目的流程图
  • 16. Git从入门到实践
  • Java-Set集合遍历的全面指南
  • 贝壳后端golang面经
  • 【信号与系统】【转载记录】漫谈《信号与系统》
  • 体绘制学习
  • Android开机向导定制(2)开机向导配置
  • 【免费】【无需登录/关注】多点矩阵计算器,计算任何坐标系转换
  • 【无标题】C++单例模式详解
  • 二次封装 Vuex for Uniapp 微信小程序开发
  • linux如何查看网络设备类型
  • 学者观察 | Web3.0的技术革新与挑战——北京理工大学教授沈蒙