0

0

如何在Linux中资源限制 Linux ulimit配置方法

P粉602998670

P粉602998670

发布时间:2025-08-31 11:11:01

|

1057人浏览过

|

来源于php中文网

原创

Linux通过ulimit命令和配置文件限制进程资源,防止资源滥用影响系统稳定。

如何在linux中资源限制 linux ulimit配置方法

Linux中的资源限制,主要是通过

ulimit
命令和相关的配置文件来实现的。它允许你控制进程可以使用的系统资源,比如打开的文件数量、CPU时间、内存等,防止单个进程消耗过多资源影响系统稳定性。

资源限制,说白了,就是给进程划定一个活动范围。超出这个范围,对不起,系统就要出手干预了。

Linux ulimit配置方法

ulimit
命令本身是用来查询和设置当前 shell 会话的资源限制。但要让这些限制永久生效,就需要修改配置文件。

  1. 使用

    ulimit
    命令 (临时生效):

    • 查看当前所有限制:
      ulimit -a
    • 查看单个限制,比如最大打开文件数:
      ulimit -n
    • 设置最大打开文件数 (当前会话):
      ulimit -n 4096
      (注意:非root用户通常只能降低限制,不能提高)
  2. 修改

    /etc/security/limits.conf
    (永久生效):

    这个文件是配置用户资源限制的主要地方。

    • 语法:

      username|@groupname type item value

      • username
        : 用户名,
        *
        代表所有用户。
      • @groupname
        : 组名,
        @
        开头。
      • type
        :
        soft
        (软限制,用户可以自行提高到硬限制) 或
        hard
        (硬限制,不可超过)。
      • item
        : 要限制的资源,比如
        nofile
        (最大打开文件数),
        cpu
        (CPU时间),
        memlock
        (锁定内存) 等。
      • value
        : 限制的值。
    • 例子:

      * soft nofile 1024
      * hard nofile 4096
      user1 soft cpu 10
      @group1 hard memlock 1024

      上面的例子表示:所有用户的软限制最大打开文件数为1024,硬限制为4096;用户user1的CPU时间软限制为10秒;group1组的硬限制锁定内存为1024KB。

    • 注意: 修改此文件后,需要重新登录才能生效。

  3. *修改 `/etc/pam.d/common-session

    (配合
    limits.conf`):**

    为了让

    /etc/security/limits.conf
    中的设置生效,需要在 PAM 配置文件中启用
    pam_limits.so
    模块。

    • 打开

      /etc/pam.d/common-session
      /etc/pam.d/common-session-noninteractive
      (有些系统可能只有一个
      common-session
      )。

    • 确保包含以下行 (如果没有就添加):

      Napkin AI
      Napkin AI

      Napkin AI 可以将您的文本转换为图表、流程图、信息图、思维导图视觉效果,以便快速有效地分享您的想法。

      下载
      session required pam_limits.so
    • 这行配置告诉 PAM 在会话建立时应用

      limits.conf
      中的限制。

  4. Systemd 的资源限制:

    对于使用 Systemd 的系统,还可以通过 Systemd 的 unit 文件来配置资源限制。

    • 在 unit 文件的

      [Service]
      部分添加
      Limit*
      指令。

    • 例子:

      [Service]
      LimitNOFILE=4096
      LimitCPU=10
    • 然后

      systemctl daemon-reload
      systemctl restart your_service
      使配置生效。

为什么需要限制资源?

资源限制并非摆设,它能有效地防止程序失控,特别是那些容易出现内存泄漏、无限循环的程序。想象一下,如果一个恶意程序或buggy程序可以无限制地占用系统资源,那整个系统很快就会崩溃。

如何确定合适的资源限制?

确定合适的资源限制是一个需要权衡的过程。限制太严格,可能会导致程序运行出错;限制太宽松,又起不到保护系统的作用。

  • 了解程序的需求: 首先要了解程序正常运行所需的资源。可以通过监控程序运行时的资源使用情况来确定。
  • 逐步调整: 可以先设置一个相对宽松的限制,然后逐步收紧,直到找到一个平衡点。
  • 考虑系统负载: 在高负载的系统上,应该设置更严格的限制,以防止单个程序占用过多资源。
  • 区分用户类型: 对于普通用户,可以设置相对严格的限制;对于系统管理员或特定服务,可以设置更宽松的限制。

soft
hard
限制的区别是什么?

soft
限制是用户可以自行调整的限制,但不能超过
hard
限制。
hard
限制是系统管理员设置的,用户无法修改。
soft
限制提供了一定的灵活性,允许用户根据实际需要调整资源使用,但
hard
限制确保了系统资源的底线。

ulimit
命令的常见参数有哪些?

