首页/系统/Linux 运维命令速查/prlimit 查看/调整运行中进程限制
进程与作业69 条

prlimit 查看/调整运行中进程限制

ulimit 的动态版:prlimit --pid 看目标进程的 rlimits,还能在线修改软/硬限,不用重启服务。

Linux 运维命令速查系统更新于 2026-10-13

prlimit 是什么

prlimit 是 util-linux 提供的资源限制查看与调整工具,可以理解为 ulimit 的进程外版本:它按 PID 读取目标进程当前真正生效的 rlimits,也能在线调整软限与硬限,不必重启服务。排查「服务跑着跑着打不开文件」「创建线程失败」这类问题时,先用它确认 nofile、nproc 的实际值最有说服力。

基本信息

所属util-linux
语法prlimit [--pid PID] [--nofile=软:硬] [--nproc=N]
权限要求查看他人进程、调高硬限需要 root
常用项nofile 打开文件数、nproc 进程线程数、memlock 锁定内存、stack 栈大小

典型使用场景

  • 服务上线后才发现句柄上限偏小,临时调高顶住再妥善重启
  • 出现「打开文件过多」「无法创建线程」报错时先确认当前生效值
  • 对比同一程序在不同机器上的限制差异,解释行为不一致
  • 压测前临时放宽栈或锁定内存限制
  • 审计关键服务的资源上限是否符合容量规划
  • 定位父子进程限制不一致导致的疑难问题

常用示例

常用示例
prlimit --pid 1234                    # 列出该进程的全部限制
prlimit --nofile --pid 1234           # 只看打开文件数限制
prlimit --nofile=65535:65535 --pid 1234   # 在线提高软硬限
prlimit --nproc=8192 --pid 1234       # 提高进程与线程数上限
prlimit --memlock=unlimited --pid 1234    # 放宽锁定内存限制
prlimit --pid $$                      # 查看当前 shell 自身的限制
cat /proc/1234/limits | head          # 直接读 procfs 的另一种方式
systemctl show app -p LimitNOFILE     # 服务限制来自单元配置

常用限制项

限制项含义常见问题
nofile可打开文件描述符数偏小会报打开文件过多
nproc进程与线程数上限偏小会导致创建线程失败
memlock可锁定内存字节数数据库与缓存服务常需调大
stack进程栈大小偏小会让深递归程序崩溃
硬限软限不得超过它降低后普通用户无法提回
prlimit 的在线调整是临时的:进程重启后会回到配置文件里的值。救急之后要同步修改 systemd 单元、limits.conf 或启动脚本,才算真正解决。
硬限一旦被调低,非 root 身份就无法再提回:修改前先记录原值,或确认手上有 root 权限可以恢复,否则只能靠重启进程还原。
systemd 管理的服务,其限制来自单元配置(如 LimitNOFILE),改 /etc/security/limits.conf 对它们通常无效;改完要 daemon-reload 并重启服务,再用 prlimit 复核生效值。

易错点

  • 把 prlimit 的在线调整当成最终方案:服务一重启限制回到原值,问题再次出现
  • 调低硬限后忘记记录原值:非 root 无法提回,只能重启进程恢复
  • 对 systemd 服务只改 limits.conf:单元配置优先,改动不生效还查不出原因
  • 只看配置文件不看生效值:配置写了但被上层覆盖,prlimit 读到的才是实际值

数据来源与参考

  • man 1 prlimit(util-linux 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