目录

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;点击安装即可安装后的效果