ulimit
命令有很多参数,以下是一些常用的参数:

  • -a
    : 显示所有资源限制。
  • -c
    : 核心转储文件的大小 (core file size)。
  • -d
    : 进程的数据段大小 (data segment size)。
  • -f
    : 进程可以创建的文件大小 (file size)。
  • -l
    : 进程可以锁定的内存大小 (locked-in-memory size)。
  • -m
    : 进程可以使用的最大内存大小 (resident set size)。
  • -n
    : 进程可以打开的最大文件数 (number of open files)。
  • -p
    : 管道缓冲区大小 (pipe size)。
  • -s
    : 进程的堆栈大小 (stack size)。
  • -t
    : 进程可以使用的最大 CPU 时间 (CPU time)。
  • -u
    : 用户可以运行的最大进程数 (number of processes)。
  • -v
    : 进程可以使用的虚拟内存大小 (virtual memory)。

如何排查
ulimit
配置不生效的问题?

ulimit
配置不生效,这事儿我也遇到过,原因往往比较隐蔽。

  1. 检查配置文件: 首先要确认
    /etc/security/limits.conf
    文件是否正确配置,语法是否正确。
  2. 检查 PAM 配置: 确保
    /etc/pam.d/common-session*
    文件中包含了
    session required pam_limits.so
    这一行。
  3. 重启会话: 修改配置文件后,需要重新登录才能生效。仅仅重启终端是不够的,需要完全退出当前用户会话,然后重新登录。
  4. Systemd 服务: 如果资源限制是针对 Systemd 服务的,需要
    systemctl daemon-reload
    systemctl restart your_service
  5. 用户权限: 非 root 用户只能降低限制,不能提高。
  6. 覆盖配置: 有些程序可能会自行设置资源限制,覆盖了
    ulimit
    的配置。需要检查程序的启动脚本或配置文件。
  7. Shell 类型: 不同的 shell (比如 bash, zsh) 可能有不同的配置方式。确保配置适用于当前使用的 shell。
  8. 检查环境变量: 某些环境变量可能会影响
    ulimit
    的行为。

如何监控进程的资源使用情况?

监控进程的资源使用情况,是了解程序需求和排查资源限制问题的关键。

  • top
    命令:
    top
    命令可以实时显示系统中各个进程的资源使用情况,包括 CPU 使用率、内存使用率等。
  • htop
    命令:
    htop
    top
    的增强版,界面更友好,功能更强大。
  • ps
    命令:
    ps
    命令可以列出当前系统中运行的进程,并显示其资源使用情况。
  • vmstat
    命令:
    vmstat
    命令可以显示系统的虚拟内存、CPU、IO 等资源的使用情况。
  • pidstat
    命令:
    pidstat
    命令可以监控单个进程的资源使用情况,包括 CPU 使用率、内存使用率、IO 等。
  • /proc
    文件系统:
    Linux 系统提供了一个
    /proc
    文件系统,其中包含了系统中各个进程的详细信息,包括资源使用情况。可以通过读取
    /proc//status
    文件来获取进程的资源使用情况。
  • 性能监控工具: 可以使用一些专业的性能监控工具,比如 Prometheus, Grafana 等,来实时监控系统的资源使用情况。

说实话,资源限制这东西,平时可能不太会注意到,但真到出问题的时候,它就能起到力挽狂澜的作用。所以,花点时间了解一下

ulimit
,绝对是值得的。

相关专题

更多
session失效的原因
session失效的原因

session失效的原因有会话超时、会话数量限制、会话完整性检查、服务器重启、浏览器或设备问题等等。详细介绍:1、会话超时:服务器为Session设置了一个默认的超时时间,当用户在一段时间内没有与服务器交互时,Session将自动失效;2、会话数量限制:服务器为每个用户的Session数量设置了一个限制,当用户创建的Session数量超过这个限制时,最新的会覆盖最早的等等。

311

2023.10.17

session失效解决方法
session失效解决方法

session失效通常是由于 session 的生存时间过期或者服务器关闭导致的。其解决办法:1、延长session的生存时间;2、使用持久化存储;3、使用cookie;4、异步更新session;5、使用会话管理中间件。

740

2023.10.18

cookie与session的区别
cookie与session的区别

本专题整合了cookie与session的区别和使用方法等相关内容,阅读专题下面的文章了解更详细的内容。

88

2025.08.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

392

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

572

2023.08.10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1349

2023.06.21

云朵浏览器入口合集
云朵浏览器入口合集

本专题整合了云朵浏览器入口合集,阅读专题下面的文章了解更多详细地址。

20

2026.01.20

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.5万人学习

Git 教程
Git 教程

共21课时 | 2.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号