prlimit 是 linux 中用于动态修改进程资源限制的工具,基于 /proc/pid/limits 工作,支持调整 cpu 时间、内存、文件描述符等,需注意权限约束与 systemd/cgroup 干预。

在 Linux 系统中,prlimit 是一个非常实用的工具,允许你在不重启进程的前提下,动态修改其资源限制(如 CPU 时间、内存、文件描述符数量等)。它基于 /proc/PID/limits 接口工作,适用于大多数由 fork() + exec() 启动的常规进程(非内核线程、systemd 服务需注意权限与 scope)。
确认目标进程并检查当前限制
先通过 ps 或 pidof 获取进程 PID,再用 prlimit 查看当前各项软硬限制:
-
prlimit -p 1234—— 显示 PID 为 1234 的进程所有资源限制 -
prlimit -p 1234 --as—— 仅查看地址空间(虚拟内存)限制 -
prlimit -p 1234 --nofile—— 仅查看打开文件数限制
输出中 SOFT 表示当前生效值(可运行时调整),HARD 是上限(通常需 root 权限才能调高)。
动态调整单个资源限制
语法格式为:prlimit -p PID --RESOURCE=NEW_VALUE。常用调整示例:
- 提高文件描述符上限:
prlimit -p 1234 --nofile=8192:8192(软:硬) - 限制最大虚拟内存为 512MB:
prlimit -p 1234 --as=536870912 - 限制 CPU 使用时间为 300 秒(超时后进程收到 SIGXCPU):
prlimit -p 1234 --cpu=300 - 限制 core 文件大小为 0(禁用 core dump):
prlimit -p 1234 --core=0
注意:部分限制(如 --cpu)是累计值,从进程启动开始计时;修改后立即生效,无需 reload 或 restart。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
调整限制时的权限与限制条件
prlimit 修改资源受以下因素约束:
- 普通用户只能降低自己的软限制,或在硬限制范围内提升软限制
- 提升硬限制(如
--nofile=10240:10240中第二个值)必须由 root 执行 - systemd 启动的服务默认受
DefaultLimit*或 service unit 中LimitNOFILE=控制,直接 prlimit 可能被 cgroup 或 systemd watchdog 覆盖 - 已 fork 出子进程的父进程,其限制变更不会自动继承给子进程
配合脚本实现自动化调整
可将 prlimit 写入运维脚本,例如临时缓解“too many open files”问题:
#!/bin/bash<br>pid=$(pidof myapp)<br>if [ -n "$pid" ]; then<br> prlimit -p "$pid" --nofile=16384:16384 2>/dev/null && echo "nofile raised for PID $pid"<br>else<br> echo "myapp not running"<br>fi
执行前建议先用 lsof -p PID | wc -l 确认当前使用量,避免盲目设限引发异常。










