乐闻世界logo
搜索文章和话题

Linux 系统资源限制 ulimit 的作用、配置方法和常见应用场景有哪些?

2月17日 23:35

Linux 系统资源限制(ulimit)是控制进程资源使用的重要机制,可以防止进程占用过多系统资源。

ulimit 基本概念:

  • ulimit 是 shell 内置命令,用于控制 shell 进程及其子进程的资源限制
  • 限制分为软限制(soft limit)和硬限制(hard limit)
  • 软限制可以由用户调整,但不能超过硬限制
  • 硬限制只能由 root 用户提高
  • 配置文件:/etc/security/limits.conf、/etc/security/limits.d/

常用 ulimit 命令:

  • ulimit -a:显示所有当前资源限制
  • ulimit -n:查看/设置最大打开文件数
  • ulimit -u:查看/设置最大用户进程数
  • ulimit -s:查看/设置栈大小
  • ulimit -v:查看/设置最大虚拟内存
  • ulimit -m:查看/设置最大常驻内存
  • ulimit -c:查看/设置 core 文件大小
  • ulimit -t:查看/设置最大 CPU 时间
  • ulimit -f:查看/设置最大文件大小
  • ulimit -l:查看/设置最大锁定内存
  • ulimit -p:查看/设置管道缓冲区大小
  • ulimit -e:查看/设置最大调度优先级
  • ulimit -r:查看/设置最大实时优先级

资源限制类型:

  • 文件描述符限制:
    • open files:最大打开文件数(-n)
    • max locked memory:最大锁定内存(-l)
  • 进程限制:
    • max user processes:最大用户进程数(-u)
    • max pending signals:最大挂起信号
  • 内存限制:
    • max memory size:最大常驻内存(-m)
    • virtual memory:最大虚拟内存(-v)
    • stack size:栈大小(-s)
  • CPU 限制:
    • cpu time:最大 CPU 时间(-t)
    • max nice priority:最大 nice 优先级(-e)
    • max realtime priority:最大实时优先级(-r)
  • 其他限制:
    • file size:最大文件大小(-f)
    • pipe size:管道缓冲区大小(-p)
    • core file size:core 文件大小(-c)

limits.conf 配置格式:

  • 格式:
  • domain:可以是用户、组、*(所有用户)、%组名
  • type:soft(软限制)、hard(硬限制)、-(同时设置软硬限制)
  • item:资源类型,如 nofile、nproc、memlock 等
  • value:限制值,unlimited 表示无限制

配置示例:

shell
# 限制所有用户的最大打开文件数 * soft nofile 65535 * hard nofile 65535 # 限制特定用户的最大进程数 username soft nproc 4096 username hard nproc 8192 # 限制特定组的最大内存 @groupname soft memlock 1048576 @groupname hard memlock 2097152 # 启用 core 文件 * soft core unlimited * hard core unlimited

临时修改限制:

  • 在当前 shell 中修改:ulimit -n 65535
  • 仅对当前 shell 及其子进程有效
  • 退出 shell 后失效

永久修改限制:

  • 编辑 /etc/security/limits.conf 文件
  • 编辑 /etc/security/limits.d/ 目录下的配置文件
  • 修改后需要重新登录才能生效
  • 对于服务进程,需要重启服务

systemd 服务限制:

  • 在服务配置文件中设置限制
  • 配置项:
    • LimitNOFILE=65535:最大打开文件数
    • LimitNPROC=4096:最大进程数
    • LimitMEMLOCK=infinity:最大锁定内存
    • LimitCORE=infinity:core 文件大小
  • 示例:
    shell
    [Service] LimitNOFILE=65535 LimitNPROC=4096

常见应用场景:

  • Web 服务器(Nginx、Apache):
    • 增加最大打开文件数:ulimit -n 65535
    • 增加最大进程数:ulimit -u 4096
  • 数据库服务器(MySQL、PostgreSQL):
    • 增加最大打开文件数:ulimit -n 65535
    • 增加 core 文件大小:ulimit -c unlimited
  • 高并发应用:
    • 增加最大打开文件数:ulimit -n 65535
    • 增加最大进程数:ulimit -u 8192
  • 开发环境:
    • 启用 core 文件:ulimit -c unlimited
    • 增加 core 文件大小:ulimit -c unlimited

查看进程限制:

  • 查看 PID 的限制:cat /proc/PID/limits
  • 查看进程打开的文件数:ls /proc/PID/fd | wc -l
  • 查看进程线程数:ps -eLf | grep PID | wc -l

故障排查:

  • "Too many open files" 错误:增加 ulimit -n
  • "Cannot allocate memory" 错误:检查内存限制
  • 进程无法启动:检查进程数限制
  • core 文件未生成:检查 core 文件限制

最佳实践:

  • 根据应用需求设置合理的限制值
  • 不要设置过高的限制值,避免资源耗尽
  • 监控资源使用情况,及时调整限制
  • 在生产环境应用前先在测试环境验证
  • 定期检查和更新限制配置
标签:Linux